java - jCuda 指针函数中的索引

标签 java pointers jcuda

如何使用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/

相关文章:

java - 从文件中的每一行获取特定数字

java - 将 inspinispan 与 jboss 或 spring 集成

c++ - 为什么在声明 using namespace std 时将 int 作为指针参数传递给函数?

c++ - STL 列表 - 作为指针对象的数据类型

java - 使用 Java 中的 cuda 设备内核?

java - 多个 JPanel 在 JLayeredPane 中绘制图像

java - GSON 转换为 LinkedHashMap 而不是我的对象

c++ - const 传播到 std::array of pointers

java - 线程 "main"java.lang.NoClassDefFoundError : jcuda/driver/JCudaDriver 中出现异常

java - ARM架构上如何解决 'Maven cannot resolve dependencies'?