2012-03-14 84 views
1

我在使用C++綁定編寫OpenCL,試圖製作一個小型庫。OpenCL enqueTask vs enqueNDRangeKernel

NDRange offset(0); 
NDRange global_size(numWorkItems); 
NDRange local_size(1); 

//this call fails with error code -56 
err = queue.enqueueNDRangeKernel(kernelReduction, offset, global_size, local_size); 
//this call works: 
err = queue.enqueueTask(kernelReduction); 

現在,錯誤代碼-56是CL_INVALID_GLOBAL_OFFSET。我不知道爲什麼第一個電話會失敗。有什麼建議麼?

+0

您使用的是什麼尺寸?根據OpenCL文檔偏移量需要是一個整數偏移量數組,每個偏移量都對應一個特定的維度,但您的代碼並不是說它使用了多少維度。 – Thomas 2012-03-14 21:30:40

+0

就我所瞭解的C++綁定而言,它是由NDRange初始化器給出的。假設有1個整數,它會假定1維,假設2它假定爲2. – 2012-03-14 22:12:08

回答

1

global_work_offset必須爲NULL。這裏的任何值都應該產生CL_INVALID_GLOBAL_OFFSET。

檢查出來:clEnqueueNDRangeKernel

+0

您正在查看OpenCL 1.0文檔,其中全局偏移量確實未實現,必須爲空。對於OpenCL 1.1和1.2(全局偏移量正在工作)這不是事實。 – Thomas 2012-03-15 06:30:19

+1

該問題沒有指定版本,所以這是我最好的猜測。 – mfa 2012-03-15 13:55:23

2

如果您正在使用的OpenCL 1.0,你不能AFAIK使用全局偏移(你需要使用一個常量內存計數器或東西來解決)。嘗試更新綁定到OpenCL 1.1,如果他們不自動適應並確保您更新您的驅動程序以及。