私はVisual Studio C#でOpenCL(OpenCL.NETライブラリ)を使用する初心者で、現在は大きな3Dマトリックスを計算するアプリケーションで作業しています。行列の各ピクセルでは、192の一意の値が計算され、合計されてそのピクセルの最終値が得られます。だから、機能的には、(X 161 X 161 161)、4-Dマトリックスのようなものです今私はこのような私のホスト・コードからカーネルを呼んでいる192大規模な行列計算のためにOpenCLのローカルワーカーを使用する
を×:
//C# host code
...
float[] BigMatrix = new float[161*161*161]; //1-D result array
CLCalc.Program.Variable dev_BigMatrix = new CLCalc.Program.Variable(BigMatrix);
CLCalc.Program.Variable dev_OtherArray = new CLCalc.Program.Variable(otherArray);
//...load some other variables here too.
CLCalc.Program.Variable[] args = new CLCalc.Program.Variable[7] {//stuff...}
//Here, I execute the kernel, with a 2-dimensional worker pool:
BigMatrixCalc.Execute(args, new int[2]{N*N*N,192});
dev_BigMatrix.ReadFromDeviceTo(BigMatrix);
サンプルカーネルコードは以下に掲載されています。
__kernel void MyKernel(
__global float * BigMatrix
__global float * otherArray
//various other variables...
)
{
int N = 161; //Size of matrix edges
int pixel_id = get_global_id(0); //The location of the pixel in the 1D array
int array_id = get_global_id(1); //The location within the otherArray
//Finding the x,y,z values of the pixel_id.
float3 p;
p.x = pixel_id % N;
p.y = ((pixel_id % (N*N))-p.x)/N;
p.z = (pixel_id - p.x - p.y*N)/(N*N);
float result;
//...
//Some long calculation for 'result' involving otherArray and p...
//...
BigMatrix[pixel_id] += result;
}
私のコードは、現在、しかし、私は、このアプリケーションのためにスピードを探しています、と私は私の労働者/グループのセットアップが寸法のための最善のアプローチ(すなわち161 * 161 * 161と192があるかどうかわからないんだけど作品
ワーカープールの)。
グローバルワーカープールをローカルワーカーグループに編成して効率を上げるという他の例を見てきましたが、OpenCL.NETでその方法を実装する方法があまりよく分かりません。また、ワーカー・プールに別の次元を作成するだけとはどう違うかもわかりません。
私の質問は次のとおりです:ここでローカルグループを使用することはできますか?もしそうなら、私はそれらをどのように整理するのですか?一般的に、n次元のワーカープールを呼び出すだけではなく、どのようにローカルグループを使用するのですか? (つまり、Execute(args、new int [] {(N * N * N)、192})のローカルワークグループのサイズは192ですか?
ありがとうございました!
BigMatrix内の他の値に対して計算されたBigMatrixの値がありますか?計算にはどのように 'p'が使われますか?あなたがやろうとしている計算について、これ以上の情報を与えることはできますか? – mfa
BigMatrixの値は計算には使用されず、インデックスのみが使用されます。 BigMatrixの値は、最初は0であり、計算結果に設定されます。この計算では、BigMatrix(p.x、p.y、p.z)内の現在のピクセルのインデックスを使用して、otherArrayの値で指定された別のポイントまでのベクトルを検索します。したがって、各ピクセルはotherArrayの192ポイントのそれぞれに固有のベクトルを持つため、各計算は一意です。このベクトルの大きさと距離は、BigMatrixの最終値の最終計算に使用されます。 – superwillis