Apakah ada masalah / algoritma yang terkenal dalam komputasi ilmiah yang tidak dapat dipercepat oleh paralisis

27

Adakah masalah / algoritme terkenal dalam komputasi ilmiah yang tidak dapat dipercepat dengan paralisis? Sepertinya saya ketika membaca buku tentang CUDA bahwa kebanyakan hal bisa.

RNs_Ghost
sumber
Pencarian biner tidak dapat dipercepat (secara signifikan, yaitu oleh faktor), bahkan ketika mempertimbangkan hirarki memori.
3
@Anycorn Tidak, Gram-Schmidt klasik yang tampak kiri dan Gram-Schmidt yang dimodifikasi yang tampak kanan bekerja dengan baik secara paralel. Ada banyak algoritma QR paralel lainnya termasuk TSQR yang baru-baru ini dipopulerkan.
Jed Brown
@ Raphael: Saya pikir ist adalah mungkin untuk mempercepat pencarian biner dengan faktor log (n), n = # prosesor. Alih-alih membagi interval pencarian menjadi bagian-bagian dan memeriksa di mana harus melanjutkan, bagilah interval dalam bagian-bagian. Mungkin ada cara yang lebih efisien, saya tidak tahu.
miracle173

Jawaban:

32

CTCTCTTNClogT

Contohnya

  • C=T
  • m×mT=N=O(m2)C=m=T
  • T=NC=logT
  • τ(0,1)dk=τ/ΔtτN1/dC=kT=kN=τN(d+1)/dP=T/C=NN1/d

Kompleksitas formal

NC=P

Jed Brown
sumber
13

NCO(logcn)O(nk)P=NCPPPPNCPNCP=NC

PP

Memilih
sumber
9

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.

meawoppl
sumber
3
"Contoh bebas bercabang" yang Anda berikan adalah awalan-jumlah, yang sebenarnya memiliki algoritma paralel yang baik: http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html Menghitung jumlah nol harus efisien karena alasan yang sama. Tidak ada jalan lain di sekitar intensitas aritmatika, ...
Max Hutchinson
Keren. Saya berdiri dikoreksi untuk yang itu.
meawoppl
8

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.)

Thomas Klimpel
sumber
Contoh yang bagus, tapi saya tidak percaya batas bawah Anda diklaim. Secara khusus, metode multigrid dapat digunakan untuk menyelesaikan persamaan eikonal. Seperti multigrid untuk Helmholtz frekuensi tinggi, tantangannya terutama dalam mendesain ruang kasar yang cocok. Dalam kasus labirin, strategi agregasi grafik harus efektif, dengan representasi kasar ditentukan dengan memecahkan masalah lokal (dengan demikian independen) untuk segmen labirin.
Jed Brown
Secara umum ketika metode multigrid bekerja dengan baik, itu berarti bahwa granularitas masalah lebih rendah daripada descritization, dan "jumlah jawaban yang benar" tidak proporsional datang dari langkah penyelesaian kursus. Hanya pengamatan, tetapi batas bawah pada hal semacam itu rumit!
meawoppl
@JedBrown Dari sudut pandang praktis, multigrid untuk Helmholtz frekuensi tinggi cukup menantang, bertentangan dengan apa yang tampaknya tersirat dari komentar Anda. Dan menggunakan multigrid untuk persamaan eikonal adalah "tidak umum", untuk sedikitnya. Tetapi saya melihat keberatan "teoritis" Anda terhadap batas bawah yang disarankan: Pengimbangan waktu dari berbagai titik di dalam labirin dapat dihitung sebelum waktu untuk mencapai titik-titik ini diketahui, dan ditambahkan secara paralel setelah informasi yang hilang tersedia. Namun dalam praktiknya, pemecah eikonal paralel tujuan umum senang jika mereka benar-benar mendekati batas.
Thomas Klimpel
Saya tidak bermaksud mengatakan bahwa itu mudah, ruang kasar gelombang-gelombang memang sangat teknis. Tapi, saya pikir kami sepakat bahwa sudah ada peluang untuk paralelisme di wilayah terbuka, sementara di "labirin" yang sempit (yang mengekspos paralelisme yang sangat sedikit dengan metode standar), masalah peningkatan skala lebih mudah ditangani.
Jed Brown
@JedBrown Slide 39 dari www2.ts.ctw.utwente.nl/venner/PRESENTATIONS/MSc_Verburg.pdf (dari 2010) mengatakan hal-hal seperti "Perpanjang pemecah dari 2D ke 3D" dan "Metode adaptasi untuk masalah dengan variasi gelombang yang sangat bervariasi". Jadi multigrid gelombang-gelombang mungkin menjanjikan, tetapi "belum matang" tampaknya lebih tepat daripada "sangat teknis" untuk menggambarkan masalah saat ini. Dan itu bukan benar-benar pemecah Helmholtz frekuensi tinggi (karena itu adalah pemecah "gelombang penuh"). Ada yang lain "cukup matang" pemecah Helmholtz multigrid (pemecah "gelombang penuh"), tetapi bahkan ini masih "penelitian aktif".
Thomas Klimpel
1

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.

Jakub Klinkovský
sumber