【问题标题】:Is there any instructions sets support MIMD arch?是否有任何指令集支持 MIMD 架构?
【发布时间】:2017-12-20 10:41:04
【问题描述】:

我已经知道 SIMD 指令集包含 SSE1 到 SSE5。
但是没有发现太多关于任何指令集支持 MIMD 架构的讨论。
在c++代码中,我们可以使用intrinsic来编写“SIMD running”代码。
有没有办法编写“MIMD 运行”代码?
如果 MIMD 比 SIMD 更强大, 最好写c++代码支持MIMD。
我的想法对吗?

【问题讨论】:

  • 用另一种方式来表达答案:ISO C++11 添加了对 MIMD 的语言内置支持。它叫std::thread

标签: c++ simd


【解决方案1】:

维基百科页面 Flynn's taxonomy 将 MIMD 描述为:

多个自主处理器同时对不同的数据执行不同的指令。 MIMD 架构包括多核超标量处理器和分布式系统,使用一个共享内存空间或一个分布式内存空间。

任何时候您将算法划分(例如使用 OpenMP 划分为线程),您都可能在使用 MIMD。通常,您不需要特殊的“MIMD 指令集”——ISA 与 SISD 相同,因为每个指令流都独立于其他指令流运行,它们基于自己的数据。 EPIC(显式并行指令计算)是一种替代方法,其中功能单元以同步方式运行,但具有独立的(ish)指令和数据。

至于哪个“更强大”(或更节能,或最低延迟,或您的用例中的任何重要事项),没有单一的答案。与许多复杂问题一样,“视情况而定”。

【讨论】:

    【解决方案2】:

    我的想法对吗?

    这当然是幼稚的,并且是特定于实现的。请记住以下事实:

    • optimizing compilers 生成非常聪明的代码(当你 enable 优化时)。例如,尝试一些最近调用为g++ -march=native -O3 -WallGCC(如果您想查看生成的汇编代码,可能还有-fverbose-asm -S);请参阅 CppCon 2017:Matt Godbolt 的 talk “我的编译器最近为我做了什么?解开编译器的盖子”

    • 有一些扩展(通过标准化的编译指示完成)来改进 MIMD 的优化,请查看 OpenMPOpenACC

    • 考虑显式并行化方法:多线程(阅读一些pthread programming 教程)、MPI...

    • 还可以查看用于 GPGPU 计算的方言,例如 OpenCLCUDA

    另请参阅this answer 的相关问题。

    如果MIMD比SIMD更强大,最好写c++代码支持MIMD。

    当然不总是,如果您只关心性能。像往常一样,这取决于您,您需要进行基准测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2020-02-11
      • 2011-09-19
      相关资源
      最近更新 更多