2012-01-05 98 views
0

我正在使用openCL的Nvidia實現。openCL平臺/設備查詢

cl_uint devicecount=NULL; 
cl_uint NumPlatforms; 
clGetPlatformIDs (0, NULL, &NumPlatforms); 

cl_platform_id* PlatformIDs; 
PlatformIDs = new cl_platform_id[NumPlatforms]; 
clGetPlatformIDs(NumPlatforms, PlatformIDs, NULL); 

cl_device_id cdDevice; 
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_CPU, 1, &cdDevice, &devicecount); 

cout << NumPlatforms << endl; 
cout << PlatformIDs << endl; 
cout << cdDevice << endl; 
cout << devicecount << endl; 

我其實可能暫時沒有兼容的GPU,但我有一個兼容的CPU。該查詢告訴我,我有0個平臺和0個設備。我是否正確地做這件事?我不完全明白什麼是平臺,爲什麼我沒有平臺。 openCL找到並使用平臺到底需要什麼?

編輯:

我在郵件今天拿到我的新卡,裝AMD的SDK,並重新安裝NVIDIA SDK,而我現在看到我所有的平臺和設備!

下一步是創建上下文。我可以將來自不同平臺的設備放在同一個環境中嗎?考慮到每個設備需要單獨的命令隊列等,要編寫一個程序來使用系統上的所有設備,即使該數量是十萬個,也是非常困難的嗎?

回答

2

平臺基本上是一個已安裝的OpenCL實現。從物理上來說,它是一個ICD記錄(/etc/OpenCL/vendors/中的* nix文件,Windows中的註冊表記錄),它可以幫助OpenCL.dll/libOpenCL.so找到實際的供應商特定實現。

就您的情況而言,由於您的GPU不支持OpenCL,因此驅動程序未將nVidia的庫添加到平臺列表中。 [offtop]我不知道它是否需要升級你的硬件CUDA/OpenCL的兼容後重新安裝驅動程序...

爲了利用你的CPU爲OpenCL設備,您必須安裝AMD APP SDKIntel OpenCL SDK,因爲nVidia的實施不支持CPU以任何方式

0

我安裝了英特爾和AMD的SDK,並獲得有趣的結果,當我得到了Intel平臺VS AMD平臺上CPU的設備信息。

我的英特爾I5設備,在intel平臺上有128個採樣器和128個執行能力,而在amd平臺上它有16個採樣器和執行能力。在amd平臺上,CPU的最大時鐘頻率爲3310,而在intel的3300平臺上。

我不知道這種差異是否僅僅是名義上的,或者如果在選擇intel設備之間性能存在差異英特爾平臺的?