这是一个错误的标题,但希望我的描述更清晰。我正在管理一个数十年前的建模和模拟应用程序。我们有兴趣编写一些代码在GPU上运行,因为我们相信它会加快模拟速度(是的,我们在时代中非常落后)。我们终于有机会做到这一点(即金钱),所以现在我们要确保我们理解这样做的后果,特别是维持代码。问题是,由于我们的许多用户没有高端GPU(目前),我们仍然需要我们的代码来支持正常的处理和GPU处理(即我相信我们现在将有两组代码执行非常类似的操作)。有没有人需要经历这些,并有任何教训和/或建议,他们想分享?如果有帮助,我们目前的应用程序是用C++开发的,我们正在考虑与NVIDIA合作,并在GPU中编写Cuda。维护/维持两个代码集的风险,一个用于GPU的CPU,需要执行非常类似的功能
-1
A
回答
1
这与使用矢量化或其他汇编指令编写手工装配版本类似,同时还保持C/C++版本。有长期在这样做的经验lot,这个建议是基于此。 (我在GPU中做这件事的经验是短期(几年)和更短(几次))。
你会想编写单元测试。
单元测试使用CPU实现(因为我还没有找到它们并不简单的情况)来测试GPU实现。
该测试运行几个模拟/模型,并声明结果是相同如果可能的话。它们每晚都会运行,并且/或者每次更改代码库作为验收套件的一部分。
这确保了两个代码库不会因为它们不断被执行而变得“陈旧”,而且这两个独立的实现实际上有助于维护另一个代码库。
另一种方法是运行混合解决方案。有时,运行混合的CPU和GPU比其中一个更快,即使它们都解决相同的问题。当你不得不切换技术(比如说,一种新的GPU语言,或者一个分布式设备网络,或者未来20年出现的新技术)时,“更简单”的CPU实现将会成为生命的救星。
+0
这正是我期待的那种建议,谢谢! –
相关问题
- 1. Git:使用99%的类似代码维护2个分支
- 2. 拉拉维尔两个非常相似的电话另一个
- 3. 每1000行代码需要多少个维护开发人员
- 4. 如何维护单个文件中的鱼类功能集合?
- 5. 避免分支 - 但需要维护的代码的多国
- 6. 替代维护一个API的会话
- 7. 合并两个类似的多维数组到一个
- 8. 使用git来维护一个共享的代码库
- 9. 使用Git维护多个类似项目的最佳策略?
- 10. 转换一维的ArrayList两个维度
- 11. 维护两个独立的图标
- 12. 用于在二维数组中找到相似行的代码
- 13. 创建/维护一个大型项目无关的代码库
- 14. 我有两个非常相似的功能,但只有一个可以工作
- 15. 如何使javascript代码易于维护
- 16. 维护2个类似但不同的网站
- 17. 需要类似日期功能的%EVAL
- 18. 两个非常类似的object.extend()代码来填充一个列表,一个作品一不是
- 19. 编写可维护代码
- 20. 发布硒代码维护
- 21. 风味维度源代码
- 22. 用于维护字段名称单独常量的替代
- 23. 两行代码的功能
- 24. .htaccess维护多个IP的
- 25. 将iOS应用程序移植到OSX并维护一个代码集?
- 26. 什么特定的实践,设计,语言/功能使维护代码非常容易?
- 27. 代码维护,替换代码
- 28. 这个C++需要交代的功能
- 29. 维护业务类库的两个版本
- 30. 需要两个功能结合成一个(Python)的
我知道这不是一个论坛,但如果其他人有建议/经验教训,请分享(我的团队,我将非常感谢!) –
代码将完全不同。我想几乎不可能产生两组看起来相似并且以某种常见方式模块化的代码。所以你必须支持2个应用程序来代替1. –
另外,正如你所提到的,SO不是一个论坛,你的问题不属于论坛。您可以尝试其他堆栈交换站点,但我认为您的问题对于问答格式来说过于宽泛/复杂。 –