如何在不同设备上生成并行线程?

How do I spawn parallel threads on different devices?

我想 运行 我的 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;
    }
}