我们的CPU叫做中央处理器可以用来做各种的计算,但是我们现在的计算机如果要处理图形输出的话,特别是三维的图像输出,一个比较强的GPU是必不可少的。
比如一帧的图像的输出计算,其实针对上面的每一个像素是有大量的类似的计算在并发进行着的。而我们的GPU就是设计来专门做这样的计算的。
一个GPU里面有很多的计算单元,一个这样的计算单元的运算能力肯定比不上CPU中的一个内核,但是GPU中的计算单元的数量比CPU的内核要多得多。
所以有一些操作GPU有其天生的优势。下面是GPU支持的一些操作。
Map,对于一个Data Stream里面的所有的数据执行一个函数做数据转换。
Reduce,对于一个Data Stream里面的所有数据进行一个函数计算得出一个结果。
Stream filtering,数据过滤
Scan 是一个累计操作 输入的数据流如果是 [a0, a1, a2, a3, ...],那么Scan的输出就是[a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...] 这里的加号不是指四则运算中的加法,而是任意的一个操作,只要这个操作满足结合律以及带有幺元。
Scatter 用于把数据从显存中做位置搬动用的。输入一个index函数作为映射函数就可以把内存位置做一个映射。
Gather 是Scatter操作的反向操作。
Sort 排序
Search 对于已经排序数据进行搜索
可见,GPU支持大量的批量数据操作十分适合用来做很多的大数据操作。
OpenGL用来驱动GPU进行图形渲染,我们可以使用OpenCL来调用GPU进行计算运算。