新手问下关于CUDA效率的问题
试了一下一个简单的矩阵相加的并行程序 感觉效率非常低下 主要是memcpy和malloc太费时间了 求教一下各位大神这种问题怎么解决?是由于计算量太少还是我代码的问题?

以上是代码和运行截图 谢谢各位大神了!
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = blockIdx.x;
int j = threadIdx.x;
int idx = i*blockDim.x+j;
c[idx] = a[idx] * b[idx];
c[idx] += a[idx] * b[idx];
}
const int arraySize = 100;
int main()
{
int a[arraySize][arraySize];
int b[arraySize][arraySize];
int c[arraySize][arraySize];
int c1[arraySize][arraySize];
for(int i = 0;i<arraySize;i++)
{
for(int j = 0;j<arraySize;j++)
{
a[i][j] = i;
b[i][j] = 2*i;
}
}
cudaError_t cudaStatus;
// Choose which GPU to run on, change this on a multi-GPU system.
cudaStatus = cudaSetDevice(0);
clock_t t1 = clock();
int *dev_a = 0;
int *dev_b = 0;
int *dev_c = 0;
// Allocate GPU buffers for three vectors (two input, one output) .
cudaStatus = cudaMalloc((void**)&dev_c, arraySize * arraySize * sizeof(int));
cudaStatus = cudaMalloc((void**)&dev_a, arraySize * arraySize * sizeof(int));
cudaStatus = cudaMalloc((void**)&dev_b, arraySize * arraySize * sizeof(int));
// Copy input vectors from host memory to GPU buffers.
cudaStatus = cudaMemcpy(dev_a, a, arraySize * arraySize * sizeof(int), cudaMemcpyHostToDevice);
cudaStatus = cudaMemcpy(dev_b, b, arraySize * arraySize * sizeof(int), cudaMemcpyHostToDevice);
// Launch a kernel on the GPU with one thread for each element.
addKernel<<<arraySize, arraySize>>>(dev_c, dev_a, dev_b);
// Check for any errors launching the kernel
cudaStatus = cudaGetLastError();
// cudaDeviceSynchronize waits for the kernel to finish, and returns
// any errors encountered during the launch.
cudaStatus = cudaDeviceSynchronize();
// Copy output vector from GPU buffer to host memory.
cudaStatus = cudaMemcpy(c, dev_c, arraySize * arraySize * sizeof(int), cudaMemcpyDeviceToHost);
clock_t t2 = clock();
cout<<"time:"<<t2-t1<<endl;
for(int i = 0;i<arraySize;i++)
{
for(int j = 0;j<arraySize;j++)
{
c1[i][j] = a[i][j] + b[i][j];
c1[i][j] += a[i][j] * b[i][j];
c1[i][j] += a[i][j] * b[i][j];
c1[i][j] += a[i][j] * b[i][j];
}
}
t1 = clock();
cout<<"time:"<<t1-t2<<endl;
cudaFree(dev_c);
cudaFree(dev_a);
cudaFree(dev_b);
cudaStatus = cudaDeviceReset();
return 0;
}
以上是代码和运行截图 谢谢各位大神了!
...全文
相关推荐
浅谈pytorch、cuda、python的版本对齐问题
本文将详细介绍在使用PyTorch框架时CUDA和Python版本的对齐问题,这将有助于我们更好地配置训练环境,避免一些不必要的麻烦。
CUDA C/C++ 新手入门代码练习
本篇将基于"CUDA C/C++ 新手入门代码练习"这个主题,详细介绍CUDA编程的基础知识,包括CUDA架构、编程模型、内存管理以及编程技巧。
Thrust:一个面向效率的CUDA编程库
这为开发者在使用CUDA进行编程时提供了宝贵的帮助,大大简化了并行计算的复杂性,并提高了程序的开发效率和运行效率。
cuda-TSP:使用 CUDA 扩展在 C 中实现旅行商问题
本项目“cuda-TSP”就是将CUDA技术应用到旅行商问题的求解中,以提高计算效率。1.
提升CUDA程序运行效率的几个关键点
最近由于项目需要,需要用MPI+CUDA混合编程提高程序运行效率。相对于MPI并行程序编程,要想充分利用CUDA的资源利用率,还是要考虑很多方面的内容,根据查找的一些相关资料,将提升GPU显卡吞吐率以及利用效率的方法归纳如下,如有问题,敬请批评指正。下面是进行CUDA编程的大致流程,为了避免混乱,会将相关的详细内容放到链接所示的位置。 1、明确计算机中GPU卡片的计算资源,决定变量的性质(constant,share还是global)以及Grid,Block的维度 ...


