利用CUDA加速旧代码过程中的两点疑问

蓝色雨滴 发布于 2015/07/31 20:55
阅读 438
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

一直从事电子信息系统建模仿真方面的工作,借助于面向对象的分析与设计(OOAD)等技术,利用C++语言实现了多个实际信息系统的功能模型。最近考虑用CUDA改写这些旧代码,以提高仿真时效性,但在这个过程中遇到了两个问题:

1. 感觉CUDA是面向过程的——参考了NVIDIA的示例程序,全部都是一系列的函数。之前在建模仿真过程中经常使用的OOAD方法与技术,例如封装、多态、继承、模板、设计模式等,感觉这些技术和方法很难和CUDA的函数结合起来。难道为了改写,一定要把原有的成熟模型体系全部推翻重来?这样就得不偿失了。

2. 为了不破坏原有功能模型中的信号/信息处理流程,只在某些具体算法中采用了CUDA加速,比如FFT、矩阵运算、矢量操作等,这造成了较为频繁的数据吞吐(意指从core到host之间的数据交换),这耗去了较长的时间,算法效率提升不够明显。

恳请论坛里的各位达人指点,先谢谢了。

p.s.过程中遇到的一些具体的技术实现问题,我稍后贴上。

加载中
0
蓝色雨滴
蓝色雨滴
直观上理解,CUDA的核函数确实是面向过程的,它可能并不影响程序的架构,只在需要进行CUDA加速的地方调用它就好。执行的效率高低就要看并行算法设计以及CUDA程序优化了,不过根据一般的经验,当运算的规模很小时用CUDA加速是得不偿失的,因为这时节约的时间可能还没有Host跟 Device之间数据交换消耗的多。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部