我想在我的 CPU(localhost
主机)上运行一些线程,在连接的便携式设备(如 USB)上运行其他一些线程。
我知道 OpenCL 支持并行化,但是如何使用 OpenCL 将作品分发到便携式设备上?
除了 OpenCL 之外的任何其他想法也会有所帮助。
我想在我的 CPU(localhost
主机)上运行一些线程,在连接的便携式设备(如 USB)上运行其他一些线程。
我知道 OpenCL 支持并行化,但是如何使用 OpenCL 将作品分发到便携式设备上?
除了 OpenCL 之外的任何其他想法也会有所帮助。
任何可能运行 OpenCL 任务的设备都必须具有与之关联的可安装客户端驱动程序,该驱动程序可以由相关计算机上的 OpenCL 驱动程序获取。图形卡(特别是如果它们不超过五年)几乎可以保证具有有效的 ICD,只要它们的驱动程序是最新的,并且许多消费级 CPU 具有由其驱动程序提供的 ICD。
但是,其他设备(如网络设备或 USB 设备)具有有效 ICD 的保证要少得多,除非它们是专门为在异构计算系统中使用而设计的。如果他们确实有一个有效的 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;
}
}