CUDA下,如何测试1MB的数据从主机内存传输到gpu全局内存花费的时间?

MrCzx 2017-12-02 11:20:10
我是这样测试,在主机内存申请一个数据,数组的大小为256,然后给其赋初始值,然后用cudaMemcpy函数拷贝,用time.h头文件里面获取时间,但是在cudaMemcpy前后获取的时间一致,这是因为什么原因呢?求助,应该有啥好的方法测试所花费的时间?
...全文
815 3 打赏 收藏 转发到动态 举报
写回复
用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; }

374

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Linux
社区管理员
  • CUDA on Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧