为什么cublas复制算法在cuda中这么快?

问题描述 投票:0回答:1

我编写了将输入向量复制到输出向量的内核。但是与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);
    }
}
algorithm cuda copy cublas
1个回答
0
投票

感谢罗伯特的帮助。

我发现测量代码有错误。我只需要添加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);
© www.soinside.com 2019 - 2024. All rights reserved.