xhsh的个人博客分享 http://blog.sciencenet.cn/u/xhsh

博文

调用cula和cublas的一个根本的不同

已有 5454 次阅读 2013-11-23 20:21 |个人分类:Linux|系统分类:教学心得

调用cula和cublas的device接口的函数时,有一个根本的不同:调用cublas是立即返回,而调用cula则不同,是要等到程序运行完毕才返回。以下是测试的例子:

zgemm(cublas):

call cpu_time(t0)

call  cublas_device_zgemm('N', 'N', nd, nd, na, -alpha, C_d, nd, F_d, na, alpha, D_d, nd)

call cpu_time(t1)

print *,'zgemm:',t1-t0

D=D_d

call cpu_time(t2)

D=D_d

call cpu_time(t3)

print *,'copy1:',t2-t1

print *,'copy2:',t3-t2

运行结果:

zgemm:  2.2888184E-05

copy1:    6.989143

copy2:    6.0188293E-02

不要以为zgemm运行只要0.00002秒,而数据拷贝用了近7分钟。这其实是一个假象。调用zgemm的函数,还没运行完毕,CPU立刻返回了。但接下来的D=D_d,却要等到前面的zgemm运行完毕才会开始传递数据。实际上,这6秒的时间是zgemm的运行时间。也就是在传递数据前,这个拷贝语句等待了6秒。再看第2个拷贝语句,只需要0.06秒,这才是真实的数据传递的时间。

zgesv(cula):

call cpu_time(t0)

info= cula_device_zgesv(na,na,A_d,na,ipiv_d,A_I_d,na)

call cpu_time(t1)

print *,'zgesv:',t1-t0

A=A_I_D

call cpu_time(t2)

print *,'copy:',t2-t1

运行结果:

zgesv:   10.26568    

copy:   6.0382843E-02

这里10.26秒的时间是zgesv真正运行的时间,0.06秒是数据传递的时间。可见,在调用cula的时候,CPU要等到程序运行完毕才返回。

因此,在调用cublas中的库函数时,在读取显存中的数据之前,可以充分利用这段时间做一些事情。而调用cula则不能,因为它必须等到程序完毕了才能返回。






https://blog.sciencenet.cn/blog-47991-744110.html

上一篇:Fortran调用子程序时,实参和形参的存储空间是共用的吗?
下一篇:调用cublas和cula的另一个根本不同
收藏 IP: 61.190.88.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 23:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部