---
title: SIMD指令集
description: "SIMD（Single Instruction Multiple Data）指令集是一种单条指令可以处理多条数据流的指令的集合。而一般我们使用的指令集是只能够单条指令处理单条数据流，这种指令集又称SISD（Single Instruction Single Data）指令集。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/progtuneg/kunpengprogramming_05_0017.html
sourcePath: /source/zh/perftuning/progtuneg/kunpengprogramming_05_0017.html
indexId: c7e5f1cd9931d84be6fe58365d3178b7f8137e45303b31ca0cf02b671c8e554363
---
# SIMD指令集

SIMD（Single Instruction Multiple Data）指令集是一种单条指令可以处理多条数据流的指令的集合。而一般我们使用的指令集是只能够单条指令处理单条数据流，这种指令集又称SISD（Single Instruction Single Data）指令集。

从概念上来看，我们就可以知道，SIMD指令集在数据密集运算的场景下，性能会明显优于SISD指令集。如图1所示，以加法指令为例，SISD指令，CPU先执行一条指令，进行A1 + B1 = C1计算，再执行下一条指令，进行A2 + B2 = C2计算，按此顺序依次完成后续计算。四个加法计算操作需要串行执行。而对于SIMD指令来说，CPU只需执行一条指令，即可完成四个加法计算操作，四个加法计算操作并行执行。显然在这样的场景下，SIMD指令性能优于传统的SISD指令。

图1 SISD指令与SIMD指令

而这种并行化执行实现的原因是CPU在物理设计时，增加了一些专用的向量寄存器，这些寄存器的长度通常大于通用寄存器，比如鲲鹏处理器的向量寄存器长度就是128 bit，而通用寄存器最大长度是64 bit。因此，这些寄存器可以同时放入多个数据。但需要注意，这里放入的多个数据需要保证数据类型是一致的。

因为涉及专用的向量寄存器，不同架构有不同的向量寄存器，因此不同架构支持的SIMD指令集是不一样的，基于鲲鹏平台进行开发，使用SIMD指令集需要注意该SIMD指令集是否是鲲鹏架构支持的。
