首页 > 解决方案 > 为什么cublas复制算法在cuda中这么快?

问题描述

我编写了将输入向量复制到输出向量的内核。但与 cublascopy API 相比,性能还不够。在 1M 个元素的情况下,cublasScopy 几乎比我的内核快 100 倍。有人知道cublascopy的算法吗?

__global__ void copy_kernel(const float *rv1, int inc1, float *rvo, int inco, int n)
{
    int tid = threadIdx.x + blockIdx.x * blockDim.x;

    while (tid < n)
    {
        rvo[tid*inco] = rv1[tid*inc1];
        tid += (blockDim.x * gridDim.x);
    }
}

标签: algorithmcudacopycublas

解决方案


感谢罗伯特的帮助。

我发现测量代码有一个错误。我必须添加 cudaDeviceSynchronize() 仅用于测量性能。然后上面我的内核比cublasScopy慢一点。我认为这是合理的。

// cuBLAS Algorithm
timer.onTimer(4);
cublasScopy(handle, num_data, d_i_vals, inc1, d_o_vals, inco);
cudaDeviceSynchronize();     // this dummy line is needed only for measurement purpose
timer.offTimer(4);

timer.onTimer(5);
checkCudaErrors(cudaMemcpy(o_vals, d_o_vals, sizeof(float) * o_buf_size, 
                            cudaMemcpyDeviceToHost));
cudaDeviceSynchronize();
timer.offTimer(5);

推荐阅读