0

在我的内核中,我比较了两个大的 int[,] lemmaA 和 lemmaB。它们由 gpu.Allocate() 分配给 GPU。我的内核看起来像:

private static void Kernel(int[,] lemmaA, int[,] lemmaB, int[] result, int L, int x)
{
    var start = blockIdx.x * blockDim.x + threadIdx.x;
    var stride = gridDim.x * blockDim.x;
    for (var i = start; i < L; i += stride)
    {
       result[i] = Calculate(lemmaA, lemmaB, x, i);
    }
}

public static int Calculate(int[,] lemma1, int[,] lemma2, int x, int i)
{
    int result = 0;
    for(int z = 0; z < 40; z++)
    {
      int c1 = lemma1[x, z];
      int c2 = lemma2[i, z];
      r += DoSomething(c1,c2);
    }
    return result;
}

在计算方法中,我只在每个 int[,] 数组中使用一个 int[] 行/数组,我想知道如果我将每个 row/int[] 分配给一个本地数组并使用本地数组。

但是如何从内核中的 int[,] 复制 row/int[] 呢?

private static void Kernel(int[,] lemmaA, int[,] lemmaB, int[] result, int L, int x)
{
    var start = blockIdx.x * blockDim.x + threadIdx.x;
    var stride = gridDim.x * blockDim.x;
    for (var i = start; i < L; i += stride)
    {
       int[] lemma1 = __local__.Array<int>(40);
       COPY(lemma1, lemmaA, a,b,c,d); // <- What to do here ??
       result[i] = Calculate(lemma1, lemma2);
    }
}
public static int Calculate(int[] lemma1, int[] lemma2)
{}
4

0 回答 0