jCuda指针函数中的索引



如何使用jCuda中的函数pointer.to(int[])在1D"Result"数组中进行索引。我想把一块数据写到"Result"的前n个位置,然后把下一块数据写到Result[0+chunk],依此类推

与C不同,我不能说Result+chunk并继续生活。那么我该如何索引到一个中间位置呢?

假设您引用的是JCuda.org/中的JCuda

使用Pointer#to(int[])创建指向int数组的指针时,可以使用Pointer#withByteOffset(long)方法创建具有特定字节偏移量的指针。所以在这个例子中:

Pointer p = Pointer.to(intArray);
Pointer next = p.withByteOffset(chunkSize * Sizeof.INT);

此方法仅在数组中的特定位置上创建一个"视图"。它不复制任何数据。结果指针只指向数组的第'chunkSiz'个元素。因此,它是C结构的"Java版本"

int *p = ...
int *next = p + chunkSize;

你提到的。

重要提示:请确保将预期偏移量乘以数组中元素的大小!它必须是BYTE偏移量,因此"chunkSize"必须与Sizeof.INT相乘才能真正指向int[]数组中的正确位置。(在C中,这种乘法是基于指针类型隐式完成的。但由于Java中的指针没有关联类型,因此您必须始终指定BYTE偏移量)

提示:当你经常需要这种特定类型的偏移指针时,可以使用像这样的辅助方法来提高可读性

private static Pointer at(Pointer p, int offsetInInts)
{
    int offsetInBytes = offsetInInts * Sizeof.INT;
    return p.withByteOffset(offsetInBytes);
}

可以在方法调用中使用:

// C version:
cudaMemcpy(p + chunkSize * i, ...);
// Java version:
cudaMemcpy(at(p, chunkSize * i), ...);

相关内容

  • 没有找到相关文章

最新更新