利用CUDA加速旧代码过程中的两点疑问
一直从事电子信息系统建模仿真方面的工作,借助于面向对象的分析与设计(OOAD)等技术,利用C++语言实现了多个实际信息系统的功能模型。最近考虑用CUDA改写这些旧代码,以提高仿真时效性,但在这个过程中遇到了两个问题:
1. 感觉CUDA是面向过程的——参考了NVIDIA的示例程序,全部都是一系列的函数。之前在建模仿真过程中经常使用的OOAD方法与技术,例如封装、多态、继承、模板、设计模式等,感觉这些技术和方法很难和CUDA的函数结合起来。难道为了改写,一定要把原有的成熟模型体系全部推翻重来?这样就得不偿失了。
2. 为了不破坏原有功能模型中的信号/信息处理流程,只在某些具体算法中采用了CUDA加速,比如FFT、矩阵运算、矢量操作等,这造成了较为频繁的数据吞吐(意指从core到host之间的数据交换),这耗去了较长的时间,算法效率提升不够明显。
恳请论坛里的各位达人指点,先谢谢了。
p.s.过程中遇到的一些具体的技术实现问题,我稍后贴上。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
直观上理解,CUDA的核函数确实是面向过程的,它可能并不影响程序的架构,只在需要进行CUDA加速的地方调用它就好。执行的效率高低就要看并行算法设计以及CUDA程序优化了,不过根据一般的经验,当运算的规模很小时用CUDA加速是得不偿失的,因为这时节约的时间可能还没有Host跟 Device之间数据交换消耗的多。