2011-03-07 247 views
2

当我用下面一行在我的OpenCL程序无法初始化在OpenCL程序使用双(FP64)的

 
#pragma OPENCL EXTENSION cl_khr_fp64 : enable 

我碰到下面的OpenCL错误:

 
cl::Error: -46, (std::exception.what() returns "clCreateKernel") 

有谁知道为什么? 我在做什么错?

顺便说一句,我有以下系统:

 
[INFO] Name: GeForce GTX 470 
[INFO] Vendor: NVIDIA Corporation 
[INFO] Profile: FULL_PROFILE 
[INFO] Version: OpenCL 1.0 CUDA 
[INFO] Driver: 260.19.06 

干杯,

+0

什么是生成日志?你应该得到它并打印它。 – 2011-03-07 16:08:29

回答

2

我猜的GeForce GTX 470,你正在使用不支持FP64的针对OpenCL 1.0驱动程序。

尝试here.

+0

你确定这是关于驱动程序吗?无论如何,鉴于我使用Ubuntu开发/运行OpenCL,我最好等待11.04与下一个驱动程序出来......切换到双精度不是紧急的。再次感谢! – Emanuele 2011-03-07 20:26:49

+1

您应该可以查询驱动程序支持哪些扩展...... – Yuji 2011-03-08 03:25:36

+0

OpenCL 1.0驱动程序支持双精度就好了。检查内核构建日志。 – dietr 2011-03-08 20:08:18

2

你用C字串宏观任何机会提供新的OpenCL 1.1的驱动程序?

如果是这样,你需要改变你的代码看起来像这样:

#pragma OPENCL EXTENSION cl_khr_fp64 : enable \n 

这是因为字串化过程需要所有空白,并将其转换成一个空间。但是,C预处理器需要“换行符”来划定下一行。

+0

我没有使用它,因为我正在将整个文本文件读入std :: string ...无论如何都会给出一个镜头! – Emanuele 2011-03-24 21:47:52

+0

我有同样的问题,但我添加了空格和换行符,并没有解决它。它生成但clCreateKernel返回CL_INVALID_KERNEL_NAME – Zhen 2011-11-21 17:56:49