技术开发 频道

cuda入门:runtime API创建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 的主要的优势,即并行化执行。

        更多内容请点击:

        CUDA专区:http://cuda.it168.com/

        CUDA论坛:http://cudabbs.it168.com/

0
相关文章