技术开发 频道

第一個 CUDA 程式

  計算執行時間

  CUDA 提供了一個 clock 函式,可以取得目前的 timestamp,很適合用來判斷一段程式執行所花費的時間(單位為 GPU 執行單元的時脈)。這對程式的非常好的化也相當有用。要在我們的程式中記錄時間,把 sumOfSquares 函式改成:

__global__ static void sumOfSquares(int *num, int* result,
    clock_t
* time)
{
    
int sum = 0;
    
int i;
    clock_t start
= clock();
    
for(i = 0; i < DATA_SIZE; i++) {
        sum
+= num[i] * num[i];
    }
    
*result = sum;
    
*time = clock() - start;
}

   把 main 函式中間部份改成:

    int* gpudata, *result;
    clock_t
* time;
    cudaMalloc((
void**) &gpudata, sizeof(int) * DATA_SIZE);
    cudaMalloc((
void**) &result, sizeof(int));
    cudaMalloc((
void**) &time, sizeof(clock_t));
    cudaMemcpy(gpudata, data, sizeof(
int) * DATA_SIZE,
        cudaMemcpyHostToDevice);

sumOfSquares
<<<1, 1, 0>>>(gpudata, result, time);
    
int sum;
    clock_t time_used;
    cudaMemcpy(
&sum, result, sizeof(int), cudaMemcpyDeviceToHost);
    cudaMemcpy(
&time_used, time, sizeof(clock_t),
        cudaMemcpyDeviceToHost);
    cudaFree(gpudata);
    cudaFree(result);
    printf(
"sum: %d time: %d\n", sum, time_used);

  編譯後執行,就可以看到執行所花費的時間了。

  如果計算實際執行時間的話,可能會注意到它的執行效率並不好。這是因為我們的程式並沒有利用到 CUDA 的主要的優勢,即平行化執行。在下一段文章中,會討論如何進行非常好的化的動作。

0
相关文章