一个程序来比较cuda/c在GPU/CPU的运行效率
来源:互联网 发布:打口鞋淘宝匡威能买吗 编辑:程序博客网 时间:2024/05/21 08:44
在网上看了一个比较GPU和CPU执行矩阵运算效率的帖子,亲自跑了一下。
这是一个CUDA语言程序,请保存为“文件名.cu”。我的主机配置如下:
CPU:G2030;内存8GB;显卡:GTX750ti。
代码如下所示:
#include "cuda_runtime.h"#include "device_launch_parameters.h"#include <stdio.h>#include <time.h>#define N (1024*1024)#define M (10000)#define THREADS_PER_BLOCK 1024void serial_add(double *a, double *b, double *c, int n, int m){ for(int index=0;index<n;index++) { for(int j=0;j<m;j++) { c[index] = a[index]*a[index] + b[index]*b[index]; } }}__global__ void vector_add(double *a, double *b, double *c){ int index = blockIdx.x * blockDim.x + threadIdx.x; for(int j=0;j<M;j++) { c[index] = a[index]*a[index] + b[index]*b[index]; }}int main(){ clock_t start,end; double *a, *b, *c; int size = N * sizeof( double ); a = (double *)malloc( size ); b = (double *)malloc( size ); c = (double *)malloc( size ); for( int i = 0; i < N; i++ ) { a[i] = b[i] = i; c[i] = 0; } start = clock(); serial_add(a, b, c, N, M); printf( "c[%d] = %f\n",0,c[0] ); printf( "c[%d] = %f\n",N-1, c[N-1] ); end = clock(); float time1 = ((float)(end-start))/CLOCKS_PER_SEC; printf("CPU: %f seconds\n",time1); start = clock(); double *d_a, *d_b, *d_c; cudaMalloc( (void **) &d_a, size ); cudaMalloc( (void **) &d_b, size ); cudaMalloc( (void **) &d_c, size ); cudaMemcpy( d_a, a, size, cudaMemcpyHostToDevice ); cudaMemcpy( d_b, b, size, cudaMemcpyHostToDevice ); vector_add<<< (N + (THREADS_PER_BLOCK-1)) / THREADS_PER_BLOCK, THREADS_PER_BLOCK >>>( d_a, d_b, d_c ); cudaMemcpy( c, d_c, size, cudaMemcpyDeviceToHost ); printf( "c[%d] = %f\n",0,c[0] ); printf( "c[%d] = %f\n",N-1, c[N-1] ); free(a); free(b); free(c); cudaFree( d_a ); cudaFree( d_b ); cudaFree( d_c ); end = clock(); float time2 = ((float)(end-start))/CLOCKS_PER_SEC; printf("CUDA: %f seconds, Speedup: %f\n",time2, time1/time2); return 0;}程序运行结果如下图所示:
CPU的执行时间是GPU执行时间的10倍,这已经是一个数量级的差距了。而且,我相信随着运算量的加大,差距会更加明显。由此看来GPU做矩阵运算确实比CPU快太多。
原帖地址:https://my.oschina.net/zzw922cn/blog/631650
阅读全文
0 0
- 一个程序来比较cuda/c在GPU/CPU的运行效率
- CUDA 程序运行时 CPU 100%的一个解决方法
- 一个不错的关于CPU和GPU(CUDA)的性能比较讨论话题
- 多线程的程序在多核CPU与单核CPU运行效率有何不同
- 在vs中CUDA下c++混编实现c++运行gpu程序
- 多CPU程序开发: OpenMP-MPI(机群)和CUDA(GPU)
- CUDA 学习(十六)、优化策略1:并行/串行在GPU/ CPU 上的问题分解
- CUDA/ GPU: CUDA核函数的运行参数
- 程序在CPU中运行的机制
- 取模、乘法和除法运算在CPU和GPU上的效率
- 取模、乘法和除法运算在CPU和GPU上的效率
- CPU、GPU、CUDA,CuDNN 简介
- CPU、GPU、CUDA,CuDNN 简介
- cuda开发矩阵乘法测试你的GPU效率
- CUDA开发矩阵乘法测试你的GPU效率
- 利用render事件来提高程序的运行效率。
- render事件来提高程序的运行效率(as3.0)
- 利用render事件来提高as3程序的运行效率
- 图像处理21:Otsu's二值化
- bugku Web5
- 【剑指offer】面试题51:数组中的逆序对
- 《零基础入门学习Python》学习过程笔记【021匿名函数】
- 杭电oj1157 排序 参考1040
- 一个程序来比较cuda/c在GPU/CPU的运行效率
- 多校1001 HDU-6045. Is Derek lying? 逻辑题
- 多校1006 HDU-6050. Funny Function 数学推导题
- 【剑指offer】面试题52:两个链表的第一个公共节点
- 《零基础入门学习Python》学习过程笔记【022,023,024递归】
- 解题报告: #115 Min Stack
- Ubuntu——安装搜狗拼音输入法
- C++、python、CUDA性能分析--矩阵乘法
- IA32体系32位Linux系统虚拟地址映射上