OpenCL:运行多个设备的CPU / GPU

| 我想在具有OpenCL多个设备的GPU和CPU上运行并行任务。 AMD SDK的标准示例在此主题上不是很清楚。您可以提供与此主题有关的其他教程或示例吗?任何建议都可以。 谢谢。     
已邀请:
有关使用多个设备的教程和详细信息,您可能需要参考AMD-APP-SDK编程指南的第4.12节     
在多个设备上运行并行任务需要动态调度以获得良好的效率,因为您永远不知道任何设备的确切性能-它取决于当前负载(不仅取决于您的程序,而且取决于所有其他负载),当前时钟(在大多数CPU和GPU(取决于当前的节能配置文件或负载)。此外,实际性能可能取决于您的输入数据。 当然,您可以像所有其他答案所建议的那样自己编写所有必要的代码,但我认为这是浪费时间,并且使用现有解决方案是更好的主意。我建议使用StarPU。我在OpenCL项目中使用过StarPU,效果很好。 StarPU提供了一些示例,这些示例说明如何编写能够有效使用多个GPU和CPU的代码。 StarPU:   传统处理器已达到异构多核设计和硬件专业化(例如协处理器,加速器等)要解决的架构限制。但是,利用这样的机器会在各个级别上引入许多具有挑战性的问题,从编程模型和编译器到可扩展硬件解决方案的设计。为这些体系结构设计高效的运行时系统是一个关键问题。 StarPU通常使高性能库或编译器环境更容易利用可能装有GPGPU或Cell处理器的异构多核计算机:程序员可能不愿处理低级问题,而可以专注于算法问题。 还有另一个项目SkePU,但我自己没有尝试过: SkePU:   SkePU是用于多核CPU和多GPU系统的骨架编程框架。它是一个C ++模板库,具有六个数据并行和一个任务并行的框架,两种容器类型,并支持在具有CUDA和OpenCL的多GPU系统上执行。最近,通过为StarPU运行时系统实现后端,在SkePU中开发了对混合执行,性能感知的动态调度和负载平衡的支持。 如果您使用Google“动态调度gpu cpu opencl”,则可以找到甚至更多有用的免费或商业项目和文档。     
没有什么可以阻止您这样做。您需要提供所有要用于呼叫
clCreateContext()
的设备,然后为每个设备创建至少一个命令队列。根据您要执行的操作,您可能需要查看更高级的任务调度技术,例如使用乱序命令队列和事件来计划跨设备的任务。     
使用clGetPlatforms,您将发现您是否拥有多个平台。如果您运行nVidia GPU板和AMD CPU,则会在平台上找到。一个平台用于AMD SDK,另一个平台用于nVidia CUDA OpenCL实施。使用clGetDevices,您将为每个平台找到可用的设备。每个平台可能只有一个,例如1xGPU和1xCPU。 为每个设备使用clCreateContext创建一个上下文,然后可以并行运行它们。     
Aftab Munshi及其他人撰写的《 OpenCL编程指南》将为您提供更多详细信息。     

要回复问题请先登录注册