並列化によって高速化できない科学的コンピューティングの有名な問題/アルゴリズムはありますか?CUDAに関する本を読んでいる間、ほとんどのことができるように思えます。
並列化によって高速化できない科学的コンピューティングの有名な問題/アルゴリズムはありますか?CUDAに関する本を読んでいる間、ほとんどのことができるように思えます。
回答:
中心的な問題は、総計算量に対するクリティカルパス長さです。がに比例する場合、並列処理はせいぜい一定の高速化を提供します。場合より漸近的に小さい、問題サイズが増加するにつれて、より多くの並列処理のための余地があります。が入力サイズ多項式であるアルゴリズムの場合、最適なケースはです。これは、対数時間未満で計算できる有用な量が非常に少ないためです。T C T C T T N C 〜ログT
NCの複雑性クラスは、(対数多項式時間で、すなわち)並行して効率的に解くことができ、これらの問題を特徴付けます。であるかどうかは不明ですが、偽であると広く仮定されています。これが実際に当てはまる場合、P-completeは、「本質的に順次」であり、並列処理によって大幅に高速化できない問題を特徴付けます。
これに理論的な側面を与えるために、は並列プロセッサを備えたシステムで時間で解ける複雑度クラスとして定義されます。が多項式時間で解ける問題の集合である場合、(ほとんどの人はそうではないと思われますが)かどうかはまだ不明です。並列化する「最も難しい」問題は、次のように知られている内のすべての問題という意味で、-complete問題に減少させることができるを経由して-complete問題削減。単一の完全問題がにあることを示す場合、であることを証明します。O (n k)P = N C P P P P P N C P N C P = N C (ただし、上記のようにおそらく誤りです)。
したがって、 -completeの問題は直感的に並列化するのが困難です(ただし、大幅な高速化は可能です)。私たちも非常に良い一定の係数スピードアップを持っていない-complete問題は、線形計画(参照され、この OR交換にコメントを)。P
アムダールの法則を揺るがすことから始めます。基本的に、多数のシリアルステップを持つものはすべて、並列処理の恩恵を受けます。いくつかの例には、解析、正規表現、およびほとんどの高比率圧縮が含まれます。
それとは別に、重要な問題は多くの場合、メモリ帯域幅のボトルネックです。特に、ほとんどのGPUでは、理論上のフロップはALUに到達できる浮動小数点数を大幅に上回っています。これは、低演算強度(フロップ/キャッシュミス)のアルゴリズムがRAMでの待機時間の大半を費やすためです。
最後に、コードの一部が分岐を必要とするときはいつでも、ALUは通常ロジックよりも優れているため、良好なパフォーマンスが得られることはほとんどありません。
結論として、GPUから速度を得るのが難しいものの本当に簡単な例は、整数の配列内のゼロの数を単純にカウントすることです。 1)ゼロを見つけ、操作ごとに少なくとも1つのメモリフェッチを行う場合。
分岐問題のない例は、別のベクトルの累積和であるベクトルを計算することです。([1,2,1]-> [1,3,4])
これらが「有名」とみなされるかどうかはわかりませんが、確かに並列コンピューティングでは役に立たない多くの問題があります。
アイコナール方程式を解くための(有名な)高速マーチング法は、並列化によって高速化することはできません。アイコナール方程式を解く他の方法(高速スイープ法など)があり、これらは並列化により適していますが、ここでも(並列)高速化の可能性は限られています。
アイコナール方程式の問題は、情報の流れがソリューション自体に依存することです。大まかに言うと、情報は特性(光学系の光線)に沿って流れますが、特性はソリューション自体に依存します。また、離散化されたアイコナール方程式の情報の流れはさらに悪化し、並列高速化が必要な場合は追加の近似(高速掃引法に暗黙的に存在するような)が必要になります。
並列化の難しさを確認するには、SethianのWebページにある例のような素敵な迷宮を想像してください。ラビリンスを通る最短経路上のセルの数(おそらく)は、対応する問題を解決する(並列)アルゴリズムのステップ/反復の最小数の下限です。
(下限は証明が難しいことで悪名高く、アルゴリズムで使用される操作に関する合理的な仮定を必要とすることが多いため、「(おそらく)is」と書いています。)
実際には並列化が困難な別のクラスの問題は、数値化の安定性がシリアル化によって達成される丸め誤差に敏感な問題です。
たとえば、Gram–Schmidtプロセスとその逐次変更を検討してください。アルゴリズムはベクトルで機能するため、並列ベクトル演算を使用することもできますが、スケーリングはうまくいきません。ベクトルの数が多く、ベクトルサイズが小さい場合、並列の古典的なGram-Schmidtと再直交化の使用は、単一の変更されたGram-Schmidtよりも安定して高速になる場合があります。