algorithm - 为什么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);
}
}
解决方案
感谢罗伯特的帮助。
我发现测量代码有一个错误。我必须添加 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);
推荐阅读
- validation - 根据 Java 中的 OAS3.0 规范验证 OAS3.X YAML 规范文件
- python - 从熊猫数据框中提取str
- java - 如何从已创建的数组创建可变集?
- angular - 基于选中的收音机的角度更新内容
- python - 在 PIL (Python) 中处理图像时继续出错
- sorting - 如何根据他们在R中的名称对双打列表进行排序
- javascript - Firestore 安全规则 - 缺少权限或权限不足,但我已编写
- sql - 根据某些行从上一行中减去
- discord.js - discord.js 某些频道嵌入
- flutter - 我不断收到一条错误消息,提示 Flutter Error Unable to Load Asset