- emmintrin.h是Intrinsic的一部分。在MMX,SSE系列中,intrinsics表示一種封裝的MMX或者SSE指令。
- SSE(Stream SIMD Extentions,資料流單指令多資料擴充)是英特爾繼MMX(Multi Media eXtension,多媒體擴充指令集)之後推出的新一代CPU指令集。換言之,這個指令集隻支援在x86架構下使用,在aarch64架構下不能使用。
- MMX,SSE,AVX是Intel處理器支援的SIMD技術中的一項,SIMD(Single Instruction Multiple Data)是單指令多資料技術。
- SIMD技術,在x86架構下,使用sse或者sse2等等指令集,而在arm架構下,使用的是NEON指令集。
- NEON技術是ARM Cortex-A系列處理器的128位SIMD架構擴充,旨在為消費性多媒體應用程式提供靈活、強大的加速功能。
- 由上可知,emmintrin.h這個頭檔案,本身就不是在aarch64中使用的指令集,是以,一開始我在網上找到這個emmintrin.h頭檔案,發現報了更多的error,需要找到相應架構下的指令集才行。
- 是以,需要将其改寫為neon的代碼,即在arm架構下可以使用的指令集。這一步操作,英特爾提供了相應的函數,也就是sse2neon.h。
- sse2neon.h的使用方法很簡單,先将其放入
或者/usr/local/include
或者你的代碼工程下,總之就是要能調用到,而後修改代碼中原本的/usr/include
為#include <emmintrin.h>
即可使用。#include <sse2neon.h>
- sse2neon.h的下載下傳位址及使用方法
-
頭檔案-架構-指令集
arm_neon.h - ARM Neon types & intrinsics
altivec.h - Freescale Altivec types & intrinsics
mmintrin.h - X86 MMX
xmmintrin.h - X86 SSE1
emmintrin.h - X86 SSE2