【问题标题】:Can't initialize use of double (fp64) in OpenCL programs无法在 OpenCL 程序中初始化 double (fp64) 的使用
【发布时间】:2011-03-07 11:56:58
【问题描述】:

当我在我的 OpenCL 程序中使用以下行时

#pragma OPENCL 扩展 cl_khr_fp64 :启用

我收到以下 OpenCL 错误:

cl::Error: -46,(std::exception.what() 返回“clCreateKernel”)

有人知道为什么吗? 我做错了什么?

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

[信息] 名称:GeForce GTX 470 [INFO] 供应商:NVIDIA Corporation [信息] 个人资料:FULL_PROFILE [信息] 版本:OpenCL 1.0 CUDA [信息] 司机:260.19.06

干杯,

【问题讨论】:

  • 什么是构建日志?你应该得到它并打印它。

标签: floating-point double opencl


【解决方案1】:

我猜您正在使用的 GeForce GTX 470 的 OpenCL 1.0 驱动程序不支持 fp64。

试用可用的新 OpenCL 1.1 驱动程序here.

【讨论】:

  • 您确定是关于驱动程序的吗?无论如何,鉴于我使用 Ubuntu 开发/运行 OpenCL,我最好等待 11.04 推出下一个驱动程序......切换到双精度并不紧迫。再次感谢!
  • OpenCL 1.0 驱动程序支持双精度就好了。检查内核构建日志。
  • 啊,抱歉给了错误的建议……我很抱歉。你能取消检查我的答案吗,@Emanuele?
  • 我也有类似的问题,#pragma OPENCL EXTENSION cl_khr_fp64 : enable clCreateKernel 返回 CL_INVALID_KERNEL_NAME 错误。你解决了吗?
【解决方案2】:

您是否正在使用 C 字符串化宏?

如果是这样,您需要将代码更改为如下所示:

#pragma OPENCL EXTENSION cl_khr_fp64 : enable \n

这是因为字符串化过程会占用所有空格并将其转换为一个空格。但是,C 预处理器需要“换行符”来分隔下一行。

【讨论】:

  • 我没有使用它,因为我正在将整个文本文件读入 std::string ...无论如何都会试一试!
  • 我也遇到了同样的问题,但是我添加了空格和换行符并没有解决它。它构建但 clCreateKernel 返回 CL_INVALID_KERNEL_NAME
猜你喜欢
  • 2023-03-18
  • 2022-01-21
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2017-03-28
  • 2016-02-19
  • 1970-01-01
相关资源
最近更新 更多