我目前正在爲OpenCL內核編寫一些unittests,並需要創建一個上下文。 因爲我不是在性能之後,對我來說哪個設備運行內核並不重要。 所以我想創建儘可能少的限制,可能和這個代碼的思想背景:在任何平臺/設備上創建上下文
#define __CL_ENABLE_EXCEPTIONS
#include <CL/cl.hpp>
#include <iostream>
int main() {
try {
cl::Context context(CL_DEVICE_TYPE_ALL);
}catch(const cl::Error &err) {
std::cerr << "Caught cl::Error (" << err.what() << "): " << err.err() << "\n";
}
}
它返回
陷入CL ::錯誤(clCreateContextFromType):-32
-32是CL_INVALID_PLATFORM和clCreateContextFromType的文檔說:
CL_INVALID_PLATFORM如果屬性爲NULL並且不能選擇平臺或者如果屬性中指定的平臺值不是有效的平臺。
由於我沒有提供任何屬性,他們當然是NULL。 爲什麼不能選擇任何平臺?
我也試過CL_DEVICE_TYPE_DEFAULT
,結果相同。
這裏檢測到的我的平臺和設備的列表:
NVIDIA CUDA
(GPU) GeForce GTX 560
作爲一個邊節點:指定平臺,在性能可以作爲intented。
如果有的話,你可以使用Boost.Compute這將使本作簡單爲'boost :: compute :: system :: default_context()'。 –
@KyleLutz:我不知道Boost.Compute,但它似乎還不是官方的Boost庫。因此,它是禁止的。另外:它是否直接映射到OpenCL?我有一些預先存在的內核需要測試,重寫是不可行的。 – Nobody
雖然尚未(官方增強庫),但它只是頭文件,並且易於放入(除了boost頭文件和OpenCL之外,沒有其他依賴文件)。它確實有一個核心API,它是OpenCL C API的一個非常簡單的C++包裝器,並允許您使用現有的OpenCL內核。 –