Adakah masalah / algoritme terkenal dalam komputasi ilmiah yang tidak dapat dipercepat dengan paralisis? Sepertinya saya ketika membaca buku tentang CUDA bahwa kebanyakan hal bisa.
Adakah masalah / algoritme terkenal dalam komputasi ilmiah yang tidak dapat dipercepat dengan paralisis? Sepertinya saya ketika membaca buku tentang CUDA bahwa kebanyakan hal bisa.
Jawaban:
Mulailah dengan menggerogoti Hukum Amdahl . Pada dasarnya segala sesuatu dengan sejumlah besar langkah serial akan mendapat manfaat tidak signifikan dari paralelisme. Beberapa contoh termasuk parsing, regex, dan kebanyakan kompresi rasio tinggi.
Selain itu, masalah utama sering menjadi hambatan dalam bandwidth memori. Khususnya dengan sebagian besar GPU, jepit teoretis Anda jauh melebihi jumlah angka floating point yang bisa Anda dapatkan di ALU Anda, karena algoritma seperti itu dengan intensitas aritmatika rendah (jepit / cache-miss) akan menghabiskan sebagian besar waktu menunggu RAM.
Terakhir, setiap kali sepotong kode memerlukan percabangan, tidak mungkin untuk mendapatkan kinerja yang baik, karena ALU biasanya melebihi jumlah logika.
Sebagai kesimpulan, contoh yang sangat sederhana dari sesuatu yang akan sulit untuk mendapatkan kenaikan kecepatan dari GPU hanya menghitung jumlah nol dalam array bilangan bulat, karena Anda mungkin harus sering melakukan percabangan, paling banyak melakukan 1 operasi (ditambah dengan satu) dalam hal Anda menemukan nol, dan membuat setidaknya satu memori mengambil per operasi.
Contoh bebas dari masalah percabangan adalah untuk menghitung vektor yang merupakan jumlah kumulatif dari vektor lain. ([1,2,1] -> [1,3,4])
Saya tidak tahu apakah ini dianggap sebagai "terkenal" tetapi pasti ada sejumlah besar masalah yang tidak akan membantu komputasi paralel Anda.
Metode marching cepat (terkenal) untuk memecahkan persamaan Eikonal tidak dapat dipercepat dengan paralelisasi. Ada metode lain (misalnya metode penyapuan cepat) untuk menyelesaikan persamaan Eikonal yang lebih cocok untuk paralelisasi, tetapi bahkan di sini potensi untuk percepatan (paralel) terbatas.
Masalah dengan persamaan Eikonal adalah bahwa arus informasi tergantung pada solusi itu sendiri. Secara longgar, informasi mengalir sepanjang karakteristik (yaitu sinar cahaya dalam optik), tetapi karakteristik tergantung pada solusi itu sendiri. Dan aliran informasi untuk persamaan Eikon yang didiskritisasi bahkan lebih buruk, membutuhkan perkiraan tambahan (seperti yang secara implisit hadir dalam metode penyapuan cepat) jika ada peningkatan paralel yang diinginkan.
Untuk melihat kesulitan untuk paralelisasi, bayangkan labirin yang bagus seperti dalam beberapa contoh di halaman web Sethian . Jumlah sel pada jalur terpendek melalui labirin (mungkin) adalah batas bawah untuk jumlah minimal langkah / iterasi dari setiap algoritma (paralel) yang memecahkan masalah yang sesuai.
(Saya menulis "(mungkin) adalah", karena batas bawah terkenal sulit untuk dibuktikan, dan seringkali memerlukan beberapa asumsi yang masuk akal pada operasi yang digunakan oleh suatu algoritma.)
Kelas masalah lain yang sulit diparalelkan dalam praktik adalah masalah sensitif terhadap kesalahan pembulatan, di mana stabilitas numerik dicapai dengan serialisasi.
Pertimbangkan misalnya proses Gram-Schmidt dan modifikasi serialnya. Algoritma bekerja dengan vektor, jadi Anda mungkin menggunakan operasi vektor paralel, tetapi itu tidak baik skala. Jika jumlah vektor besar dan ukuran vektor kecil, menggunakan paralel Gram-Schmidt klasik dan reorthogonalization mungkin stabil dan lebih cepat daripada Gram-Schmidt modifikasi tunggal, meskipun melibatkan melakukan pekerjaan beberapa kali lebih banyak.