开始使用 opencl
本节概述了 opencl 是什么,以及开发人员可能想要使用它的原因。
它还应该提到 opencl 中的任何大型主题,并链接到相关主题。由于 opencl 的文档是新的,你可能需要创建这些相关主题的初始版本。
Opencl 是一个 api,可以将 gpus,cpus 和其他一些加速器(如 pcie-fpga)充分利用类似 C99 的计算,但具有非常广泛的并发优势。一旦安装和基本实现完成,只有内核字符串(或其文件)中的简单更改会自动将算法应用于 N 个硬件线程。
开发人员可能希望使用它,因为优化内存空间或速度比在 opengl 或 direct-x 上执行相同操作要容易得多。它也是免版税的。设备内的并发是隐式的,因此不需要为每个设备进行显式多线程。但对于多设备配置,仍然需要 cpu 多线程。例如,当 1000 个线程作业发送到 cpu 时,线程同步由驱动程序处理。你只需告诉它工作组应该有多大(例如 256 个与虚拟本地内存连接)和同步点(仅在需要时)。
使用 gpu 进行通用操作几乎总是比 cpu 快。你可以更快地对事物进行排序,将矩阵乘以 10 倍的速度,并在 no
时间内连接内存中的 sql 表。任何 200 美元的桌面级 gpu 将在物理(有限元方法流体)工作负载上比任何 200 $ cpu 更快完成。Opencl 使其更容易和便携。当你使用 C#完成工作时,你可以使用相同的内核和 C++项目(使用 JNI 和额外的 C++编译)轻松转移到 java-opencl 实现。
对于图形部分,你并不总是需要在 cpu 和 gpu 之间发送缓冲区。你可以在上下文创建部分使用 interop
选项纯粹在 gpu 上工作。使用 interop,你可以在 gpu 的极限性能下准备几何。任何顶点数据都不需要 pci-e。只发送一个命令,只在图形卡内部完成工作。这意味着没有数据的 cpu 开销。Opencl 准备几何数据,opengl 渲染它。CPU 被释放。例如,如果 cpu 的单个线程可以在 10000 个周期内构建 32x32 的顶点球体,那么具有 opencl 的 gpu 可以在 1000 个周期内构建 20 个球体。