我想在我的CPU(localhost
主机)上运行一些线程,在连接的便携式设备上运行其他一些线程(如USB)。
我知道OpenCL支持并行化,但如何使用OpenCL将工作分发到便携式设备上?
除了OpenCL之外,做其他任何想法也会有所帮助。
答案 0 :(得分:0)
任何可能运行OpenCL任务的设备都必须具有与之关联的可安装客户端驱动程序,该驱动程序可由相关计算机上的OpenCL驱动程序获取。图形卡(特别是如果它们不超过五年)几乎可以保证具有有效的ICD,只要它们的驱动程序是最新的,并且许多消费级CPU具有由其驱动程序提供的ICD。 / p>
但是,除非网络设备或USB设备专门设计用于异构计算系统,否则其他设备(如网络设备或USB设备)的保证要少得多。 如果他们确实有一个有效的ICD ,那么只需要在运行时查询他们的平台并选择在构建OpenCL上下文时使用它,然后使用它就像你正常使用OpenCL一样:
//C++ OpenCL API
cl::Platform target_platform;
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
for(cl::Platform & platform : platforms) {
std::string name = platform.getInfo<CL_PLATFORM_NAME>();
if(name == /*Whatever the Name of the platform is*/) {
target_platform = platform;
break;
}
}
std::vector<cl::Device> devices;
target_platform.getDevices(CL_DEVICE_TYPE_ALL, &devices);
cl::Device target_device;
for(cl::Device & device : devices) {
if(device.getInfo</*...*/>() == /*...*/) {//Whatever properties you need
target_device = device;
break;
}
}