2011-03-07 246 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