事先声明,本篇博文中不涉及任何技术,原理和代码。如果想知道GPU开发实践方法,请直接查阅OpenCL与CUDA开发手册。


在“GPU并行软件开发指北”这篇博文中,我仅仅是想谈论一下GPU平台上的软件开发的方法论。当然,我也不是行业大牛,撰写不了能够刊登在三大学报的指南性论文,故而只能谈一谈在GPU平台上开发中所遇到的坑,所以只能指北。

目录

“快不快”与“对不对”

强耦合乃软件工程第一天敌

异构计算的核心是设备

不要太迷信理论加速值


  • “快不快”与“对不对”

既然要使用GPU平台来做加速,那么十有八九是在计算过程中遇到了计算时间的瓶颈。通过多数的案例可以知道,GPU确确实实的能够削减很多工程计算过程中的计算开销,但快的前提是保证足够计算精度,不然就会出现以下情况:

那么,算不对还要这GPU有何用呢,还不如打算盘来算。。。

所以,才完成一次工作后,一定要对数据进行测试。最简单好用的方法就是做减法,测算GPU丢的精度值。

当然,这样做的工作量会比较大,因为我们要面对的就是很耗时的应用,这样就很开心了。每测一次,就可以打一盘游戏(又有借口耍手机了)。

如果将多个CPU函数改为kernel函数后再来测试,不出BUG则已,一出BUG就得版本回滚。

  • 强耦合乃软件工程第一天敌

毋容置疑的一个结论就是----软件设计模式是软件工程设计的集大成者,Erich等四人的核心思路就是给予工程师们一套可复用的软件设计模式。我个人认为策略模式简直就是为算法工程师们量身定做的,但是在当今敏捷开发的潮流下,一般来说软件开发出来,能用就行了。然后,新来的开发者就在一堆强耦合的代码上继续再加加功能,最后就成了一个摇摇欲坠的大楼。

我在这里肯定不是讨论软件工程的,当CPU代码需要迁移到GPU上时的首要任务就是为函数解耦。如果软件框架的耦合度过高会使得代码修改无从下手,况且在解耦的同时还需要分析函数中的运算哪里有数据依赖,哪里适合并行。

为CPU代码解耦的时候,还是应该一步一步来,反复测试。一个大大的框架梦想是可以有的,但是工程实践还是要脚踏实地。

值得一提的时,在早期的开发版本中,不要将device中分配的变量贯穿整个软件的声明周期,否则遇到串行度较高的计算过程时还要重新调代码。即用即释放的操作方法可以规避很多奇奇怪怪的问题。

  • 异构计算的核心是设备

不要在不了解设备的情况下直接上手改程序。

对设备参数的足够了解才能保证开发过程足够流畅。我曾经在某问答网站上还有问PGI编译器能否部署在游戏卡上,估计这个大兄弟需要了解下游戏卡是否为Tesla架构。除此之外,GPU软件开发可以灵活的选择计算卡片,如果实在云平台上做开发,需要时常小心隔壁做深度学习开发的朋友是不是抢完了你的计算资源,因为这些框架可能会直接喊出整个显存的变量空间(说的就是你TF)。

  • 不要太迷信理论加速值

可是具体问题需要具体分析,开发过程一定要实事求是。

例如官方说明中说纹理内存就比较适合跨址的计算操作,片上内存可以有效的减少读写开销等。这些加速方案一定要测试之后才能判断出是否适合于当前的并行软件开发。软件开发是工程实现,我们只能是在出现问题后去分析以及解释问题,而不是纯粹依靠数学模型或算法原理来推测。


差不多先写这些,以后遇坑接着写。

图片皆选自网络,侵权请告知,必删。

(软件工程)GPU并行软件开发指北相关推荐

  1. Mybatis注解开发指北

    Mybatis注解开发指北 目录 文章目录 Mybatis注解开发指北 @[toc] 0. Mybatis注解开发步骤 1. 导入相关配置文件 2. 配置数据库连接 3. 创建数据库对应的实体类(en ...

  2. 软件工程:传统软件工程 vs 敏捷软件开发

    转自我的博客园文章: http://www.cnblogs.com/katniss-smile/p/5982643.html 首先给出软件工程和敏捷软件开发的定义: 软件工程(Software Eng ...

  3. 软件工程---3.敏捷软件开发

    敏捷软件开发 极限编程(XP, Beck1999) Scrum方法(Schwaber and Beedle 2001) DSDM方法(Stapleton 2003) 敏捷软件的开发宣言 个体和交互胜过 ...

  4. 二、软件工程 / 生命周期 / 软件开发模型

    软件测试 软件危机和软件工程 软件生命周期 软件生命周期模型 1. 瀑布模型 2. 螺旋模型 3. 迭代模型 4. 敏捷开发(Scrum)模型 5. 增量模型 6. 快速原型模型 软件危机和软件工程 ...

  5. 软件工程概论:软件开发的需求分析阶段为什么要用用例图来建模?

    为什么要用用例图? 用例图 用例图应用在软件开发的需求分析阶段,他描述了系统的功能以及如何使用一个系统 用例图显示谁将是相关的用户.用户希望系统提供什么服务以及用户需要为系统提供的服务 用例图最常用来 ...

  6. ProM开发指北3——ProM插件开发入门

    以下内容参考:setup/HowToCreatePluginsInProM – prom 可以参考视频教程:流程挖掘开发,ProM Workshop 介绍_哔哩哔哩_bilibili,开发部分只需看p ...

  7. ProM开发指北2——环境设置

    以下内容引用:GettingStarted – prom 开发环境 ProM是基于Eclipse开发的,JDK建议使用1.8版本,同时ProM使用Subclipse进行版本控制,使用Ivy进行依赖管理 ...

  8. ProM开发指北1——什么是ProM

    ProM(Process Mining framework)是一个流程挖掘算法的开源框架,是流程挖掘社区进行研究的开发框架平台,为开发者和用户提供一个易使用.易扩展的流程挖掘算法平台.开发者可以在Pr ...

  9. 软件工程-软件开发的工程思维

    软件工程-软件开发的工程思维 目录 软件工程-软件开发的工程思维 前言 什么是软件工程? 定义 出现的背景 软件工程核心知识 与项目管理的区别 软件工程的目标 为什么需要软件工程 如何做好软件工程:原 ...

最新文章

  1. 一行代码,解决空指针问题.
  2. HDU1392(凸包求周长模版)
  3. 深度学习核心技术精讲100篇(三十五)-美团餐饮娱乐知识图谱——美团大脑揭秘
  4. SQLServer2000数据库特有的1433端口号
  5. python顺序结构有一个入口_高楼万丈平地起,基础要打牢!Python获取类的层次结构和继承顺序...
  6. Kotlin实战指南十一:扩展函数
  7. 三、scrapy爬虫框架——scrapy模拟登陆
  8. amp sqlserver中 什么意思_股票术语中的做空到底是什么意思?
  9. mybatis关于factorybean疑问
  10. 360浏览器+7654联盟
  11. matlab norm函数_机器人手眼标定MATLAB及C++实现(二十九)
  12. mysql 数据库清理 磁盘空间
  13. layui的layer弹出层和form表单
  14. Python爬虫——使用三种方法来爬取酷狗音乐的TOP榜
  15. 联想扬天P600台式电脑安装Win10系统方法
  16. 【Android 教程系列第 27 篇】如何使用 Keytool 工具生成 keystore 签名文件
  17. [UWP]使用SpringAnimation创建有趣的动画
  18. linux usb声卡 无声音,记一次解决在Ubuntu 18.04下声卡没有声音的经历
  19. Kalevitch and Chess(翻译 day 4)
  20. 一篇对于了解我自己,挖掘我自己,从而成长的文章

热门文章

  1. 学会这 11 条,你离 Git 大神就不远了!
  2. 智能别墅烟雾和粉尘感应报警系统的设计(任务书+开题+lunwen+翻译及原文+附录程序)
  3. 05 图形学——图形渲染与颜色
  4. 达梦(DM)常用命令
  5. 次坐标从0开始_全站仪使用方法及坐标计算讲解
  6. 2B产品运营,有困局亦有解法
  7. 每天坚持刷 LeetCode 的人,究竟会变得有多强... 学习技巧都藏在这几个公众号里面了......
  8. 大学计算机应用基础演示文稿,大学计算机应用基础演示文稿.ppt
  9. 苹果手机壳_1月21号截。丝带手机挂绳,苹果手机壳
  10. 前端之HTML列表、表格及表单