【问题标题】:Multiply two pre-defined values in the kernel将内核中的两个预定义值相乘
【发布时间】:2014-03-11 23:00:40
【问题描述】:

下面是我的内核,但是当我想用 #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 进行编码。

【问题讨论】:

    标签: c parallel-processing opencl


    【解决方案1】:

    如果在所有#define 语句之后删除;,内核将编译。

    【讨论】:

    • 我无法相信我在编码时的想法:D 谢谢我已经通过用常量关键字替换它们来解决。 @Erik Duymelinck
    • 很好,杜梅林克先生。我不敢相信我也没有看到。
    【解决方案2】:

    您将双精度分配给浮点数,这可能会在编译器中引发错误。

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

    【讨论】:

      猜你喜欢
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2013-09-15
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多