Komputasi Paralel dan CUDA

Nama : Antoni Lim
Kelas : 4IA21
NPM : 51414432
MatKul : Pengantar Komputasi Modern
Dosen : Indra Adi Permana

PENGERTIAN KOMPUTASI PARALEL

Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer independen secara bersamaan. Ini umumnya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar (di industri keuangan, bioinformatika, dll) ataupun karena tuntutan proses komputasi yang banyak. Kasus kedua umum ditemui di kalkulasi numerik untuk menyelesaikan persamaan matematis di bidang fisika (fisika komputasi), kimia (kimia komputasi) dll.

Untuk melakukan aneka jenis komputasi paralel ini diperlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel untuk menyelesaikan satu masalah. Untuk itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya otomatis akan diolah secara parallel.

Di dalam komputasi parallel ada yang dinamakan dengan pemrograman parallel. 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. Bila 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 (dalam waktu yang sama), semakin banyak pekerjaan yang bisa diselesaikan. Analogi yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit dibandingkan bila anda mengerjakan hal tersebut secara berurutan (serial). Atau waktu yg anda butuhkan memotong bawang akan lebih sedikit jika anda kerjakan berdua.

Performa dalam pemrograman paralel diukur dari berapa banyak peningkatan kecepatan (speed up) yang diperoleh dalam menggunakan tehnik paralel. Secara informal, bila anda memotong bawang sendirian membutuhkan waktu 1 jam dan dengan bantuan teman, berdua anda bisa melakukannya dalam 1/2 jam maka anda memperoleh peningkatan kecepatan sebanyak 2 kali.

Parallel processing berbeda dengan multitasking, yaitu satu CPU mengeksekusi beberapa program sekaligus. Parallel processing disebut juga parallel computing. Pada system komputasi parallel terdiri dari beberapa unit prosesor dan beberapa unit memori. Ada dua teknik yang berbeda untuk mengakses data di unit memori, yaitu shared memory address dan message passing. Berdasarkan cara mengorganisasikan memori ini computer parallel dibedakan menjadi shared memory parallel machine dan distributed memory parallel machine.

Prosesor dan memori ini didalam mesin paralel dapat dihubungkan (interkoneksi) secara statis maupun dinamis. Interkoneksi statis umumnya digunakan oleh distributed memory system (sistem memori terdistribusi). Sambungan langsung peer to peer digunakan untuk menghubungkan semua prosesor. Interkoneksi dinamis umumnya menggunakan switch untuk menghubungkan antar prosesor dan memori.

Yang perlu diingat adalah komputasi paralel berbeda dengan multitasking. Pengertian multitasking adalah komputer dengan processor tunggal mengeksekusi beberapa tugas secara bersamaan. Walaupun beberapa orang yang bergelut di bidang sistem operasi beranggapan bahwa komputer tunggal tidak bisa melakukan beberapa pekerjaan sekaligus, melainkan proses penjadwalan yang berlakukan pada sistem operasi membuat komputer seperti mengerjakan tugas secara bersamaan. Sedangkan komputasi paralel sudah dijelaskan sebelumnya, bahwa komputasi paralel menggunakan beberapa processor atau komputer. Selain itu komputasi paralel tidak menggunakan arsitektur Von Neumann.

Untuk lebih memperjelas lebih dalam mengenai perbedaan komputasi tunggal (menggunakan 1 processor) dengan komputasi paralel (menggunakan beberapa processor), maka kita harus mengetahui terlebih dahulu pengertian mengenai model dari komputasi. Ada 4 model komputasi yang digunakan, yaitu:

1.    SISD (Single Instruction, Single Data) adalah satu-satunya yang menggunakan arsitektur Von Neumann. Ini dikarenakan pada model ini hanya digunakan 1 processor saja. Oleh karena itu model ini bisa dikatakan sebagai model untuk komputasi tunggal. Sedangkan ketiga model lainnya merupakan komputasi paralel yang menggunakan beberapa processor. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1.

2.     SIMD(Single Instruction, Multiple Data) menggunakan banyak processor dengan instruksi yang sama, namun setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin mencari angka 27 pada deretan angka yang terdiri dari 100 angka, dan kita menggunakan 5 processor. Pada setiap processor kita menggunakan algoritma atau perintah yang sama, namun data yang diproses berbeda. Misalnya processor 1 mengolah data dari deretan / urutan pertama hingga urutan ke 20, processor 2 mengolah data dari urutan 21 sampai urutan 40, begitu pun untuk processor-processor yang lain. 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).

3.  MISD(Multiple Instruction, Single Data) menggunakan banyak processor dengan setiap processor menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal ini merupakan kebalikan dari model SIMD. Untuk contoh, kita bisa menggunakan kasus yang sama pada contoh model SIMD namun cara penyelesaian yang berbeda. Pada MISD jika pada komputer pertama, kedua, ketiga, keempat dan kelima sama-sama mengolah data dari urutan 1-100, namun algoritma yang digunakan untuk teknik pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer yang menggunakan model MISD.

4.   MIMD( Multiple Instruction, Multiple Data) menggunakan banyak processor dengan setiap processor memiliki instruksi yang berbeda dan mengolah data yang berbeda. Namun banyak komputer yang menggunakan model MIMD juga memasukkan komponen untuk model SIMD. Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.

 Berikut ini adalah gambar perbedaa antara komputasi tunggal dengan parallel komputasi :

a)        komputasi tunggal/serial



b)        komputasi parallel




Perbandingan antara serial komputasi dan parallel komputasi

            Pada sistem komputasi parallel terdiri dari beberapa unit prosesor dan beberapa unit memori. Ada dua teknik yang berbeda untuk mengakses data di unit memori, yaitu shared memory address dan message passing. Berdasarkan cara mengorganisasikan memori ini komputer paralel dibedakan menjadi shared memory parallel machine dan distributed memory parallel machine.

            Prosesor dan memori ini didalam mesin paralel dapat dihubungkan (interkoneksi) secara statis maupun dinamis. Interkoneksi statis umumnya digunakan oleh distributed memory system (sistem memori terdistribusi). Sambungan langsung peer to peer digunakan untuk menghubungkan semua prosesor. Interkoneksi dinamis umumnya menggunakan switch untuk menghubungkan antar prosesor dan memori.

            Komunikasi data pada sistem paralel memori terdistribusi, memerlukan alat bantu komunikasi. Alat bantu yang sering digunakan oleh sistem seperti PC Jaringan pada saat ini adalah standar MPI (Message Passing Interface) atau standar PVM (Parallel Virtual Machine)yang keduanya bekerja diatas TCP/IP communication layer. Kedua standar ini memerlukan fungsi remote access agar dapat menjalankan program pada masing-masing unit prosesor.

            Salah satu protocol yang dipergunakan pada komputasi parallel adalah Network File System (NFS), NFS adalah protokol yang dapat membagi sumber daya melalui jaringan. NFS dibuat untuk dapat independent dari jenis mesin, jenis sistem operasi, dan jenis protokol transport yang digunakan. Hal ini dilakukan dengan menggunakan RPC. NFS memperbolehkan user yang telah diijinkan untuk mengakses file-file yang berada di remote host seperti mengakses file yang berada di lokal. Protokol yang digunakan protokol mount menentukan host remote dan jenis file sistem yang akan diakses dan menempatkan di suatu direktori, protokol NFS melakukan I/O pada remote file system. Protokol mount dan protokol NFS bekerja dengan menggunakan RPC dan mengiri dengan protokol TCP dan UDP. Kegunaan dari NFS pada komputasi parallel adalah untuk melakukan sharing data sehingga setiap node slave dapat mengakses program yang sama pada node master.

            Software yang diperlukan untuk Parallel komputasi adalah PGI CDK, dimana aplikasi ini telah dilengkapi dengan Cluster Development Kit dimana software ini telah memiliki feature yang lengkap bila ingin melakukan komputasi dengan parallel prosessing karena software ini telah mensupport MPI untuk melakukan perhitungan komputasi.

CUDA

CUDA adalah platform komputasi paralel dan antarmuka pemrograman aplikasi (API) yang dibuat oleh Nvidia. Hal ini memungkinkan pengembang perangkat lunak dan insinyur perangkat lunak untuk menggunakan unit pemrosesan grafis (GPU) berkemampuan CUDA untuk pemrosesan tujuan umum-sebuah pendekatan yang diistilahkan GPGPU (komputasi General-Purpose pada Unit Pemrosesan Grafik). Platform CUDA adalah lapisan perangkat lunak yang memberikan akses langsung ke set instruksi virtual GPU dan elemen komputasi paralel, untuk eksekusi kernel komputasi.
Platform CUDA dapat diakses oleh pengembang perangkat lunak melalui CUDA-accelerated libraries, compiler directives seperti OpenACC, dan ekstensi untuk bahasa pemrograman standar industri termasuk C, C ++ dan Fortran. Programmer C / C ++ menggunakan 'CUDA C / C ++', dikompilasi dengan nvcc, kompiler C / C ++ berbasis LLVM dari Nvidia. Programmer Fortran dapat menggunakan 'CUDA Fortran', yang dikompilasi dengan compiler Fortran PGI CUDA dari The Portland Group.
Selain libraries, compiler directives, CUDA C / C ++ dan CUDA Fortran, platform CUDA mendukung antarmuka komputasi lainnya, termasuk OpenCL Khronos Group, Microsoft DirectCompute, OpenGL Compute Shaders, dan C ++ AMP. wrappers pihak ketiga juga tersedia untuk Python, Perl, Fortran, Java, Ruby, Lua, Common Lisp, Haskell, R, MATLAB, IDL, dan dukungan native di Mathematica.
Dalam industri permainan komputer, GPU digunakan untuk perenderan grafis, dan untuk perhitungan fisika permainan (efek fisik seperti puing, asap, api, cairan); contoh termasuk PhysX dan Bullet. CUDA juga telah digunakan untuk mempercepat aplikasi non-grafis dalam biologi komputasi, kriptografi dan bidang lainnya dengan urutan besarnya atau lebih. 

Keuntungan

CUDA memiliki beberapa keunggulan dibandingkan dengan general-purpose computation on GPUs (GPGPU) tradisional menggunakan API grafis:
  • Scattered reads - kode dapat membaca dari alamat acak dalam memori
  • Univied virtual memory (CUDA 4.0 dan lebih tinggi)
  • Unified memory (CUDA 6.0 dan di atasnya)
  • Shared memory - CUDA memaparkan bagian fast shared memory yang dapat dibagikan di antara 5. Thread. Ini dapat digunakan sebagai cache yang dikelola pengguna, memungkinkan bandwidth yang lebih tinggi menggunakan pencarian tekstur.
  • Unduhan dan pembacaan yang lebih cepat ke dan dari GPU
  • Dukungan penuh untuk operasi integer dan bitwise, termasuk pencarian tekstur bilangan bulat

Keterbatasan

  • Baik untuk komputer host atau perangkat GPU, semua source code CUDA sekarang diproses sesuai dengan aturan sintaks C ++. Ini tidak selalu terjadi. Versi CUDA sebelumnya didasarkan pada aturan sintaks C. Seperti halnya kasus yang lebih umum dari mengkompilasi kode C dengan kompiler C ++, karena itu mungkin bahwa source code C-style yang lama akan gagal dikompilasi atau tidak akan berperilaku seperti yang dimaksudkan semula.
  • Interoperabilitas dengan bahasa render seperti OpenGL adalah satu arah, dengan OpenGL memiliki akses ke memori CUDA yang terdaftar tetapi CUDA tidak memiliki akses ke memori OpenGL.
  • Menyalin antara host dan memori perangkat dapat menimbulkan performance hit  karena bandwidth dan latensi bus sistem (ini dapat dikurangi sebagian dengan transfer memori asinkron, ditangani oleh mesin DMA GPU).
  • Thread harus berjalan dalam kelompok setidaknya 32 untuk kinerja terbaik, dengan jumlah total penomoran dalam ribuan. Cabang dalam kode program tidak mempengaruhi kinerja secara signifikan, asalkan masing-masing dari 32 utas mengambil jalur eksekusi yang sama; model eksekusi SIMD menjadi batasan yang signifikan untuk setiap tugas yang berbeda secara inheren (misalnya melintasi struktur data partisi ruang selama pelacakan sinar).
  • Tidak seperti OpenCL, CUDA-enabled GPU hanya tersedia dari Nvidia.
  • Tidak ada fungsi emulator atau fallback yang tersedia untuk revisi modern.
  • Valid C ++ kadang-kadang dapat ditandai dan mencegah kompilasi karena cara kompiler mendekati optimalisasi untuk batasan perangkat GPU target. 
  • C ++ run-time type information (RTTI) dan penanganan pengecualian C ++-style hanya didukung dalam kode host, tidak dalam kode perangkat.
  • Dalam presisi tunggal pada generasi pertama CUDA menghitung kemampuan perangkat 1.x, angka denormal tidak didukung dan malah memerah ke nol, dan presisi pembagian dan operasi akar kuadrat sedikit lebih rendah daripada matematika presisi tunggal yang memenuhi standar IEEE 754. Perangkat yang mendukung kemampuan komputasi 2.0 dan di atas mendukung nomor-nomor normal, dan pembagian dan operasi akar kuadrat sesuai standar IEEE 754 secara default. Namun, pengguna dapat memperoleh matematika game-grade sebelumnya yang lebih cepat dari perangkat 1,x komputasi berkomputasi jika diinginkan dengan menetapkan flag compiler untuk menonaktifkan divisi akurat dan akar kuadrat akurat, dan mengaktifkan pembilasan nomor-nomor normal ke nol.

Sumber :

Comments

Popular posts from this blog

PROPOSAL PROYEK APLIKASI SISTEM INFORMASI PERCETAKAN BERBASIS WEB

Tugas 2 Pengantar Teknologi Game