社区
CUDA on Linux
帖子详情
CUDA下,如何测试1MB的数据从主机内存传输到gpu全局内存花费的时间?
MrCzx
2017-12-02 11:20:10
我是这样测试,在主机内存申请一个数据,数组的大小为256,然后给其赋初始值,然后用cudaMemcpy函数拷贝,用time.h头文件里面获取时间,但是在cudaMemcpy前后获取的时间一致,这是因为什么原因呢?求助,应该有啥好的方法测试所花费的时间?
...全文
815
3
打赏
收藏
CUDA下,如何测试1MB的数据从主机内存传输到gpu全局内存花费的时间?
我是这样测试,在主机内存申请一个数据,数组的大小为256,然后给其赋初始值,然后用cudaMemcpy函数拷贝,用time.h头文件里面获取时间,但是在cudaMemcpy前后获取的时间一致,这是因为什么原因呢?求助,应该有啥好的方法测试所花费的时间?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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; }
FFmpeg系列之35:FFmpeg+
CUDA
硬件加速原理与案例
FFmpeg+
CUDA
硬件加速原理与案例实战FFmpeg系列之35FFmpeg第2季编解码专题之5:FFmpeg+
CUDA
硬件加速原理与案例实战本课程主要讲解的知识点包括:
GPU
高性能编程
CUDA
入门、
CUDA
编程模型的原理解析、
CUDA
编程小白案例入门实战、
CUDA
官方经典案例实战与解析、FFmpeg+CUVID硬件加速原理与命令行、Qt+FFmpeg实现
cuda
硬解码加速代码实战等。---------------------------------------------------------------目前FFmpeg第二季【编解码专题】,主要包括以下课程:FFmpeg4.3系列之31:图像格式与压缩FFmpeg4.3系列之32:MPEG-1/2视频编解码FFmpeg4.3系列之33:H.264/H.265视频编码FFmpeg4.3系列之34:FFmpeg+DXVA2+D3D硬件加速FFmpeg4.3系列之35:FFmpeg+
CUDA
硬件加速
CUDA
统一
内存
的技术内幕
原文 我之前的介绍性文章“
CUDA
C++更简单的介绍”介绍了
CUDA
编程的基础,展示了如何编写一个简单的程序,将两个数组的数字分配给
GPU
可访问的
内存
,然后在
GPU
上把它们相加起来。为此,我向您介绍了统一
内存
,它使分配和访问
数据
变得非常容易,这些
数据
可以由系统中任何处理器(CPU或
GPU
)上运行的代码使用。 图1所示。统一
内存
是系统中任何处理器都可以访问的单个
内存
地址空间。 我用...
第6章
CUDA
内存
处理 摘录
6.1 简介 抽象已经在现代程序语言中成为一种趋势。它使程序员离底层硬件越来越大,以确保程序员不必过多了解底层硬件就可以编写程序。但它仍然灵活的编译器将上层的抽象转换成底层硬件能够理解的形式。 有两个比较重要的概念,一个是存储带宽(memeory bandwidth),即在一定
时间
内从DRAM中读出或写入的
数据
量。一个是延迟(latency),即响应一个获取
内存
的请求所
花费
的
时间
,通常这个
时间
会是上百个处理器周期。 从
内存
总线带宽与
内存
设备时钟频率的角度来看,处理器的设计也出现了相同的权衡点。设备上硅
第9章 应用程序性能优化(2) 摘录
9.3 策略:
传输
9.3.1 锁页
内存
为对某一
数据
集进行操作,你需要将
数据
从
主机
传输
到设备上、在
数据
集是哪个进行操作,然后将结果
传输
回
主机
。由于是在完全串行的方式下执行的,这将导致
主机
和
GPU
在一段
时间
内实现制的,白白浪费了
传输
能力与计算能力。 在本章,我们详细介绍了多
GPU
的使用,包括如何使用流以确保
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写文章