【IT168 文档】在上一篇的《nVidia CUDA API》中,已經大概介紹了一些寫 CUDA 程式時,必須知道的 API;接下來,就先開始簡單的 CUDA 程式吧!
這邊舉一個簡單的向量相加的程式來當例子。首先,先定義測試用的資料:
// initial data
int data_size = 100;
float *dataA = new float[data_size],
*dataB = new float[data_size],
*dataC = new float[data_size];
for( int i = 0; i < data_size; ++ i )
{
dataA[i] = i;
dataB[i] = -1 * i;
}
int data_size = 100;
float *dataA = new float[data_size],
*dataB = new float[data_size],
*dataC = new float[data_size];
for( int i = 0; i < data_size; ++ i )
{
dataA[i] = i;
dataB[i] = -1 * i;
}
上面的程式,會宣告 dataA, dataB 兩個 float 的一維 array,同時內部的值都差一個負號;而 dataC 的部分,則是預備用來存放 dataA, dataB 相加後的結果。
一般版本
在向量加法的部分,如果以一般 C/C++ 的寫法,可以寫成:
void add_vector_cpu( float* a, float* b, float *c, int size )
{
for( int i = 0; i < size; ++ i )
c[i] = a[i] + b[i];
}
{
for( int i = 0; i < size; ++ i )
c[i] = a[i] + b[i];
}
而 main 的部分,則只需要呼叫函式就可以了:
add_vector_cpu( dataA, dataB, dataC, data_size );
在呼叫 add_vector_cpu 後,會在迴圈裡,把 dataA 和 dataB 的每一項各自相加,並把結果記錄在 dataC 中。由於 dataA, dataB 的值都差一個負號,所以 dataC 會是一個所有值都是 0 的 array。