【发布时间】:2012-03-02 21:03:55
【问题描述】:
我很想知道如何使用 GPU 的并行处理能力。但是,我并不急于制作图形!我尝试了 Cg 的教程,但它似乎很重的图形术语。此外,我似乎无法理解如何将这样的程序连接到某些输入和输出。
让我们考虑以下非常简单的程序,它显然可以从并行性中受益(忽略缓慢的 HDD 速度):从 2 个文件中读取两个大整数数组,通过添加最后两个的元素创建一个新数组,并将其存储在另一个文件中。我没有对其进行测试,但这就是我在 C++ 中编码的方式:
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
const int N=10000000;
int a[N],b[N],c[N];
ifstream a_source ("file_a",ios::binary);
ifstream b_source ("file_a",ios::binary);
ofstream c_target ("file_a",ios::binary);
a_source.read((char*)a,N*sizeof(int));
b_source.read((char*)b,N*sizeof(int));
for(int i=0;i<N;i++)
c[i]=a[i]+b[i];
c_target.write((char*)c,N*sizeof(int));
return 0;
}
您能否详细说明我如何使用 Cg 来实现这一点?
【问题讨论】:
-
你对 Cg 死心了吗?据我所知,它纯粹是一种着色器语言,因此不一定适合通用 GPU 编程。看看 CUDA 或 OpenCL。 (警告:您的特定示例当然是一个微不足道的着色器,但我仍然认为使用通用 API 而不是为图形开发的 API 更有意义)。
-
Cg 是图形的 C,而不是 GPU 的 C。如果你想用它做 GPGPU,你需要知道图形处理是如何工作的,以及如何在它上面映射 GPGPU。