gpt4 book ai didi

java - jCuda 指针函数中的索引

转载 作者:行者123 更新时间:2023-12-02 06:25:13 25 4
gpt4 key购买 nike

如何使用jCuda 中的函数pointer.to(int[ ]) 来索引一维“结果”数组。我想将一 block 数据写入“Result”的前 n 个位置,并将下一个数据 block 写入 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);

此方法仅在数组中的特定位置创建“ View ”。它不复制任何数据等。结果指针将仅指向数组的第“chunkSize”元素。因此,它是 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), ...);

关于java - jCuda 指针函数中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com