【发布时间】:2012-11-21 18:08:45
【问题描述】:
我正在为 OpenCL specification 苦苦挣扎,因为我发现它有时模棱两可,有人可以尝试回答以下问题吗?
考虑以下代码:
__kernel void myKernel(...)
{
// Buffer 1
__local float *buffer1[64];
// Buffer 2
__local float *buffer2;
// Buffer 3
__private float *buffer3[64];
// Buffer 4
float *buffer4[64];
int var1 = 1, var2 = 2;
nonKernelFunction(&var1, &var2);
// ...
}
void nonKernelFunction(int *pvar1, int *pvar2)
{
int *pvar;
if (someRunTimeCondition)
pvar = pvar1;
else
pvar = pvar2;
*pvar += 1;
}
1) buffer1 和 buffer2 之间是否有区别(静态或动态)?
2) buffer3 和 buffer4 的声明是否等效(它们是用于变量,但我不确定是否用于指针)?
3) 在 GPU 上(我认为私有内存只是寄存器),编译器将在哪里分配资源?如果它在全局内存中,是否可以从主机知道运行时将使用多少内存?
4) 假设 buffer3 和 buffer4 存储在寄存器中,如何允许像 buffer3[i] = buffer4[i] (其中 i 在运行时已知)这样的指令?
5) 如果buffer3 和buffer4 没有存入寄存器,那么如何允许nonKernelFunction 代码(var1 和var2 肯定不在内存中)?
谢谢
【问题讨论】:
标签: opencl