首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jCuda指针函数中的索引

jCuda指针函数中的索引
EN

Stack Overflow用户
提问于 2013-12-16 13:12:38
回答 1查看 187关注 0票数 0

使用jCuda中的函数pointer.to(int ),假设一个一维的“结果”数组,一个索引是如何进行的。我希望将一个数据块写入"Result“的前n个位置,然后将下一个数据块写入Result0 + chunk,依此类推。

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

EN

回答 1

Stack Overflow用户

发布于 2014-01-11 00:57:07

假设您从jcuda.org引用JCuda:

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

代码语言:javascript
复制
Pointer p = Pointer.to(intArray);
Pointer next = p.withByteOffset(chunkSize * Sizeof.INT);

此方法仅在数组中的特定位置创建“视图”。它不会复制任何数据。结果指针将只指向数组的第‘chunkSize’元素,因此,它是C结构的"Java版本“

代码语言:javascript
复制
int *p = ...
int *next = p + chunkSize;

你提到的那个。

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

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

代码语言:javascript
复制
private static Pointer at(Pointer p, int offsetInInts)
{
    int offsetInBytes = offsetInInts * Sizeof.INT;
    return p.withByteOffset(offsetInBytes);
}

您可以在方法调用中使用:

代码语言:javascript
复制
// C version:
cudaMemcpy(p + chunkSize * i, ...);

// Java version:
cudaMemcpy(at(p, chunkSize * i), ...);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20603893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档