社区
CUDA on Linux
帖子详情
CUDA下,如何测试1MB的数据从主机内存传输到gpu全局内存花费的时间?
MrCzx
2017-12-02 11:20:10
我是这样测试,在主机内存申请一个数据,数组的大小为256,然后给其赋初始值,然后用cudaMemcpy函数拷贝,用time.h头文件里面获取时间,但是在cudaMemcpy前后获取的时间一致,这是因为什么原因呢?求助,应该有啥好的方法测试所花费的时间?
...全文
836
3
打赏
收藏
CUDA下,如何测试1MB的数据从主机内存传输到gpu全局内存花费的时间?
我是这样测试,在主机内存申请一个数据,数组的大小为256,然后给其赋初始值,然后用cudaMemcpy函数拷贝,用time.h头文件里面获取时间,但是在cudaMemcpy前后获取的时间一致,这是因为什么原因呢?求助,应该有啥好的方法测试所花费的时间?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YCMyTot
2018-05-25
打赏
举报
回复
2楼正解,1MB的数据确实不大,精度低的话,根本测不出来,可以试下把数据量调大或者使用us级来计算时间。此外gpu端计算时间可以用cudaevent_t。 这样测试感觉意义不大。。。
tfwn
2018-05-17
打赏
举报
回复
秒级精度太低了,至少使用us级吧 随便找了个测例如下: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { clock_t begin, end; double cost; //开始记录 begin = clock(); /*待测试程序段*/ printf("hello world!\n"); //结束记录 end = clock(); cost = (double)(end - begin)/CLOCKS_PER_SEC; printf("constant CLOCKS_PER_SEC is: %ld, time cost is: %lf secs", CLOCKS_PER_SEC, cost); }
MrCzx
2017-12-02
打赏
举报
回复
#include <stdio.h> #include <time.h> #define size 256000 int main(){ time_t start,finish; struct tm *startsm,*finishsm; int ah[size],bh[size],i; bool flag=1; //用来判断传输过程中是否出现错误,1无误,0错误 int *ad; for(i=0;i<size;i++){ ah[i]=i; } cudaSetDevice(0); cudaMalloc((void**)&ad, size*sizeof(int)); //1KB数据从cpu内存到GPU内存 start=time(NULL); //计时开始 startsm=localtime(&start); printf("start :%ld\n",start); printf("-----%s",asctime(startsm)); cudaMemcpy(ad, ah, size*sizeof(int), cudaMemcpyHostToDevice); finish=time(NULL); //结束计时 finishsm=localtime(&finish); printf("finish: %d\n",finish); printf("-----%s",asctime(finishsm)); printf("%dKB数据从cpu内存到GPU内存所花费的时间为:%f s\n",size/256,difftime(finish,start)); //数据从gpu内存到cpu内存 time(&start); //计时开始 cudaMemcpy(bh, ad, size*sizeof(int), cudaMemcpyDeviceToHost); time(&finish); //结束计时 printf("%dKB数据从gpu内存到cpu内存所花费的时间为:%f s\n",size/256,difftime(finish,start)); //检查是否有错误 for(i=0;i<size;i++){ //printf("%d ",bh[i]); if(ah[i]!=bh[i]){ flag=0; break; } } if(flag){ printf("corret:传输过程无误\n"); } else{ printf("wrong:传输过程出错,需要进一步检查\n"); } cudaFree(ad); return 0; }
什么让
CUDA
程序性能大幅提升?
GPU
寄存器与固定
内存
的秘密大公开
GPU
寄存器是每个线程的“私人宝库”,速度快得飞起,比
全局
内存
快几十倍。:寄存器是
CUDA
的命脉,但别一味追求少用。**改成这样:告诉编译器这些指针不重叠,减少不必要的
内存
检查,寄存器分配更高效。:固定
内存
...
第6章
CUDA
内存
处理 摘录
6.1 简介 抽象已经在现代程序语言中成为一种趋势。它使程序员离底层硬件越来越大,以确保程序员不必过多了解底层硬件就...从
内存
总线带宽与
内存
设备时钟频率的角度来看,处理器的设计也出现了相同的权衡点。设备上硅
第9章 应用程序性能优化(2) 摘录
为对某一
数据
集进行操作,你需要将
数据
从
主机
传输
到设备上、在
数据
集是哪个进行操作,然后将结果
传输
回
主机
。由于是在完全串行的方式下执行的,这将导致
主机
和
GPU
在一段
时间
内实现制的,白白浪费了
传输
能力与计算...
CUDA
统一
内存
的技术内幕
我之前的介绍性文章“
CUDA
C++更简单的介绍”介绍了
CUDA
编程的基础,展示了如何编写一个简单的程序,将两个数组的数字分配给
GPU
可访问的
内存
,然后在
GPU
上把它们相加起来。为此,我向您介绍了统一
内存
,它使分配...
【
GPU
高性能编程
CUDA
实战】学习笔记
【
GPU
高性能编程
CUDA
实战】学习笔记,
GPU
编程入门,可以采用这本书,首先知道它大概有哪些东西,然后在工作中,任务驱动去学习
GPU
的其他知识,实践实践再实践。
CUDA on Linux
374
社区成员
345
社区内容
发帖
与我相关
我的任务
CUDA on Linux
CUDA on Linux
复制链接
扫一扫
分享
社区描述
CUDA on Linux
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章