【发布时间】:2013-06-12 13:00:35
【问题描述】:
我编写了一个 OpenCL 内核,它使用 opencl-opengl 互操作性来读取顶点和索引,但这可能并不重要,因为我只是在做简单的指针相加,以便通过索引获取特定的顶点。
uint pos = (index + base)*stride;
这里我正在计算以字节为单位的绝对位置,在我的示例中,pos 是 28,643,328,步幅为 28,index = 0 和 base = 1,022,976。嗯,这似乎是正确的。
不幸的是,我不能直接使用vload3,因为偏移量参数不是以字节为单位的绝对地址计算的。所以我只是将pos添加到指针void* vertices_gl
void* new_addr = vertices_gl+pos;
new_addr 在我的示例中 = 0x2f90000,这就是奇怪的部分开始的地方,
vertices_gl = 0x303f000
结果 (new_addr) 应该是 0x4B90000 (0x303f000 + 28,643,328)
我不明白为什么地址 vertices_gl 减少了 716,800 (0xAF000)
我的目标是 GPU:AMD Radeon HD5830
Ps:对于那些想知道的人,我正在使用 printf 来获取这些值 :)(无法让 CodeXL 工作)
【问题讨论】:
-
第一眼感觉应该是
base + index * stride。但除此之外,假设vertices_gl是一个指针,并且指针运算在 OpenCL 中的工作方式与在 C 中的工作方式相同,我认为这里没有任何问题。
标签: pointers opencl gpu gpgpu amd-processor