これは私の最初の投稿です。私はあなたの時間を評価するので、私はそれを短く保つようにしようとします。このコミュニティは私にとって信じられないほどのものでした。この並列処理はOpenCLで実装できます
私はOpenCLを学習しており、以下のアルゴリズムから少しの並列性を抽出したいと考えています。私は私が作業している部分だけを見せてくれます。私はできるだけ単純化しました。
1)入力:長さ(n)の2つの1D配列:A、B、およびnの値。また、値C [0]、D [0]。
2)出力:長さの2つの1Dアレイ(N):C、D.
C[i] = function1(C[i-1])
D[i] = function2(C[i-1],D[i-1])
したがって、これらは、再帰的定義され、所与のI値しかしながら計算のC & Dがで行うことができ(彼らは明らかにもっと複雑であり、意味を成す)。反復ごとに同期して、一つの初期の比較を行い、その後、それぞれのループを入力します。理想的には
__kernel void test (__global float* A, __global float* B, __global float* C,
__global float* D, int n, float C0, float D0) {
int i, j=get_global_id(0);
if (j==0) {
C[0] = C0;
for (i=1;i<=n-1;i++) {
C[i] = function1(C[i-1]);
[WAIT FOR W.I. 1 TO FINISH CALCULATING D[i]];
}
return;
}
else {
D[0] = D0;
for (i=1;i<=n-1;i++) {
D[i] = function2(C[i-1],D[i-1]);
[WAIT FOR W.I. 0 TO FINISH CALCULATING C[i]];
}
return;
}
}
2つの作業項目(番号0,1)のそれぞれを:素朴な考えは以下のカーネル用の2つの作業項目を作成することになります。今度はGPUのSIMD実装を考えると、これはうまくいかない(作業項目はすべてのカーネルコードを待っている)と想定していますが、このタイプの作業を2つのCPUコアに割り当てて期待どおりに動作させることは可能ですか?この場合の障壁は何ですか?
CとDのすべての値を保存する必要がありますか、または最終結果のみを気にしますか? – mfa
'function1'と' function2'を定義してください。 –