我想使用我的GTX970显卡在Windows 10下运行OpenCL应用程序。但是下面的代码不起作用=(
#define __CL_ENABLE_EXCEPTIONS
#include <CL/cl.hpp>
#include <CL/cl.h>
#include <vector>
#include <fstream>
#include <iostream>
#include <iomanip>
int main() {
std::vector<cl::Platform> platforms;
std::vector<cl::Device> devices;
try
{
cl::Platform::get(&platforms);
std::cout << platforms.size() << std::endl;
for (cl_uint i = 0; i < platforms.size(); ++i)
{
platforms[i].getDevices(CL_DEVICE_TYPE_GPU, &devices);
}
std::cout << devices.size() << std::endl;
}
catch (cl::Error e) {
std::cout << std::endl << e.what() << " : " << e.err() << std::endl;
}
return 0;
}
它给出了错误代码-1。我正在使用Visual Studio 2015 Community Edition通过已安装的NVIDIA CUDA SDK v8.0和已配置的路径启动它,因此编译器和链接器了解SDK。
有人可以解释这个片段有什么问题吗?
提前致谢!
编辑:有人也可以解释一下,为什么当我尝试调试这个代码时它会获得平台ID,但是,当我不调试这个代码时它打印出我有2个平台(我的GPU卡和集成GPU)答案 0 :(得分:0)
可能你的iGPU是英特尔(我假设你做了一个gtx970 +用于游戏的intel cpu的组合),它还有一些实验性opencl 2.1平台支持,可能会给设备上的opencl 1.2应用程序带来错误采摘或平台采摘(我有类似的问题)。
您应该检查opencl api命令中返回的错误代码。那些提供了更好的信息。
例如,我的系统有两个用于Intel的平台,一个是针对cpu的实验2.1,另一个是针对gpu和cpu的正常1.2。
要检查,查询平台版本并检查其参数返回的第7和第9个字符值,针对1和2表示1.2或2和0表示2.0。这应该消除实验2.1,它在第7个字符处给出2和&#34; 1&#34;在第9个字符处(索引从0开始)
https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetPlatformInfo.html
CL_PLATFORM_VERSION
检查小键盘数字键码和左侧数字键码。
Nvidia必须已经有1.2支持。
如果我是对的,你可以查询cpu设备并获得2个来自英特尔和1个来自Nvidia(如果有的话)作为回报。