Misalkan Anda memiliki banyak
pekerjaan yang harus dilakukan, dan ingin menyelesaikannya lebih cepat,
sehingga Anda mempekerjakan 100 pekerja. Jika pekerjaannya adalah 100 pekerjaan
terpisah yang tidak saling bergantung, dan mereka semua mengambil jumlah waktu
yang sama dan dapat dengan mudah dibagikan kepada para pekerja, maka Anda akan
menyelesaikannya 100 kali lebih cepat. Ini sangat mudah sehingga disebut
paralel memalukan. Hanya karena itu memalukan, bukan berarti Anda tidak boleh
melakukannya, dan mungkin itulah yang seharusnya Anda lakukan. Opsi yang
berbeda adalah memparalelkan setiap pekerjaan, seperti yang dibahas di bawah
ini, dan kemudian menjalankan paralelisasi ini satu demi satu. Namun, seperti
yang akan ditunjukkan, ini mungkin cara yang kurang efisien dalam melakukan
pekerjaan. Kadang-kadang ini tidak benar karena pada komputer, melakukan semua
pekerjaan pada satu prosesor mungkin memerlukan menyimpan banyak hasil pada
disk, sedangkan pekerjaan paralel dapat menyebarkan hasil antara dalam RAM dari
prosesor yang berbeda. RAM jauh lebih cepat daripada disk. Namun, jika program
tidak menghabiskan banyak waktu menggunakan disk maka paralel yang memalukan
adalah cara cerdas untuk melakukannya. Anggaplah ini yang harus Anda lakukan
kecuali Anda menganalisis situasi dan menentukan bahwa itu bukan. Paralel yang
memalukan itu sederhana, dan jika Anda bisa membuat pekerja melakukannya secara
gratis maka itu adalah solusi termurah juga.
Bagaimana jika pekerjaan itu
mengambil jumlah waktu yang sangat berbeda, tetapi masih belum berinteraksi?
Jika Anda sudah cukup banyak, mulailah membagikannya sampai setiap pekerja
memilikinya, dan kemudian ketika pekerja sudah selesai mereka kembali dan
meminta yang lain. Ini akan bekerja dengan cukup baik, terutama jika Anda dapat
menempatkan pekerjaan lebih lama lebih dulu dan lebih pendek nanti. Bentuk
paralelisasi ini masih cukup sederhana (kecuali remaja yang melakukan pekerjaan
- lihat "Apakah Remaja Layak Upah Negatif?"). Banyak komputer
departemen yang memiliki lebih dari satu prosesor berjalan dengan cara ini,
melayani pekerjaan saat mereka tiba. Ini juga berapa banyak maskapai yang
menjalankan antrian check-in mereka: dalam teori antrian, ini dikenal sebagai
sistem "satu server multi antrian", yang lebih efisien daripada
sistem "beberapa server antrian ganda" yang umum digunakan di jalur
checkout di toko bahan makanan.
Misalkan saja pekerjaan yang Anda
miliki ini hanya satu pekerjaan, tetapi itu membutuhkan waktu yang sangat lama.
Sekarang Anda harus melakukan sesuatu untuk mengatur kembali pekerjaan, entah
bagaimana memecahnya menjadi bagian-bagian yang dapat dilakukan bersamaan.
Misalnya, jika pekerjaan itu adalah membangun rumah, itu dapat dipecah menjadi
pipa ledeng, listrik, dll. Namun, sementara banyak pekerjaan dapat dilakukan
pada waktu yang sama, beberapa memiliki pesanan khusus, seperti meletakkan
fondasi sebelum dinding bisa naik. Jika semua pekerja ada di sana sepanjang
waktu, maka akan ada periode ketika sebagian besar dari mereka hanya menunggu
untuk menyelesaikan beberapa tugas (seperti yayasan). Tidak terlalu hemat
biaya, dan Anda tidak menyelesaikan pekerjaan 100 kali lebih cepat. Begitulah
kehidupan programmer paralel.
Definisi: Komputasi paralel
adalah penggunaan dua atau lebih prosesor (core, komputer) dalam kombinasi
untuk memecahkan satu masalah.
Programmer harus mencari cara
untuk memecahkan masalah menjadi potongan-potongan, dan harus mencari tahu
bagaimana potongan saling berhubungan. Misalnya, program paralel untuk bermain
catur mungkin melihat semua gerakan pertama yang mungkin dilakukan. Setiap
langkah pertama yang berbeda dapat dieksplorasi oleh prosesor yang berbeda,
untuk melihat bagaimana permainan akan berlanjut dari titik itu. Pada akhirnya,
hasil ini harus digabungkan untuk mencari tahu mana langkah pertama yang
terbaik. Sebenarnya, situasinya bahkan lebih rumit, karena jika program melihat
ke depan beberapa gerakan, maka start yang berbeda dapat berakhir pada posisi
dewan yang sama. Agar efisien, program harus melacak ini, sehingga jika satu
prosesor sudah mengevaluasi posisi itu, maka yang lain tidak akan membuang
waktu menduplikasi upaya. Beginilah cara kerja sistem bermain catur paralel,
termasuk mesin IBM Deep Blue yang terkenal yang mengalahkan Kasparov.
Apakah Komputasi Paralel Lebih Mudah atau Lebih Keras dari pada Serial
Computing?
(Komputasi standar juga dikenal
sebagai "komputasi serial", jadi Anda telah melakukan komputasi
serial selama bertahun-tahun!)
Sederhananya:
Sebagian besar alam semesta
secara paralel paralel, dengan banyak hal terjadi secara bersamaan. Anda bisa
mengenakan celana Anda pada satu kaki pada satu waktu, tetapi jutaan orang
mengenakan celana mereka secara bersamaan. Banyak masalah memiliki banyak
paralelisme alami yang dapat dieksploitasi oleh seorang programmer.
Kadang-kadang orang dipaksa untuk memikirkan kembali masalah ketika mereka
mencoba mengembangkan program paralel, dan mereka mengubah seluruh pendekatan
mereka untuk secara langsung memanfaatkan paralelisme yang melekat
Lebih lanjut:
Performa buruk terang-terangan:
lebih mudah untuk melihat bahwa Anda tidak melakukannya dengan baik. Pada
komputer serial prosesor mungkin menunggu saat memindahkan data dari RAM ke
cache, tetapi pada dasarnya tampak sibuk sepanjang waktu dan hanya setelah Anda
melakukan analisis yang lebih rinci Anda menentukan bahwa itu sebenarnya
berkinerja buruk (lihat "Menggunakan Cache Hemat Uang Tunai "). Pada
komputer paralel 100 prosesor kebanyakan orang dengan cepat memperhatikan bahwa
suatu program tidak berjalan 100 kali lebih cepat. Program serial mungkin tidak
terlalu baik (lihat "Mengapa Ahli Algoritma Layak Menghasilkan Banyak
Uang") tetapi umumnya tidak sejelas fakta bahwa banyak prosesor paralel
sering menganggur.
Sedikit pengalaman: sebagian
besar programmer memiliki sedikit atau tidak sama sekali pengalaman dengan
komputasi paralel, dan ada beberapa program paralel untuk menggunakan di luar
rak atau bahkan contoh yang baik untuk menyalin. Karenanya orang sering harus
menemukan kembali roda paralel (lihat "Paralelisme membutuhkan Kelas untuk
Misa"). Orang-orang yang mengembangkan perangkat lunak sistem paralel sama
di belakang pada kurva belajar mereka. Seringkali mereka menggunakan kembali
bahan yang dikembangkan untuk sistem serial, bahkan ketika itu menyebabkan
masalah kinerja (lihat "Dosa Serial dalam Dunia Paralel").
Portabilitas yang buruk: suatu
program dapat bekerja pada satu mesin, tetapi ketika program tersebut porting
ke mesin baru mungkin sangat berbeda sehingga perubahan drastis perlu dilakukan
hanya untuk memungkinkan program untuk dijalankan. Sebagian besar komputer
serial memiliki organisasi dasar yang sama, tetapi ini tidak berlaku untuk
komputer paralel. Beberapa komputer paralel, seperti sistem cluster populer,
pada dasarnya hanyalah kumpulan komputer yang dihubungkan bersama dengan
Ethernet. Mereka menggunakan perintah sederhana, mirip dengan membaca dan
menulis, untuk berkomunikasi di antara prosesor. (Sistem yang paling umum untuk
melakukan komunikasi ini adalah MPI.) Komputer paralel tersebut dikenal sebagai
sistem penyampaian pesan, atau komputer memori terdistribusi. Cluster biasanya
cukup murah karena dibangun dari bagian-bagian komoditas, dan telah menjadi
sangat umum di bisnis dan universitas. Komputer memori terdistribusi dengan
kinerja yang lebih baik memiliki interkoneksi yang lebih cepat di antara
prosesor, dan perangkat lunak yang lebih baik disetel untuk mendukung
paralelisme, tetapi ini meningkatkan biaya karena banyak bagian yang lebih
non-standar.
Komputer paralel lain, seperti
beberapa sistem besar dari Cray atau papan ganda soket tunggal dari Intel dan
lainnya, adalah sistem memori bersama, di mana setiap prosesor dapat secara
langsung membaca dan menulis data dari setiap lokasi memori. Anggap ini seperti
semua orang menggunakan papan tulis untuk melakukan perhitungan mereka, di mana
setiap orang memiliki kapur dan penghapus dan dapat memutuskan untuk menulis di
mana saja di papan tulis. Untuk sistem ini, ada standar yang dikenal sebagai
OpenMP, yang merupakan kumpulan ekstensi bahasa ke Fortran dan C / C ++.
Komputer memori bersama harus menggunakan banyak bagian non-komoditas untuk
mendukung berbagi, dan karenanya cenderung lebih mahal daripada sistem memori
terdistribusi. Namun, seringkali lebih mudah untuk menulis sebuah program untuk
sistem memori bersama daripada untuk yang memori terdistribusi.
Namun komputer lain
mengeksploitasi unit prosesor grafis, GPU, untuk mencapai paralelisme. Namun,
meskipun GPU memiliki 1000 core, ada batasan serius pada kemampuan
pemrogramannya, dan masalah kinerja yang serius jika ada banyak pergerakan
data. Lebih lanjut, bahasa yang digunakan untuk GPU berkembang pesat, jadi
tidak jelas apakah Anda harus menggunakan ekstensi CUDA, OpenCL, atau
akselerator di OpenMP dan OpenACC, dll.
Hukum Amdahl: jika yayasan
mengambil 5% dari waktu, dan hanya satu pekerja yang bisa melakukannya
sementara yang lain harus menunggu sampai yayasan selesai, maka Anda tidak
pernah dapat menyelesaikan pekerjaan dalam waktu kurang dari 5% dari waktu
semula, tidak peduli berapa banyak pekerja yang Anda miliki. Kebetulan, ini
membantu menjelaskan mengapa jauh lebih mudah untuk menjadi programmer paralel
yang sukses pada sistem kecil. Dalam situasi seperti itu, jika semuanya paralel
dengan sempurna, maka 100 pekerja akan mengambil 5% (serial) + 95% / 100
(paralel sempurna) = 5,95% dari waktu aslinya, dibandingkan dengan 100% / 100 =
1% dari aslinya waktu jika semuanya paralel sempurna. 1 / (100 * 0,0595) ≈
0,17, jadi efisiensinya hanya sekitar 17%, di mana efisiensi adalah (waktu
untuk 1 pekerja) / [(jumlah pekerja) * (waktu yang mereka ambil)]. Anda dapat
menganggap ini sebagai upah jika satu pekerja melakukannya, dibagi dengan total
upah ketika kelompok melakukannya. 20 pekerja akan bekerja pada efisiensi
sekitar 51%, dan 10 pekerja pada sekitar 69%. Semakin sedikit pekerja, semakin
tinggi efisiensinya.
Tautan terlemah: jika sekelompok
pekerja semuanya bergantung satu sama lain, maka grup tersebut tidak bisa lebih
cepat dari pekerja yang paling lambat. Jika satu pekerja sedang berbicara di
ponsel mencoba mengatur kencan, semua orang melambat, terutama jika mereka
mencoba untuk mendengarkan. Tautan lemah lainnya dapat berupa kompiler, sistem
operasi, sistem komunikasi, dll.
Kenapa kamu tidak bisa sembunyi?
Di masa lalu, ketika seseorang
perlu memecahkan masalah yang lebih besar mereka sering bisa menunggu sedikit,
dan komputer yang lebih cepat akan keluar. Ini terutama disebabkan oleh hukum
Moore, yang ditafsirkan orang berarti kecepatan komputer akan berlipat ganda
setiap dua tahun. Namun, ini tidak benar lagi: jika Anda melihat kecepatan GHz
prosesor di komputer desktop 2 tahun yang lalu, dibandingkan dengan kecepatan
sekarang, ia hampir tidak, jika ada, meningkat. Pada dasarnya ini terjadi
karena mereka tidak dapat membuat prosesor berbiaya rendah andal yang berjalan secara
signifikan lebih cepat.
Namun, yang menjadi dua kali
lipat adalah jumlah prosesor pada satu chip. Beberapa smartphone sekarang
memiliki 8 core (prosesor), Anda dapat membeli chip CPU dengan 12 core, dan
jumlah ini akan segera meningkat. Bahkan arloji Apple sekarang memiliki 2 core.
Ini disebut "multi-core" atau "banyak-core" chip. Ada juga
unit pemrosesan grafis (GPU) dengan lebih dari 1000 prosesor yang sangat
khusus. Ini lebih dekat dengan apa yang dibicarakan Moore, karena apa yang
sebenarnya dikatakannya adalah bahwa jumlah transistor akan terus berlipat
ganda. Laju peningkatan melambat, tetapi peningkatan signifikan dalam jumlah
transistor harus berlanjut setidaknya selama satu dekade.
Jika hanya ada beberapa core di
komputer Anda, maka cukup mudah untuk menemukan tugas yang dapat dilakukan
secara bersamaan, seperti menunggu penekanan tombol dan menjalankan browser,
mis., Paralel paralelnya. Namun, karena jumlah prosesor terus meningkat,
masalah paralelisasi yang disebutkan di atas menjadi semakin serius. Sekarang
ada komputer paralel yang memiliki> 1.000.000 core, dan orang-orang
berencana untuk yang memiliki> 100.000.000.
Secara keseluruhan, ini berarti
bahwa ada kebutuhan besar untuk menggunakan paralelisme dalam chip multi-core
untuk hampir semua masalah, dan untuk menggunakan banyak dari ini digabungkan
bersama untuk masalah besar. Keamanan pekerjaan untuk saya! (dan Anda, jika
Anda belajar komputasi paralel).
Tidak ada komentar:
Posting Komentar