将OpenMP与矩阵向量产品一起使用的最佳方法是什么? for指令是否足够(如果是这样,我应该放在哪里?我假设外循环会更有效)或者我需要时间表等等吗?
另外,我如何利用不同的算法来最有效地尝试这种m-v产品呢?
由于
答案 0 :(得分:3)
你应该采取的第一步是显而易见的步骤,将最外层的循环包含在并行指令中。如你所愿。总是值得尝试一些来获得一些证据来支持你(和我)的假设,但是如果你只允许进行1次改变,那就是要做出的改变。
我对缓存遗忘算法知之甚少,但我知道它们通常通过将问题递归划分为子问题来工作。这似乎不适合并行指令的应用。我怀疑你可以用OpenMP的任务实现这样的算法,但我怀疑这样做的开销将超过任何合理维度的m-v产品的任何执行改进。
(如果你证明了这个论点在大小为N的m-v产品上的虚假性,我会反驳'N'不是一个合理的维度。就像这些表现问题一样,证据每次都胜过争论。)
最后,根据您的编译器和库的可用性,您可能不需要使用OpenMP进行mv计算,您可能会发现自动并行化有效地工作,或者已经有一个多线程这种计算的库实现。