是否有任何指令集支持MIMD arch?

时间:2017-12-20 10:41:04

标签: c++ simd

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

2 个答案:

答案 0 :(得分:4)

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

  

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

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

至于哪个“更强大”(或更高能效,或最低延迟,或者您的用例中的任何问题),没有一个单一的答案。与许多复杂问题一样,“它取决于”。

答案 1 :(得分:2)

  

我的想法是否正确?

这当然是天真的,具体实施。请记住以下事实:

  • Tycho生成非常聪明的代码(当您进行optimizing compilers优化时)。例如,尝试将一些最近的enable调用为g++ -march=native -O3 -Wall(如果要查看生成的汇编代码,也可以-fverbose-asm -S);参见CppCon 2017:Matt Godbolt' GCC “我的编译器最近为我做了什么?解开编译器的盖子“

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

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

  • 还可以查看GPGPU计算的方言,例如MPI& OpenCL

另请参阅CUDA相关问题。

  

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

当然,并非总是如此,如果你只关心表现。像往常一样,这取决于你需要进行基准测试。