0

現在PyLabで行っている多くの計算を高速化する必要があります。CUDAを使うことを考えました。計算の全体的な単位(A)は、数(数千)の完全に独立した小さな計算(B)を実行することで構成されます。それらのそれぞれは、初期段階で、40-41の独立した、さらに小さな計算を行うことを含みます(C)。したがって、並列プログラミングは本当に役立つはずです。PyLabを使用すると、全体として(A)20分、(B)10分の1秒かかります。

この領域の初心者として、私の質問は、(C)または(B)のどちらで、どのレベルで計算を並列化する必要があるかということです。

(C)ステージは、すべての(C)プロセス間で共有される大量のデータ(数千のフロート)を取得し、さまざまなタスクを実行することで構成されていることを明確にする必要があります。その中で最も時間がかかるのは線形回帰です。並列化も可能です!各手順(C)の出力は、単一のフロートです。各計算(B)は、基本的に、手順(C)を何度も実行し、出力されるデータに対して線形回帰を実行することで構成されます。この場合も、その出力は単一のフロートです。

私はCUDAプログラミングに精通していないので、基本的に、最初に最も賢明な戦略は何かを尋ねています。

4

1 に答える 1

0

プロジェクトをCUDAに変換する方法(および変換するかどうか)を決定する際の重要な考慮事項は、コードに必要なメモリアクセスパターンのタイプです。GPUは、ワープと呼ばれる32のグループでスレッドを実行します。最高のパフォーマンスを得るには、ワープ内のスレッドは、CUDAプログラミングガイド(CUDAに含まれています)で説明されているいくつかの基本パターンでメモリにアクセスする必要があります。一般に、アクセスパターンがランダムであるほど、カーネルがメモリバウンドになる可能性が高くなります。その場合、GPUの計算能力を十分に活用することはできません。

GPUの計算能力を十分に活用できない他の主なケースは、GPUがワープのすべてのスレッドを実行する必要があるため、ワープのスレッドが異なるコードパスを実行する条件付きロジックとループがある場合です。各コードパス。

これらの点がコードに問題を引き起こす可能性がある場合は、GPUでより適切に実行するためにコードを実装するための既知の代替方法があるかどうかを確認するために、いくつかの調査を行う必要があります(これはよくあるケースです)。

上記の考慮事項に照らして、どのレベルで計算を並列化するかについての質問を見ると、どちらを選択するかが明確になる場合があります。

于 2012-09-03T05:17:43.150 に答える