对于CUDA Fortran开发者来说,函数传参真这么麻烦么?

有天,有人在论坛上问了一个问题:

我想创建一个data区域来减少subroutine之间的数据传递(阅读原文查看楼主的代码),这样就不必在subroutine之间进行一次次的数据拷贝到设备再拷贝回主机再拷贝回设备计算,请问这种数据传输操作可行吗?如果可行的话,请问该如何操作呢?我只知道present导语能够告知编译器该变量已经存在于数据区域中,那么如何让GPU计算得出的变量滞留在设备内存中,直接供给下一个subroutine使用呢?直到数据区域结束再指明需要将哪些变量传输回主机内存。

代码有点长,大神终于抽开时间看了一下。

1. 首先,强烈反对使用common的形式进行数据传递。这一点跟GPU无关,只要你用fortran,就会有人这么跟你说。因此,至于openACC支不支持用common传数据、怎么传、结果不正确一概不予回答。 其次,至于你的问题,可以用module数据块的形式共享数据。我写了个简单的实例代码: 主程序如下:

数据文件如下:

子函数文件如下:

编译后用nvprof分析的结果:

nvvp分析结果:

可见,数据在data_init()的时候,由enter data导语在设备端创建并由主机端传输到设备端;在连续5次调用data_cal()时,数据一直在设备端,供函数使用,并没有额外传输;在最后data_finalize()的时候数据传回主机端。此模型应该满足你的需求,也应该满足大部分openacc fortran程序的需求。

大神总结

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

【先行者】把光标停在input的右侧结尾处?

今天咱们先行者计划的微信群里有个同学提了这个问题, ? 我当时也没怎么细想,就给了个思路, ? 后来这个同学说, ? <!-- --> setSelect...

19760
来自专栏知晓程序

工作一团糟?快用这个小程序,好好整理你的任务

以前,我们通常把待办事项记录在便利贴上,来防止遗忘。可是,便利贴不能让我们随时随地查看,也不方便和其他人共享。

9020
来自专栏阮一峰的网络日志

谈谈MVC模式

1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一...

32750
来自专栏张善友的专栏

MindTouch简介和技术架构

摘要: 介绍MindTouch公司的企业级协作平台和平台架构。本文主要内容翻译自于【3】,也是协作吧!!的第一篇作品,希望大家多提意见。 正文: MindTou...

22770
来自专栏编程

Go和Rust简单计算性能PK

作者:孙飞撩技术 链接:https://www.jianshu.com/p/003fc48cbf55 來源:简书 共3499字,阅读需9分钟 迁移自 CSDN:...

541100
来自专栏程序人生 阅读快乐

Python核心编程(第3版)

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包...

10120
来自专栏云时之间

简单爬虫(一):实现百度音乐下载

现在我们听歌往往会集中在一个平台,但是往往很多歌曲只在一个平台独占,我们听自己几首想听的歌曲往往要在几个平台跳来跳去,正好现在在使用爬虫,在学着解析网页的时候,...

415130
来自专栏木东居士的专栏

聊一聊数据获取和爬虫

34430
来自专栏JetpropelledSnake

Python Web学习笔记之CPU时间片

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时 间片结束时进程...

449110
来自专栏美团技术团队

“小众”之美——Ruby在QA自动化中的应用

20730

扫码关注云+社区

领取腾讯云代金券