0

我想在我的 CPU(localhost主机)上运行一些线程,在连接的便携式设备(如 USB)上运行其他一些线程。

我知道 OpenCL 支持并行化,但是如何使用 OpenCL 将作品分发到便携式设备上?

除了 OpenCL 之外的任何其他想法也会有所帮助。

4

1 回答 1

0

任何可能运行 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;
    }
}
于 2017-11-14T17:49:03.413 回答