在内核中乘以两个预定义的值

时间:2014-03-11 23:00:40

标签: c parallel-processing opencl

下面是我的内核,但是当我想要使用#define关键字定义的两个值进行乘法或执行其他操作并将其分配给内核的参数时,我会收到错误状态为-48的错误。(无效的内核。 )是不是可以将这些相乘或者我做错了什么?

#define cl_sizeX 1024;
#define pi 3.1415926535897;
#define N 1024;
#define M 1024;
#define lambda 632e-9;//632e-9;
#define X 12.1e-6;

__kernel void helloworld(__global char* in, __global char* out)
{
    int num = get_global_id(0);
    out[num] = in[num] + 1;
}

__kernel void multiply_arrays(__global int* first, __global int* second, __global int* out_array)
{
    int num = get_global_id(0);
    out_array[num] = first[num] * second[num];
}
__kernel void create_library(__global float* z0){

    //Variable definitions

    int a = get_global_id(0);
    int i1 = get_global_id(1);
    int i2 = get_global_id(2);

    //z0[a] = ((N*pow(X, 2)) / lambda) + (a - 1)*((N*pow(X, 2)) / (100 * lambda));
    z0[a] = N*X; // This is where i get error 

当我指定z0 [a] = N时;我没有收到任何错误,也无法解决问题。 我使用Windows 8.1和Visual Studio 13进行编码。

2 个答案:

答案 0 :(得分:2)

如果在内核编译完所有;语句后删除#define

答案 1 :(得分:1)

您正在为float分配一个double,这可能会在编译器中引发错误。

将clGetProgramBuildInfo与CL_PROGRAM_BUILD_LOG一起使用,以获取编译器的实际clBuildProgram输出,这将使您更好地了解问题。