PARALLEL COMPUTATION


TUGAS SOFTSKILL 4
“PARALLEL COMPUTATION”
PENGANTAR KOMPUTASI MODERN

Disusun oleh :


Afifah Kurniawati        50416277
Badra Danendra          51416289
Maulidya Sakinah        54416313
Noviyanti                      55416512

Kelas : 4IA23


FAKULTAS TEKNOLOGI INDUSTRI
JURUSAN TEKNIK INFORMATIKA
UNIVERSITAS GUNADARMA
2020


A.    Parallelism Concept

Komputasi paralel merupakan salah satu teknik komputasi, dimana proses komputasinya dilakukan oleh beberapa resources (komputer) yang independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya pengolahan data dalam jumlah besar (di industri keuangan, bio informatika, dll) atau dalam memenuhi proses komputasi yang sangat banyak, diperlukan perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel.
Pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi. Tidak berarti dengan mesin paralel semua program yang dijalankan di atasnya otomatis akan diolah secara paralel. Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah / operasi secara bersamaan ( komputasi paralel), baik dalam komputer dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin paralel) CPU.
Komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan adalah sistem terdistribusi (distributed computing). Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi semakin banyak hal yang bisa dilakukan secara bersamaan.
Singkatnya untuk perbedaan antara komputasi tunggal dengan komputasi paralel, bisa digambarkan pada gambar dibawah ini:


Komputasi Tunggal

Komputasi Paralel


Dari perbedaan kedua gambar diatas, dapat disimpulkan bahwa kinerja komputasi paralel lebih efektif dan dapat menghemat waktu untuk pemrosesan data yang banyak dari pada komputasi tunggal.

B.    Distributed Processing
Distributed Processing adalah mengerjakan semua proses pengolahan data secara bersama antara komputer pusat dengan beberapa komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi. Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan menjadi satu penyelesaian total.
Jika salah satu prosesor mengalami kegagalan atau masalah yang lain akan mengambil alih tugasnya. Tujuan dari komputasi terdistribusi adalah menyatukan kemampuan dari sumber daya (sumber komputasi atau sumber informasi) yang terpisah secara fisik, ke dalam suatu sistem gabungan yang terkoordinasi dengan kapasitas yang jauh melebihi dari kapasitas individual komponen-komponennya. Beberapa contoh dari Distributed Data Processing System adalah:
ATM, kompoter yang dirancang untuk tugas-tugas melaksanakan proyek, analisis finansial, penjadwalan waktu dan akuntansi.
Pengolahan data pada server yahoo yang tersebar hampir seluruh dunia secara distribusi, setiap wilayah mempunyai server masing-masing. Seperti di Indonesia mempunyai server tersendiri sehingga pengolahan data tidak di pusat melainkan di wilayah masing-masing.
Pernyataan di atas adalah jaringan saraf tiruan pendekatan yang menekankan sifat paralel pengolahan saraf, dan sifat distribusikan representasi saraf. Ini memberikan kerangka matematika umum bagi para peneliti untuk beroperasi dalam rangka melibatkan delapan aspek utama:
·         Satu set unit pengolahan, diwakili oleh set bilangan bulat.
·         Aktivasi untuk setiap unik, diwakili oleh vektor waktu tergantung fungsi.
·         Fungsi output untuk setiap unit, diwakili oleh vektor fungsi pada aktivasi.
·      Pola konektivitas antar unik, diwakili oleh matriks bilangan real yang menunjukkan kekuatan koneksi.
·         Aturan propogasi menyebarkan aktivasi melalui koneksi, diwakili oleh fungsi pada output dari unit.
·         Aturan aktivasi untuk menggabungkan input ke unit untuk menentukan aktivasi baru, diwakili oleh fungsi pada aktivasi saat ini dan propogasi.
·         Sebuah aturan belajar untuk memodifikasi koneksi berdasarkan pengalaman, diwakili oleh perubahaan bobot berdasarkan pada sejumlah variabel.
·         Lingkungan yang menyediakan sistem dengan pengalaman, diwakili oleh set vektor aktivasi untuk beberapa bagian dari unit.
Paralel distributed computing dapat dibentuk dari:
1.      Ada : digunakan konsep pertemuan yang menggabungkan fitur RPC dan monitor.
2.      PVM (Paralel Virtual Machine) untuk mendukung workstation cluster.
3.      MPI (Message Passing Interaface) programming GUI untuk paralel computers. 




C.    Architectural Parallel Computer
Michael J.Flynn menciptakan satu diantara sistem klasifikasi untuk komputer dan program paralel yang dikenal dengan sebutan Taksonomi Flynn. Flynn mengelompokkan komputer dan program berdasarkan banyaknya set instruksi yang dieksekusi dan banyaknya set data yang digunakan oleh instruksi tersebut. Arsitektur paralel komputer menurut Klasifikasi Flynn’s:
·         SISD (Single Instruction Single Data)

Komputer ini memiliki hanya satu prosesor dan satu instruksi yang dieksekusi secara serial. Komputer ini adalah tipe komputer konvensional. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1. 


·         SIMD (Single Instruction Multiple Data)


Komputer ini memiliki lebih dari satu prosesor, tetapi hanya mengeksekusi satu instruksi secara paralel pada data yang berbeda pada level lock step. Komputer vektor adalah salah satu komputer paralel yang menggunakan arsitektur ini. Beberapa contoh komputer yang menggunakan model SIMD adalah ILLIAC IV, MasPar, Cray X-MP, Cray Y-MP, Thingking Machine CM-2 dan Cell Processor (GPU).

·         MISD (Multiple Instruction Single Data)

Komputer ini memiliki satu prosesor dan mengeksekusi beberapa instruksi secara paralel tetapi praktiknya tidak ada komputer yang dibangun dengan arsitektur ini karena sistemya tidak mudah dipahami. Sampai saat ini belum ada komputer yang menggunakan model MISD. 

·         MIMD (Multiple Instruction Multiple Data)

Komputer ini memiliki lebih dari satu prosesor dan mengeksekusi lebih dari satu instruksi secara paralel. Tipe komputer ini yang paling banyak digunakan untuk membangun komputer paralel. Beberapa kompiuter yang menggunakan model MIMD adalah IBM POWERS, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, dan IBM BG/L.

D.    Konsep Dasar Thread Programming
Thread adalah urutan instruksi terprogram terkecil yang dapat dikelola secara independen oleh scheduler yang biasanya merupakan bagian dari sistem operasi. Thread hampir sama dengan proses, namun dalam kebanyakan kasus, sebuah thread adalah komponen dari suatu proses. Threading dibagi menjadi 2, yaitu:


·         Static Threading
Static Threading merupakan teknik yang memungkinkan thread berbagi memori di komputer shared memory dan mengeksekusi program secara independen. Dalam sistem operasi, jika terdapat banyal thread yang akan dijalankan, thread tersebut akan ditempatkan pada processor dan dijalankan secara bergantian.
·         Dynamic Multithreading
Dynamic Multithreading merupakan pengembangan dari teknik Static Threading yang bertujuan untuk mengoptimasi dan memberikan kemudahan serta memperbaiki kekurangan dari teknik sebelumnya. Teknik ini menyediakan scheduler yang bertugas melakukan load balancing secara otomatis.


Dari gambar diatas menunjukkan ilustrasi dari sebuah proses yang berjalan, di dalamnya terdapat dua eksekusi thread yang berjalan pada satu processor.
Dalam thread programming, antarmuka standar untuk implementasi thread adalah POSIX Threads (Pthreads) yang merupakan kumpulan panggilan library C-Function. Dalam model pemrograman seperti CUDA yang dirancang untuk paralel computation, sebuah array dari thread menjalankan kode yang sama secara paralel hanya menggunakan ID-nya untuk menemukan datanya di memori. Intinya, aplikasi harus dirancang agar setiap thread melakukan operasi yang sama pada segmen memori yang berbeda sehingga bisa beroperasi secara paralel dan menggunakan arsitektur GPU.


E.     Konsep Dasar Massage Passing, Open MP
Massage Passing
Massage passing adalah proses pengiriman data, dimana data dari suatu memori disalin ke memori pada prosesor lain. Karena proses pengiriman datanya antar memori lokal maka teknik message passing biasanya digunakan untuk model komputasi paralel dengan memori terdistribusi. Dalam model ini, proses atau objek dapat mengirim dan menerima pesan (sinyal, fungsi, struktur data kompleks, atau paket data) ke proses atau objek lain.
Operasi dasar yang dibutuhkan untuk mendukung paradigma message passing adalah send dan receive. Operasi pengirim membutuhkan proses pengiriman untuk menspesifikasikan lokasi data, ukuran, tipe, dan tujuan. Operasi penerima harus melakukan penyesuaian dengan operasi pengirim. Konsep message passing membuat lebih mudah untuk membangun sistem yang memodelkan atau mensimulasikan masalah dunia nyata.
Terdapat dua metode dalam pengiriman pesan yaitu :
1.      Synchronous Message Passing
Sistem pengiriman pesan secara sinkron mengharuskan pengirim dan penerima untuk menunggu satu sama lain saat mentransfer pesan. Pengirim menunggu untuk mengirim pesan sampai penerima siap menerima pesan. Oleh karena itu tidak ada buffering. Selain itu pengirim tidak bisa mengirim pesan untuk dirinya sendiri.
2.      Ansynchronous Message Passing
Sedangkan dalam komunikasi asinkron pengirim dan penerima tidak saling menunggu dan dapat melakukan perhitungan sendiri saat pengiriman pesan sedang dilakukan. Pengirim akan mengirim pesan kapanpun dia mau. Pengirim tidak peduli ketika penerima belum siap untuk menerima pesan. Oleh karena itu diperlukan buffering untuk menampung pesan sementara sampai penerima siap menerima pesan.
Selain berdasarkan metode pengiriman pesan diatas, pengiriman pesan (message passing) dapat dibedakan berdasarkan jumlah penerima pesan yaitu : Point to Point dan Broadcast. Perbedaan mendasar keduanya adalah jumlah penerima yang menerima pesan. Pada Point to Point penerimanya tunggal sedangkan pada broadcast jumlah penerimanya banyak.
OpenMP (Open Multiprocessing)
OpenMP merupakan standar yang digunakan untuk pemrograman paralel multithreading pada arsitektur shared memory. OpenMP adalah sebuah antarmuka pemrograman aplikasi (API) untuk menulis aplikasi multithread, berupa satu set direktif compiler dan library untuk pemrograman aplikasi paralel yang menyederhanakan penulisan program multithread pada C, C++, dan Fortran pada berbagai arsitektur, termasuk Unix dan Microsoft Windows platform. Program multithread dapat ditulis dalam berbagai cara. Beberapa diantaranya memungkinkan untuk melakukan interaksi yang kompleks antar thread. OpenMP mencoba untuk memberikan kemudahan pemrograman serta membantu dalam menghindari kesalahan program, melalui pendekatan terstruktur. Pendekatan ini dikenal sebagai model pemrograman fork-join. OpenMP dikelola oleh nirlaba teknologi konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP), bersama-sama didefinisikan oleh sekelompok perangkat keras komputer utama dan vendor perangkat lunak, termasuk AMD, Intel, IBM, Cray, HP, Fujitsu, Nvidia, NEC, Microsoft, dan banyak lagi.  

F.    Konsep Dasar Pemrograman CUDA GPU
Pada awal perkembangan komputer, CPU masih memegang peranan penting dalam pemrosesan komputasi umum maupun grafis. Namun setelah perkembangan grafis yang semakin meluas, kinerja CPU menjadi menurun karena harus melakukan rendering grafis. Pada awal 1980 dibuat hardware khusus untuk mengolah grafis yang dinamakan Graphical Processing Unit (GPU). Pada mulanya GPU hanya digunakan untuk rendering grafis 2D maupun 3D. Seiring dengan perkembangan grafis yang makin meluas serta kebutuhan untuk rendering yang mendekati waktu proses realtime, kemampuan GPU pun turut meningkat. Akselerasi peningkatan GPU tersebut bahkan lebih cepat daripada peningkatan CPU itu sendiri sehingga pada akhirnya GPU sekarang tidak hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum. Berbeda dengan Central Processing Unit (CPU) yang harus siap untuk menjalankan berbagai instruksi program, GPU dirancang untuk melakukan banyak operasi secara paralel. Hal ini dikarenakan GPU dirancang untuk menghitung dan menyajikan pixel-pixel gambar yang akan ditampilkan, dimana tiap pixelnya tidak saling berhubungan. Dengan kemampuan eksekusi paralel secara massif tersebut maka GPU dapat dimanfaatkan dengan CUDA.
Compute Unified Device Architecture atau biasa disebut dengan CUDA merupakan teknologi pemrosesan paralel yang cepat, murah, dan efisien yang dikembangkan oleh produsen kartu grafis Nvidia sejak tahun 2006. CUDA memiliki arsitektur berbasis General Purpose Graphics Processing Unit (GPGPU) yang mempermudah utilitasi GPU untuk memproses aplikasi grafis maupun non-grafis. Arsitektur tersebut memungkinkan programmer maupun pengembang perangkat lunak untuk membuat program yang berjalan pada GPU sehingga kemampuan prosesing GPU dapat dimanfaatkan untuk mengakselerasi komputasi program. Program-program tersebut akan dipecah menjadi banyak eksekusi paralel sehingga prosesnya menjadi lebih cepat. Beberapa program saintifik yang dapat dilakukan untuk memanfaatkan akselerasi ini diantaranya adalah Computational Fluid Dynamics (CFD), Molecular Dynamics, Seismic Simulation, Image Processing dan Video Processing, serta Simulasi Finansial dan Saham. Selain itu, saat ini juga sudah banyak software yang mendukung akselerasi dengan CUDA seperti MATLAB, Blender, Anaconda, dll.
Bahasa yang digunakan untuk pemrograman CUDA adalah bahasa C. Pada pemrograman C biasa, sintaks akan diproses oleh kompiler C, sedangkan sintaks dengan keyword CUDA akan diproses oleh kompiler CUDA (nvcc). Adapun keunggulan yang dimiliki CUDA yaitu:
1.      Antarmuka CUDA application menggunakan standar bahasa C sehingga mudah dipelajari.
2.      Data transfer antara CPU dan GPU sangat cepat sehingga dapat mengurangi latency pengiriman data dari CPU ke GPU ataupun sebaliknya.
3.      Mempunyai shared memory pada setiap multiprosesor dengan kecepatan akses tinggi.

Komentar

Postingan Populer