使用GPU进行通用计算和常规的使用CPU进行计算在观念上具有非常大的区别,很多资料都会进行对比(比如经典的《GPU Gem 2》),但是通常用语都比较专业化,初学者可能很难想明白。这里按照我目前的理解,先总结一下:
首先需要明确的是,GPGPU中所有计算的数据,都保存在纹理中。比如一个长度为16的一维数组,在GPGPU中就需要建立一个2*2的纹理,这样这张纹理就有4个像素,而每个像素包含R、G、B、A四个颜色分量,所以总共是16个数据。
具体的数据操作,则需要一个由内存(这里指的是计算机内存)向显存(这里指显卡内存)传输的过程——每一组数据都需要在内存中创建,然后将数据传送到一个纹理中,这些数据在纹理中的表示,则是纹理中每一个像素的颜色值(这个颜色值可以是一个分量,也可以是多个分量,看具体的设计)。
另外一个需要明确的是,由于我们做GPGPU时不是真正的在渲染画面,因此不需要将渲染结果以图像方式输出,而仅仅需要取出渲染的结果(也就是像素颜色值。如前面所说,可以将它们看成是传统的数组),因此我们不需要渲染到传统的帧缓冲区中,所以,我们要创建一个“后台的帧缓冲区”,就是FBO——Frame Buffer Object。FBO的概念在GPGPU中非常重要!
在将FBO创建好,并设定好我们之后的渲染指向这个FBO后,还需要明确一个观念