我最近对并行计算很感兴趣,我只是想看看是否有某种标准或工作流来设计并行架构。
特别是,我对以下问题的答案感兴趣:如果您需要编写您知道将被并行化的代码,那么最好先编写串行代码并确保其正确实现,然后将其并行化,还是应该从一开始就编写并行化?我想这可能是特定的应用程序?例如,一些用串行方式编写的代码可能需要进行显着修改才能被并行化?
我只是在寻找一个通用的工作流,以便进入正确的设计并行软件的思维模式。
发布于 2018-12-21 22:21:14
我想这可能是特定的应用程序?例如,一些用串行方式编写的代码可能需要进行显着修改才能被并行化?
这个,非常喜欢。
事实上,我想说,从根本上说,从代码的角度来考虑它是一种糟糕的方法。您必须首先从数据的角度考虑并行体系结构:
因为并行执行代码很简单。让它变得困难的是访问数据(如果你把它搞砸了,会导致比赛条件或糟糕的性能)。
看看任何一个著名的并行架构的例子,以及它是如何回答这些问题的,应该可以认识到,这些答案告诉了你关于这个体系结构的非常基本的事实。
发布于 2018-12-21 21:59:51
通常,您需要依次编写代码,然后在性能不够好的情况下添加对线程的支持。这也确保了代码是正确的,因为如果它不能在一个线程上正确工作,那么它就不会在多个线程上工作。在编写串行代码时,您需要记住,您最终可能会将其并行化。除其他外,这意味着将数据分离为只读或常量数据(可以在最终线程之间共享)和可写数据(每个线程都需要一个副本)。
有时,您会事先知道您需要运行多个线程,然后您可以以这种方式编写它。写入它之后,您应该只在一个线程上运行和调试它。一旦成功,在两个线程上运行它,并验证获得的结果与单个线程运行的结果相同。
https://softwareengineering.stackexchange.com/questions/384431
复制相似问题