我编写了将输入向量复制到输出向量的内核。但是与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);
}
}
感谢罗伯特的帮助。
我发现测量代码有错误。我只需要添加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);