Multithreading 理解并行化
我制作了一个并行系统,并对其进行了一些测试,但我不明白发生了什么。每列都是一个矩阵计算以及计算所需的时间。为什么增加CPU的线程数会达到一个阈值 当我有4个CPU和4、8、16个线程时,为什么系统没有进一步加速?是不是因为每个CPU的读/写成本太高,导致效率下降Multithreading 理解并行化,multithreading,performance,parallel-processing,Multithreading,Performance,Parallel Processing,我制作了一个并行系统,并对其进行了一些测试,但我不明白发生了什么。每列都是一个矩阵计算以及计算所需的时间。为什么增加CPU的线程数会达到一个阈值 当我有4个CPU和4、8、16个线程时,为什么系统没有进一步加速?是不是因为每个CPU的读/写成本太高,导致效率下降 **2 CPUs** 1 Thread 0.72 s 10.31 s 34.77 s 42.07 s 120.93 s 2 Threads 0.48 s 7.88 s 22.63 s 28.40 s 82.81 s 4
**2 CPUs**
1 Thread 0.72 s 10.31 s 34.77 s 42.07 s 120.93 s
2 Threads 0.48 s 7.88 s 22.63 s 28.40 s 82.81 s
4 Threads 0.50 s 7.12 s 24.22 s 28.68 s 80.78 s
8 Threads 0.49 s 6.92 s 24.14 s 28.80 s 80.88 s
16 Threads 0.57 s 6.89 s 24.23 s 29.68 s 81.35 s
**4 CPUs**
1 Thread 0.71 s 10.30 s 34.95 s 43.07 s 120.93 s
2 Threads 0.48 s 7.06 s 22.78 s 28.33 s 82.81 s
4 Threads 0.49 s 5.47 s 20.37 s 21.82 s 67.45 s
8 Threads 0.40 s 5.16 s 17.83 s 21.84 s 61.71 s
16 Threads 0.46 s 5.20 s 17.75 s 22.19 s 65.37 s
每一个问题都会达到一个临界点。以下是您需要考虑的事项:
MIC和GPU是高效的协处理器,如果您愿意,可以考虑。
< P>每一个问题都会达到一个阈值。以下是您需要考虑的事项:MIC和GPU是高效的协处理器,如果你喜欢的话,可以考虑。
< P>这取决于问题的类型。最简单的情况是一个令人尴尬的并行问题——您有N个不需要相互通信的解耦任务。然后,当您添加到N个处理器时,这些任务将线性扩展 然而,现实世界中的许多任务并非如此——它们需要与系统的其他元素进行交互。消息传递需要两个并行进程同步,这意味着在此期间会浪费时间。有各种各样的方法可以做到这一点,但从根本上说,任何时候这种交流都会“浪费”效率和规模 涵盖了这一点——原则是,通过增加并发性,您永远不会获得并行性能的线性扩展,但您可以将任务解耦得越多,效果就越好 也许与直觉相反,您实际上可以通过“浪费时间”重复计算来获得更高的性能,因为进程间通信(IPC)的相对费用和开销大于复制工作所花费的时间所以它的长短取决于你的算法。最小化IPC,您将获得更好的可扩展性 这取决于问题的类型。最简单的情况是一个令人尴尬的并行问题——您有N个不需要相互通信的解耦任务。然后,当您添加到N个处理器时,这些任务将线性扩展 然而,现实世界中的许多任务并非如此——它们需要与系统的其他元素进行交互。消息传递需要两个并行进程同步,这意味着在此期间会浪费时间。有各种各样的方法可以做到这一点,但从根本上说,任何时候这种交流都会“浪费”效率和规模 涵盖了这一点——原则是,通过增加并发性,您永远不会获得并行性能的线性扩展,但您可以将任务解耦得越多,效果就越好 也许与直觉相反,您实际上可以通过“浪费时间”重复计算来获得更高的性能,因为进程间通信(IPC)的相对费用和开销大于复制工作所花费的时间
所以它的长短取决于你的算法。最小化IPC,您将获得更好的可扩展性 我们可以看看你的实际代码吗?我们可以看看你的实际代码吗?