SingleInstructionMultipleData

高性能计算中一个基础的东西–Single Instruction Multiple Data一条指令多个数据流

(使用同一条指令同时操作多个数据)

特点

属于数据级别的并行(data level parallelism), 无需多线程参与(not concurrency)

没有通用的模板(不像mpi、openmpi)可以套用,没有cuda、不能用不同架构的cpu去套进模型去算,意思就是完全依赖于硬件

如开一个openmpi要有启动线程等的很大开销,但simd就没有,单线程的。那么它可以和多线程配合使用

怎么simd

1、默认加编译选项自动向量化

2、检测到依赖会拒绝向量化,就使用OpenMP的#pragma simd 强行向量化,但是效果不好

3、推荐:Intel intrinsic (推荐)

4、内嵌汇编直接爆肝 __asm指令,用c语言写的时候把汇编嵌入进去