0

将 OpenMP 与矩阵向量乘积结合使用的最佳方式是什么?for 指令是否足够(如果是的话,我应该把它放在哪里?我假设外循环会更有效)还是我需要调度等......?

另外,我将如何利用不同的算法来最有效地尝试这个 mv 产品?

谢谢

4

1 回答 1

3

您应该采取的第一步是显而易见的,将最外层循环包装在并行 for 指令中。正如你所假设的。尝试一些证据来支持你(和我的)假设总是值得的,但如果你只被允许进行 1 项更改,那将是一个更改。

我对缓存遗忘算法了解不多,但我知道它们通常通过将问题递归划分为子问题来工作。这似乎不适合并行 for 指令的应用。我怀疑您可以使用 OpenMP 的任务实现这样的算法,但我怀疑这样做的开销将超过任何合理尺寸的 mv 产品的执行改进。

(如果你在 NI 大小的 mv 产品上证明这个论点是错误的,将会反驳“N 不是一个合理的维度”。与这些性能问题一样,证据每次都胜过论点。)

最后,根据您的编译器和库的可用性,您可能不需要使用 OpenMP 进行 mv 计算,您可能会发现自动并行化工作效率很高,或者已经有一个多线程此类计算的库实现。

于 2012-03-27T07:32:17.983 回答