Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCL&;Xcode-为自定义数据类型参数生成的内核头不正确_Xcode_Kernel_Opencl_Typedef - Fatal编程技术网

OpenCL&;Xcode-为自定义数据类型参数生成的内核头不正确

OpenCL&;Xcode-为自定义数据类型参数生成的内核头不正确,xcode,kernel,opencl,typedef,Xcode,Kernel,Opencl,Typedef,我正在使用OpenCL并行LBM,遇到了一个关于如何为自定义数据类型生成内核头文件作为内核参数的问题。我根据需要(typedef struct{…}t_speed;)在内核文件(respond.cl)中定义数据类型,并且在头文件中生成数据类型t_speed,这显然是语法错误的,构建随后失败。虽然这与其说是一个大问题,不如说是一个麻烦,但修复它会节省很多时间 内核文件:respond.cl #ifdef cl_khr_fp64 #pragma OPENCL EXTENSION cl_khr_fp6

我正在使用OpenCL并行LBM,遇到了一个关于如何为自定义数据类型生成内核头文件作为内核参数的问题。我根据需要(
typedef struct{…}t_speed;
)在内核文件(
respond.cl
)中定义数据类型,并且在头文件中生成数据类型
t_speed
,这显然是语法错误的,构建随后失败。虽然这与其说是一个大问题,不如说是一个麻烦,但修复它会节省很多时间

内核文件:respond.cl

#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64)
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#else
#error "Double precision floating point not supported by OpenCL implementation."
#endif

#define NSPEEDS 5
typedef struct {
    double speeds[NSPEEDS];
} t_speed;

__kernel void rebound (__global t_speed* cells,
                       __global t_speed* tmp_cells,
                       __global const unsigned char* obstacles,
                       const unsigned short int count)
{
    int i = get_global_id(0);
    if (i < count) {
        if (obstacles[i]) {
            cells[i].speeds[1] = tmp_cells[i].speeds[3]; /* East -> West */
            cells[i].speeds[3] = tmp_cells[i].speeds[1]; /* West -> East*/
            cells[i].speeds[2] = tmp_cells[i].speeds[4]; /* North -> South */
            cells[i].speeds[4] = tmp_cells[i].speeds[2]; /* South -> North */
        }
    }
}
#ifdef cl_khr_fp64
#pragma OPENCL扩展cl_khr_fp64:启用
#定义的elif(cl_和fp64)
#pragma OPENCL扩展cl_amd_fp64:启用
#否则
#错误“OpenCL实现不支持双精度浮点。”
#恩迪夫
#定义nspeed 5
类型定义结构{
双速[非进料];
}t_速度;
__内核无效反弹(u全局t_速度*单元格,
__全球t_速度*tmp_单元,
__全局常量无符号字符*障碍,
常量无符号短整数计数)
{
int i=获取全局id(0);
如果(i西*/
单元[i]。速度[3]=tmp_单元[i]。速度[1];/*西->东*/
单元[i]。速度[2]=tmp_单元[i]。速度[4];/*北->南*/
单元[i]。速度[4]=tmp_单元[i]。速度[2];/*南->北*/
}
}
}
内核头文件:response.cl.h

/***** GCL Generated File *********************/
/* Automatically generated file, do not edit! */
/**********************************************/

#include <OpenCL/opencl.h>
typedef struct  {
  double [5] speeds;
} _t_speed_unalign;

typedef _t_speed_unalign __attribute__ ((aligned(8))) t_speed;

extern void (^rebound_kernel)(const cl_ndrange *ndrange, t_speed* cells, t_speed* tmp_cells, cl_uchar* obstacles, cl_ushort count);
/****GCL生成的文件*********************/
/*自动生成文件,请勿编辑*/
/**********************************************/
#包括
类型定义结构{
双[5]速度;
}速度不一致;
typedef_t_speed_unalign__属性__((对齐(8)))t_speed;
外部无效(^反弹内核)(常数范围*n范围,t速度*单元格,t速度*tmp\U单元格,C范围*障碍物,cl\U计数);

我也有同样的问题。我使用的解决方法是从目标的编译列表中删除cl文件,并在运行时手动加载它。