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

时间:2017-11-13 06:04:32

标签: opencl removable-drive

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

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

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

1 个答案:

答案 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;
    }
}