我寫了一個內核,它應該做的什麼都沒有,除了從添加一個到FLOAT3的每個組件:OpenCL - 寫入緩衝區爲零?
__kernel void GetCellIndex(__global Particle* particles) {
int globalID = get_global_id(0);
particles[globalID].position.x += 1;
particles[globalID].position.y += 1;
particles[globalID].position.z += 1;
};
與下面的結構(內核)
typedef struct _Particle
{
cl_float3 position;
}Particle;
我的問題是,當我將我的粒子數組寫入GPU時,每個分量都是零。這裏是neccassary代碼:
(Particle*) particles = new Particle[200];
for (int i = 0; i < 200; i++)
{
particles[i].position.x = 5f;
}
cl_Particles = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(Particle)*200, NULL, &err);
if (err != 0)
{
std::cout << "CreateBuffer does not work!" << std::endl;
system("Pause");
}
clEnqueueWriteBuffer(queue, cl_Particles, CL_TRUE, 0, sizeof(Particle) * 200, &particles, 0, NULL, NULL);
//init of kernel etc.
err = clSetKernelArg(kernel, 0, sizeof(Particle) * 200, &cl_Particles);
if (err != 0) {
std::cout << "Error: setKernelArg 0 does not work!" << std::endl;
system("Pause");
}
,這是我在CPU上的結構:
typedef struct _Particle
{
cl_float4 position;
}Particle;
有人可以幫我解決這個問題? (任何線索是值得討論...)
感謝
1)的可能尺寸爲您提供了指針的大小,2)也許cl_float3需要由cl_float4被替換,因爲驅動程序或硬件 –