Senin, 14 Juni 2021

Makalah Komputasi Paralel - Komputasi Modern

Makalah Komputasi Paralel - Komputasi Modern

 

 

 

 

 

 


 

 

 

Kelas : 4IA20

 

 

Kelompok 2

 

 

Efraim Salomo

51417880

Futra Andriyansyah

52417452

Gilang Ramadhan

52417550

Herlangga Maulana Malik

52417743

Nadia Parisya Arundati

54417371

Wildan Fathurrahman

56417201

 

 

 

 

 

 

 

FAKULTAS TEKNOLOGI INDUSTRI JURUSAN TEKNIK INFORMATIKA UNIVERSITAS GUNADARMA

2021


A.  Parallelism Concept

 


Pemakaian komputer secara bersamaan ini jika dilakukan dengan komputer - komputer secara terpisah yang terhubung dalam suatu jaringan komputer, maka istilah ini disebut dengan sistem terdistribusi (distributed computing). Jadi tujuan utama dari pemrograman paralel yaitu untuk membuat performa komputasi semakin meningkat sehingga semakin banyak hal yang bisa dilakukan secara bersamaan dalam waktu yang bersamaan sehingga banyak pekerjaan yang dapat terselesaikan. Pada saat prakteknya, komputasi paralel ini akan memanfaatkan beberapa CPU untuk memproses operasi pada perangkat lunak yang telah ditentikan. Perangkat lunak bisa bekerja sangat lambat ketika ditangani oleh satu CPU karena operasi yang harus diselesaikan sangat banyak, rumit dan memiliki proses yang banyak. Prosesor dengan satu CPU tersebut biasa disebut dengan single-core. Kini dengan perkembangan teknologi, telah muncul penerapan paralel, maka prosesor modern mulai menerapkan multi-core yang berarti dalam sebuah CPU terdapat lebih dari satu inti, hasilnya pemrosesan operasi akan semakin lebih cepat. Kecepatan dalam pemrograman paralel dapat diukur dari seberapa banyak peningkatan kecepatan (speed up) yang didapat pada saat penggunaan teknik paralel.

 

Paralelisme (parallelism) lahir dari pendekatan yang biasa dipergunakan oleh para perancang sistem untuk menerapkan konsep pemrosesan konkuren. Teknik ini meningkatkan kecepatan proses dengan cara memperbanyak jumlah modul perangkat keras yang dapat beroperasi secara simultan disertai dengan membentuk beberapa proses yang bekerja secara simultan pada modul - modul perangkat keras tersebut. Secara formal, pemrosesan paralel adalah sebuah bentuk efisien pemrosesan informasi yang menekankan pada eksploitasi dari konkurensi kejadian - kejadian dalam proses komputasi. Pemrosesan paralel dapat terjadi pada beberapa tingkatan (level) proses. Tingkatan tertinggi pemrosesan paralel terjadi pada proses di antara banyak job (pekerjaan) atau pada program yang menggunakan multi programming, time sharing, dan multiprocessing. Multiprogramming kemampuan eksekusi terhadap beberapa proses perangkat lunak dalam sebuah system secara serentak, jika dibandingkan dengan sebuah proses dalam satu waktu, dan timesharing berarti menyediakan pembagian selang waktu yang tetap atau berubah - ubah untuk banyak program. Multi processing adalah dukungan sebuah sistem untuk mendukung lebih dari satu prosesor dan mengalokasikan tugas kepada prosesor - prosesor tersebut. Multiprocessing sering di implementasikan dalam perangkat keras (dengan menggunakan beberapa CPU sekaligus),


sementara multi programming sering digunakan dalam perangkat lunak. Sebuah sistem mungkin dapat memiliki dua kemampuan tersebut, salah satu di antaranya, atau tidak sama sekali. Pemrosesan paralel dapat juga terjadi pada proses di antara prosedurprosedur atau perintah perintah (segmen program) pada sebuah program. Untuk meningkatkan kecepatan proses komputasi, dapat ditempuh dua cara :

 

1.      Peningkatan kecepatan perangkat keras

 

Komponen utama perangkat keras komputer adalah processor. Meskipun kecepatan processor dapat ditingkatkan terus, namun karena keterbatasan materi pembuatnya, tentu ada suatu batas kecepatan yang tak mungkin lagi dapat dilewati. Karena itu timbul ide pembuatan komputer multiprocessor. Dengan adanya banyak processor dalam satu komputer, pekerjaan bisa dibagi - bagi kepada masing-masing processor. Dengan demikian lebih banyak proses dapat dikerjakan dalam satu saat. Peningkatan kecepatan setiap proses bisa dicapai melalui peningkatan kecepatan perangkat lunak. Kecepatan perangkat lunak sangat ditentukan oleh algoritmanya.

 

2.      Peningkatan kecepatan perangkat lunak

 

Program komputer untuk komputer sekuensial harus menyediakan sederetan operasi untuk dikerjakan oleh prosesor tunggal. Program komputer untuk komputer paralel harus menyediakan sederetan operasi untuk beberapa prosesor untuk dikerjakan secara paralel, termasuk operasi untuk mengatur dan mengitegrasikan prosesor - prosesor yang terpisah tersebut mengerjakan suatu komputasi yang koheren. Kebutuhan akan pembuatan dan pengaturan berbagai aktivitas komputasi paralel menambah dimensi baru proses dari pemrograman komputer. Algoritma untuk problem yang spesifik harus diformulasikan sedemikian rupa, agar menghasilkan aliran operasi paralel yang kemudian akan dieksekusi di prosesor yang berbeda. Karena itu, meskipun arsitektur multiprosesor dan multikomputer mempunyai pontensi yang tinggi untuk meningkatkan kemampuan komputasi, potensi ini akan tercapai melalui pengertian yang baik mengenai bahasa pemrograman paralel dan perancangan algoritma paralel.

 

3.      Tingkat Paralelisme

 

Berdasarkan tingkat paralelismenya prosesor paralel dapat dibagi menjadi beberapa tingkat sebagai berikut :

 

1)      Komputer Array :

a)      Prosesor array : beberapa prosesor yang bekerja sama untuk mengolah set instruksi yang sama dan data yang berbeda - beda atau biasa disebut SIMD (Single Instruction-stream Multiple Data).

b)      Prosesor vektor : beberapa prosesor yang disusun seperti pipeline.

 

2)      Multiprosesor

Yaitu sebuah sistem yang memiliki 2 prosesor atau lebih yang saling berbagi memori.


3)      Multikomputer

Yaitu sebuah sistem yang memiliki 2 prosesor atau lebih yang masing - masing prosesor memiliki memori sendiri.

 

 

a.      Jenis - Jenis Pemrosesan Paralel

 

Pemrosesan paralel dapat dibagi ke dalam beberapa klasifikasi, sebagai berikut :

 

1)      Berdasarkan simetri penjadwalannya, pemrosesan parallel dapat dibagi dalam beberapa jenis :

a)      Asymmetric Multiprocessing (ASMP).

b)      Symmetric Multiprocessing (SMP).

c)      ClusteringPoliteknik Telkom Sistem Komputer.

 

2)      Berdasarkan aliran instruksi dan datanya, pemrosesan parallel dapat dibagi dalam beberapa jenis :

a)      SISD (Single Instruction on Single Data Stream).

b)      SIMD (Single Instruction on Multiple Data Stream).

c)      MISD (Multiple Instruction on Single Data Stream).

d)      MIMD (Multiple Instruction on Multiple Data Stream).

 

3)      Berdasarkan kedekatan antar prosesor, pemrosesan parallel dapat dibagi dalam beberapa jenis :

a)      Multikomputer (Loosely Coupled / local memory) dengan memori yang terdistribusi.

b)      Multiprosesor (Tightly Coupled / global memory) dengan memori yang dapat di gunakan bersama (shared memory).

 

 

b.      Kinerja Komputasi dengan Parallel Processing

 

Pemrosesan Paralel adalah komputasi dua atau lebih tugas pada waktu bersamaan dengan tujuan untuk mempersingkat waktu penyelesaian tugas - tugas tersebut dengan cara meng optimalkan resource pada sistem komputer yang ada untuk mencapai tujuan yang sama. Pemrosesan paralel dapat mempersingkat waktu ekseskusi suatu program dengan cara membagi suatu program menjadi bagian-bagian yang lebih kecil yang dapat dikerjakan pada masing - masing prosesor secara bersamaan.

 

Tujuan utama dari pemrosesan 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 pemrosesan paralel diukur dari berapa banyak peningkatan kecepatan (speed up) yang diperoleh dalam menggunakan teknik 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

 

Model Pemrosesan Paralel dibuat berdasarkan alur instruksi dan alur data yang digunakan :

 

1)      SISD Single Instruction Single Datapath, ini prosesor tunggal, yang bukan paralel.

2)      SIMD Single Instruction Multiple Datapath, alur instruksi yang sama dijalankan terhadap banyak alur data yang berbeda.

3)      MIMD Multiple Instruction Multiple Datapath, alur instruksinya banyak, alur datanya juga banyak, tapi masing - masing bisa berinteraksi.

4)      MISD Multiple Instruction Single Datapath, alur instruksinya banyak tapi beroperasi pada data yang sama.

 

 

c.       Proses Kerja

 

Pemrosesan paralel membagi beban kerja dan mendistribusikannya pada komputer - komputer lain yang terdapat dalam sistem untuk menyelesaikan suatu masalah. Sistem yang akan dibangun akan tidak akan menggunakan komputer yang didesikasikan secara khusus untuk keperluan pemrosesan paralel melainkan menggunakan komputer yang telah ada. Artinya, sistem ini nantinya akan terdiri dari sejumlah komputer dengan spesifikasi berbeda yang akan bekerjasama untuk menyelesaikan suatu masalah. Adapun tipe-tipe Paralelisme adalah sebagai berikut :

 

1.      Result Paralelisme

 

Result Paralelisme yang sering disebut sebagai Embarrassingly Parallel atau Perfect Paralel adalah tipe paralelisme dimana komputasinya dapat dibagi menjadi beberapa tugas independen yang mempunyai struktur sama. Data struktur suatu tugas dibagi menjadi beberapa bagian yang berstruktur sama. Contoh tugas yang bisa diselesaikan dengan Result Parallelism adalah Simulasi Montecarlo.

 

2.      Specialist Paralelisme

 

Cara kerja Specialist Parallelisme adalah dengan mengerjakan beberapa tugas secara bersamaan pada prosesor yang berbeda. Setiap komputer mengerjakan tugas tertentu. Contohnya penggunaanya adalah pada simulasi pabrik kimia, satu prosesor mensimulasikan proses sebelum reaksi kimia, satu prosesor mensimulasikan reaksi pada tahap awal, dan prosesor lainnya mensimulasikan proses penyulingan hasil, dan seterusnya.


3.      Agenda Paralelisme

 

Tipe paralelisme ini mempunyai daftar yang harus dikerjakan oleh sistem komputer . Semua komputer yang terdapat pada sistem dapat mengakses daftar tersebut. Pada Model MW (Manager Worker) terdapat pengelompokan komputer menjadi dua yaitu :

 

a)      Manager : bertugas memulai perhitungan, memonitor kemajuan tugas, melayani permintaan worker. User berkomunikasi dengan sistem komputer melalui komputer yang berfungsi sebagai manager ini.

b)      Worker : mengerjakan tugas - tugas yang diberikan oleh manager. Kerja komputer ini dimulai setelah ada perintah dari manager dan diakhiri oleh manager.

c)      Pesan Terdistribusi dan Lingkungan Pemrograman (Distributed Messaging and Programming Enviroment) hubungannya dengan pemrosesan paralel ialah pesan sebagai sesuatu (objek) pada pemrosesan itu sendiri sehingga kita harus mendeskripsikan pesan (message) itu.

 

 

d.      Messages

 

Adalah urutan bytes yang dikirimkan antar proses. Pengirim dan penerima harus mempunyai kesepakatan mengenai struktur pesan sehingga isi pesan dapat diterjemahkan dengan benar. Pada prinsipnya cara pengiriman pesan adalah sederhana. Proses A mengirim data buffer sebagai sebuah pesan ke proses B. Pada saat bersamaan proses B menunggu datangnya pesan dari proses A. Ketika pesan tersebut maka proses B akan mengcopy pesan tersebut di memori lokalnya. Adapun Metode Pengiriman pesan (message passing) terdapat beberapa metode dalam pengiriman pesan yaitu :

 

1)      Synchronous Message Passing

 

Cara pengiriman menggunakan metode ini ialah pengirim menunggu untuk mengirim pesan sampai penerima siap untuk menerima pesan. Oleh karena itu tidak ada buffering. Selain itu Pengirim tidak bisa mengirim pesan untuk dirinya sendiri.

 

2)      Ansynchronous Message Passing

 

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 itu pengirim dapat pesan untuk dirinya sendiri. Selain berdasarkan metode pengiriman pesan diatas, pengiriman pesan (message passing) 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.

 

PVM dan MPI Mesin virtual parallel atau Parallel Virtual Machine (PVM) dan Antarmuka Pengiriman Pesan (MPI) adalah kumpulan library yang memungkinkan kita untuk menulis program pengiriman pesan paralel menggunakan bahasa pemrograman C dan FORTRAN agar bisa berjalan pada sistem paralel.


Kemampuan sistem paralel tergantung dari kemampuan pemrogram untuk membuat aplikasi terdistribusi ketika dijalankan pada sistem paralel. Jika node slave mempunyai prosessor lebih dari satu maka pemrogram harus memperhitungkan kemungkinan paralelisme 2 level: Paralelisme di dalam slave node (intra-node parallelism) dan paralelisme antar slave node (inter-node parallelism). Inter-node parallelism menggunakan shared memory dalam node sehingga tidak melakukan pertukaran data secara explicit. Sedangkan Inter-node parallelism melakukan pertukaran data lewat media yang menghubungkan antara node slave yang ada.

 

Terdapat tiga metode untuk mengimplementasikan Inter-node parallelism yaitu :

 

1)      Dengan cara membuat protokol komunikasi ad hoc level rendah. Contohnya dengan menggunakan socket interface.

2)      Dengan menggunakan distributed communication library. Contohnya dengan meng gunakan Message Passing Interface (MPI) library

3)      Dengan memanfaatkan layer software dengan maksud untuk menyembunyikan interconnect dari programmer.

 

Setelah kita mengenal, komponen - komponen dan tujuan dari pemrosesan paralel tersebut, kita beralih ke sistem pemrosesan paralel dimana, sistem pemrosesan paralel adalah sekumpulan komputer terhubung dan bekerjasama sebagai satu resource komputer yang terintegrasi untuk menyelesaikan suatu tujuan. Sebuah sistem paralel setidaknya terdiri dari Message Passing Interface (MPI) dan sebuah pengatur beban kerja (job scheduler) . Message Passing Interface bertugas untuk mengirim data antar komputer di dalam sistem paralel (biasanya disebut sebagai node atau host). Job scheduler seperti yang tersirat dari namanya bertugas menerima tugas dari user dan menjadwalkan tugas tersebut pada beberapa node didalam sistem parallel sesuai kebutuhan.

 

 

e.       MPI (Message Passing Interface)

 

Adalah sebuah mekanisme mengiriman instruksi dan data antara dua proses komputasi yang berbeda yang berada pada komputer berbeda pada sistem sistem paralel. Paket - paket yang mempunyai spesifikasi kebutuhan MPI telah banyak beredar di Internet dan telah dilengkapi dengan LAM / MPI dan MPICH. Paket - paket ini telah dilengkapi dengan fungsi - fungsi yang menggunakan library C dan Fortran. Kemampuan MPI di gunakan untuk menginterpretasikan bahasa pemrograman matrik kemampuan dynamic linking dari bahasa tersebut. Fungsi library dari paket MPI dapat digabungkan dengan dynamic extension dengan cara menghubungkan bahasa pemrograman tersebut dengan bahasa C, C++, atau FORTRAN. Hal ini telah dilakukan untuk menciptakan toolbox MPI (MPITB) untuk kebutuhan MATLAB, dan bahasa pemrograman GNU Octave oleh Fernandez Baldomero. Pada makalah ini digunakan MPITB dengan pertimbangan fungsi onalitas dan kelengkapannya disamping fakta bahwa MPITB dan GNU Octave adalah bebas digunakan bahkan untuk keperluan komersial. Hal ini juga berarti bahwa source codenya banyak beredar dan dapat dimodifikasi sesuai kebutuhan.


B.   Distributed Processing

 


Distributed data processing (DDP) system merupakan bentuk yang sering digunakan sekarang sebagai perkembangan dari time sharing system. Bila beberapa sistem komputer yang bebas tersebar yang masing - masing dapat memproses data sendiri dan dihubungkan dengan jaringan telekomunikasi, maka istilah time sharing sudah tidak tepat lagi. DDP system dapat didefinisikan sebagai suatu sistem komputer interaktif yang terpencar secara geografis dan dihubungkan dengan jalur telekomunikasi dan seitap komputer mampu memproses data secara mandiri dan mempunyai kemampuan berhubungan dengan komputer lain dalam suatu sistem.

 

Distributed Processing merupakan sistem komputer yang menggunakan lebih dari satu komputer (atau prosesor) untuk menjalankan aplikasi. Distributed Processing ini termasuk pemrosesan paralel dimana satu komputer menggunakan lebih dari satu CPU untuk menjalankan program.Perkembangan distributed processing terjadi karena kebutuhan untuk dapat memecahkan masalah yang besar dan kompleks. Selain itu dengan adanya distributed processing telah menambahkan kecepatan perangkat komputer dalam melakukan tugas fungsional.

 

Suatu contoh permasalahan seperti transaksi dalam mesin ATM pada sebuah bank. Ketika ribuan atau bahkan ratusan nasabah menggunakan mesin ATM secara bersamaan, maka bayangkan berapa banyak proses yang harus dikerjakan jika hanya menggunakan 1 komputer servers saja. Untuk itu, penggunaan distributed processing ini membuat beban pemrosesan yang banyak akan dikerjakan oleh beberapa komputer yang sudah terhubung oleh jaringan dalam waktu yang bersamaan. Beban yang besar akan dipecah menjadi beberapa beban kecil yang akan diselesaikan oleh komputer lainnya sehingga proses lebih cepat terselesaikan.

 

Contoh Sistem Pengolahan Data terdistribusi :

 

1)      Internet

a.       Jaringan komputer dan aplikasi yang heterogen.

b.      Mengimplementasikan protokol internet.

 

2)      Intranet

a.       Jaringan yang teradminitrasi secara lokal.

b.      Terhubung ke internet melalui firewall.

c.       Menyediakan layanan internet dan eksternal.


3)         Mobile Computing ( Sistem Komunikasi telepon seluler)

a.       Menggunakan frekuensi radio sebagai media transmisi

b.      Perangkat dapat bergerak kemanapun asal masih terjangkau dengan frekuensinya

c.       Dapat menghandle / dihububngkan dengan perangkat lain

 

4)      Sistem Telepon

a.       ISDN atau yang biasa disebut jaringan telpon tetap (dengan kabel).

b.      PSTN jaringan telepon / telekomunikasi yang semuanya digital.

 

5)      Network File System (NTFS)

a.       WWW

 

 

 

 

C.  Architectural Parallel Computer

 

Arsitektur Komputer Paralel adalah sekumpulan elemen pemroses (Processing Elements) yang bekerjasama dalam menyelesaikan sebuah masalah besar. Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer secara bersamaan. Biasanya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar ataupun karena tuntutan proses komputasi yang banyak.

 

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. Untuk melakukan berbagai jenis komputasi paralel diperlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel untuk menyelesaikan satu masalah. Untuk digunakan perangkat lunak pendukung yang biasa disebut middleware yang berperan mengatur distribusi antar titik dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi.


Berdasarkan jumlah dan prinsip kerja prosesor pada komputer parallel, A.J. Van der Steen dan J.Donggara menyebutkan terdapat empat arsitektur utama komputer parallel menurut Flynn (1972) yaitu :

 

1)      SISD (Single Instruction, Single Data)


 

Arsitektur ini adalah arsitektur yang mewakili komputer serial, di mana hanya ada satu prosesor dan satu aliran masukan data (memori) sehingga hanya ada satu task yang dapat dieksekusi pada suatu waktu. Arsitektur von Neumann termasuk dalam jenis ini. SISD 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)


 

Pada arsitektur ini, eksekusi sebuah instruksi akan dilakukan secara bersamaan oleh beberapa prosesor, di mana suatu prosesor dapat menggunakan data yang berbeda dengan prosesor lain. Karakteristik lain dari arsitektur ini adalah alur eksekusi instruksi yang deterministik (state dari instruksi dan data pada suatu waktu dapat dengan mudah diketahui). Arsitektur ini cocok untuk program yang dapat dibagi menjadi task - task yang mempunyai derajat keteraturan yang tinggi, misalnya sistem pengolah grafik. SIMD 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)


 

Pada arsitektur ini, berbagai instruksi akan dieksekusi secara bersamaan oleh beberapa prosesor dengan menggunakan data yang sama. Arsitektur ini kurang populer karena hanya sedikit permasalahan yang membutuhkan solusi dengan menggunakan karakteristik arsitektur ini. Contoh permasalahan yang mungkin membutuhkan arsitektur ini antara lain adalah multiple frequency filter dan program pemecah sandi yang menggunakan beberapa algoritma kriptografi sekaligus. MISD 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)


 

Pada arsitektur ini, berbagai instruksi dapat dieksekusi oleh beberapa prosesor di mana masing - masing prosesor dapat menggunakan data yang berbeda. Eksekusi instruksi pada arsitektur ini dapat dilakukan secara sinkron (pada suatu rentang waktu, jumlah instruksi yang dieksekusi oleh semua prosesor adalah sama) maupun asinkron, deterministik maupun non-deterministik. Selain itu, arsitektur ini dapat melakukan pekerjaan sesuai dengan karakteristik dari ketiga asitektur sebelumnya. MIMD 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.

 

Sistem komputer paralel dibedakan dari cara kerja memorinya menjadi shared memory dan distributed memory. Shared memory berarti memori tunggal diakses oleh satu atau lebih prosesor untuk menjalankan instruksi sedangkan distributed memory berarti setiap prosesor memiliki memori sendiri untuk menjalankan instruksi. Komponen - komponen utama dari arsitektur komputer paralel cluster PC antara lain :

 

1)      Prosesor (CPU)

Bagian paling penting dalam sistem, untuk multicore terdapat lebih dari satu core yang mengakses sebuah memori (shared memory).

2)      Memori

Bagian ini dapat diperinci lagi menjadi beberapa bagian penyusunnya seperti RAM, cache memory dan memori eksternal.

3)      Sistem Operasi

Software dasar untuk menjalankan sistem komputer.

4)      Cluster Middleware

Antarmuka antara hardware dan software.

5)      Programming Environment dan Software Tools

Software yang digunakan untuk pemrograman paralel termasuk software pendukungnya.

6)      User Interface

Software yang menjadi perantara hardware dengan user.

7)      Aplikasi

Software berisi program permasalahan yang akan diselesaikan.

8)      Jaringan

Penghubung satu PC (prosesor) dengan PC yang lain sehingga memungkinkan pemanfaatan sumberdaya secara simultan.

 

 

 

 

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 :

 

1)      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 banyak thread yang akan dijalankan, thread tersebut akan di tempatkan pada processor dan dijalankan secara bergantian.

 

2)      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 parallel computation, sebuah array dari thread menjalankan kode yang sama secara paralel hanya dengan 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 Message Passing dan OpenMP

 

a.      Message Passing

 

Message passing itu adalah teknik untuk mengatur suatu alu komunikasi messaging terhadap proses pada sebuah sistem. Suatu proses mengirimkan message yang mewakili suatu request, Message di sampaikan ke penerima yang kemudian memproses request tersebut dan mengirim pesan balasan. Kemudian, balasan tersebut memicu request lainnya, yang berlanjut pada balasan berikutnya dan seterusnya. Operasi dasar yang dibutuhkan untuk mendukung paradigma message passing adalah send dan receive. Jadi Message Passing ini bentuk komunikasi yang digunakan oleh komputasi parallel yang udah kita bahas sebelumnya. Objek dalam message passing di distribusikan menggunakan metode sistem remote doa seperti : ONC RPC , CORBA , Java RMI , DCOM , SOAP , . NET Remoting , CTO , QNX Neutrino

RTOS , OpenBinder , D-Bus , Unison RTOS.

 

b.      OpenMP(Open Multi Processing)

 

OpenMP adalah sebuah antarmuka pemrograman aplikasi (API) yang mendukung multi processingshared memory pemrograman di C, C++ dan Fortran pada berbagai arsitektur, termasuk Unix dan Microsoft Windows platform. OpenMP Terdiri dari satu set perintah kompiler, perpustakaan rutinitas, danvariabel lingkungan yang mempengaruhi run-time. Banyak Aplikasi dibangun dengan model hibrida pemrograman paralel dapat dijalankan pada komputer cluster dengan menggunakan OpenMP dan Message Passing Interface (MPI), atau lebih transparan dengan menggunakan ekstensi OpenMP non-shared memory systems. 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 , IBM , Intel , Cray , HP , Fujitsu , Nvidia , NEC , Microsoft , Texas Instruments , Oracle Corporation , dan banyak lagi.

 

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 untuk 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 itu pengirim dapat pesan untuk dirinya sendiri.


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.

 

 

 

 

F.   Konsep Dasar Pemrograman CUDA GPU

 


CUDA (Compute Unified Device Architecture) adalah suatu skema yang dibuat oleh NVIDIA agar NVIDIA selaku GPU (Graphic Processing Unit) mampu melakukan komputasi tidak hanya untuk pengolahan grafis namun juga untuk tujuan umum. Jadi, dengan CUDA, kita dapat memanfaatkan cukup banyak processor yang dimiliki oleh NVIDIA untuk berbagai perhitungan. GPU yang ada saat ini seperti ATI pun sudah memiliki banyak processor di dalamnya. Pada ATI, skema yang mereka bangun disebut ATI Stream. Saat ini pemrograman paralel menjadi sangat penting karena kebutuhan kemampuan komputasi komputer yang terus meningkat seperti kemampuan multitasking dan pengolahan grafis yang andal. Metode saat ini dalam peningkatan peforma komputer juga berbeda dengan masa lampau dimana peningkatan clock dari processor yang diutamakan.

 

Peningkatan clock juga dibatasi oleh kemampuan fisik dari perangkat digital yaitu persoalan daya dan panas. Pada 2005 berbagai industri komputer mulai menawakan komputer dengan beberapa core mulai dari 2, 3, 4, 6, dst. Pada awal perkembangan GPU dengan banyak core, pemanfaatan GPU hanya dapat dilakukan dengan antarmuka seperti OpenGL dan DirectX dimana antarmuka tersebut dikhususkan hanya untuk pengolahan grafis.

 

Seri - seri terbaru dari NVIDIA saat ini telah mendukung CUDA tepatnya keluaran setelah tahun 2006. Untuk daftar dari seri yang mendukung CUDA dapat dilihat pada http://nvidia.com/cuda. Sebagai tahap awal dalam belajar pemrograman paralel dengan memanfaatkan CUDA sebaiknya menggunakan bahasa pemrograman C atau C++. CUDA C telah menjadi bahasa pemrograman khusus pertama yang dikembangkan oleh suatu perusahaan GPU untuk memfasilitasi general - purpose computing pada GPU. Beberapa hal


yang perlu dipersiapkan dalam penggunaan CUDA C untuk membuat suatu aplikasi adalah sebagai berikut :

 

a.       CUDA-enabled graphics processor

b.      NVIDIA device driver

c.       CUDA development toolkit

d.      Standard C compiler

 

Kebutuhan seperti toolkit dan driver dapat diunduh di http://developer.nvidia.com/cuda-downloads CUDA C menyediakan kebutuhan tersebut untuk Windows, Linux, dan Mac. Jika telah memasang CUD toolkit pada komputer Anda maka akan ada aplikasi compiler yang dapat Anda gunakan yaitu nvcc. Selain itu, jika Anda menggunakan Windows sebaiknya Anda juga memasang Visual Studio untuk kemudahan pembuatan aplikasi dan ada program bernama cl.exe dari Visual Studio yang diperlukan dalam kompilasi. Hal khusus dalam kode program yang menggunakan CUDA C adalah adanya kernel call. Sebagai contoh adalah cuplikan kode berikut :

 

#include

    global     void kernel( void ) {

}

int main( void ) { kernel<<<1>>>();

printf( “Hello, World!\n” ); return 0;

}

 

Penambahan variabel   global    pada fungsi kernel()berfungsi untuk menunjukkan pada compiler bahwa program tersebut dikompilasi untuk berjalan pada device dan bukan pada host. Selanjutnya kita akan melihat contoh program lagi dimana terdapat bagian pengiriman nilai.

 

#include

#include “book.h”

    global     void add( int a, int b, int *c ) {

*c = a + b;

}

int main( void ) { int c;

int *dev_c;

HANDLE_ERROR( cudaMalloc( (void**)&dev_c, sizeof(int) ) ); add<<<1>>>( 2, 7, dev_c );

HANDLE_ERROR( cudaMemcpy( &c, dev_c, sizeof(int), cudaMemcpyDeviceToHost    )

);

printf( “2 + 7 = %d\n”, c ); cudaFree( dev_c );

return 0;

}


Variabel dev_c adalah variabel yang akan digunakan untuk menampung nilai yang akan dilewatkan dari host ke   device dan setelah itu nilai tersebut akan diambil dari device dan dikirim ke host. Metode pengalokasian memori memanfaatkan fungsi cudaMalloc() yang fungsinya mirip malloc() pada C. Untuk mengambil nilai dari device memanfaakan fungsi cudaMemcpy(). Sekarang bagaimanakah paralel pada GPU ? Lihat program penjumlahan vektor berikut ini  :

 

#include “../common/book.h” #define N 10

    global     void add( int *a, int *b, int *c ) { int tid = blockIdx.x;

// handle the data at this index if (tid < N) {

c[tid] = a[tid] + b[tid];

}

}

int main( void ) { int a[N], b[N], c[N];

int *dev_a, *dev_b, *dev_c;

// allocate the memory on the GPU

HANDLE_ERROR( cudaMalloc( (void**)&dev_a, N * sizeof(int) ) ); HANDLE_ERROR( cudaMalloc( (void**)&dev_b, N * sizeof(int) ) ); HANDLE_ERROR( cudaMalloc( (void**)&dev_c, N * sizeof(int) ) );

// fill the arrays ‘a’ and ‘b’ on the CPU

for (int i = 0; i < N; i++) { a[i] = -i; b[i] = i * i; }

// copy the arrays ‘a’ and ‘b’ to the GPU

HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice ) ); HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof(int), cudaMemcpyHostToDevice ) ); add<<< N,1 >>>( dev_a, dev_b, dev_c );

// copy the array ‘c’ back from the GPU to the CPU

HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof(int), cudaMemcpyDeviceToHost ) );

// display the results

for (int i = 0; i < N; i++) { printf( “%d + %d = %d\n”, a[i], b[i], c[i] ); }

// free the memory allocated on the GPU

cudaFree( dev_a ); cudaFree( dev_b ); cudaFree( dev_c ); return 0;

 

Program yang dapat dijadikan paralel adalah program yang digunakan untuk menghasilkan satu nilai dimana nilai keluarannya tersebut tidak dipengaruhi oleh nilai lain dari komputasi dengan fungsi yang sama. Contohnya adalah dalam program penjumlahan vektor ini. Dalam penjumlahan vektor nilai c(0)adalah penjumlahan antara a(0) dan b(0) dan tidak dipengaruhi oleh nilai c(1), c(2), dan seterusnya. Pada program ini juga terdapat bagian yang bertuliskan add<<<N,1>>>. Bagian ini menunjukkan bahwa program memanfaatkan N buah thread. Nilai N buah ini diperoleh dari :

 

N buah block x 1 threadper block


Untuk menentukan jumlah thread yang akan digunakan dapat diatur dengan mengubah kedua nilai tersebut. Fungsi add<<<1,N>>> akan menghasilkan penggunaan jumlah thread yang sama dengan fungsi ini add<<<N,1>>>. Jumlah block dan thread per block tentu saja terbatas dan untuk setiap device akan berbeda jumlahnya. Anda dapat melihatnya menggunakan fungsi properti dari CUDA. Program di atas juga hanya meng gunakan 1 thread pada setiap block. Oleh karena itu identifikasi posisi cukup dengan mengambil posisi block yang menjalankan komputasi dengan memanggil variabel blockIdx.x.

 

Hal lain yang akan menjadi penting dalam pemanfaatan CUDA ada kemampuan untuk merepresentasikan array 2D atau 3D dalam array 1D. Kemampuan ini akan mem permudah kita dalam pembuatan program untuk pengalokasian memori serta pengaturan jumlah thread. Untuk belajar lebih jauh lagi tentang pemrograman paralel dengan CUDA dapat mempelajari berbagai bahan untuk belajar yang disediakan oleh NVIDIA seperti pada http://developer.nvidia.com//suggested-reading dan http://developer.nvidia.com/cuda-training

.

 

 

 

 

Sumber :

 

1)      https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi- modern-sem-8/

2)      http://ikhsanturion.blogspot.co.id/2016/06/teori-komputasi-paralel-computing.html

3)      https://www.techopedia.com/definition/3351/distributed-processing

4)      https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi- modern-sem-8/

5)      https://djuneardy.blogspot.co.id/2015/05/konsep-arsitektur-paralel-pemrosesan.html

6)      http://organkomputer.blogspot.co.id/2013/04/prosesor-paralel.html

7)      https://en.wikipedia.org/wiki/Thread_(computing)

8)      https://en.wikipedia.org/wiki/Parallel_computing

9)      https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi- modern-sem-8/

10)  http://seto.citravision.com/berita-50-parallel-computation–pengantar-message-passing- openmp.html

11)  http://ginaalfiana.blogspot.co.id/2015/11/pengantar-message-passing-openmp.html

12)  https://developer.nvidia.com/cuda-zone

13)  https://devblogs.nvidia.com/even-easier-introduction-cuda/

14)  https://en.wikipedia.org/wiki/CUDA


Tidak ada komentar:

Posting Komentar