AVX用法及样例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

+AVX(AdvancedVectorExtensions)是SSE(StreamingSIMDExtensions)的延伸架构,此架构将寄存器从128位提升到256位。+只有VS2010和gcc4.6及更高版本的编译器,配合第二代Corei3/i5/i7及更新型号的处理器才支持高级向量扩展指令函数。+支持更多运算符号__m256_mm256_blend_ps(__m256a,__m256b,constintmask)+支持更多数学函数__m256_mm256_ceil_ps(__m256a)+支持数据交叉运算__m256_mm256_addsub_ps(__m256a,__m256b)+支持三操作数运算__m256_mm256_fmadd_ps(__m256a,__m256b,__m256c)+使用SSE和AVX所提供的__m128和__m256数据类型需要标准整型支持。+VS2010和gcc3.0及更高版本的编译器提供C99标准整型头文件stdint.h。+声明变量需要使用__declspec(align(N))或__attribute__(aligned(N))扩展属性。+分配内存需要使用_mm_malloc(size,align)和_mm_free(ptr)函数(malloc.h)。#ifndefALIGN#if!defined(__GNU__)/*Win*/#defineALIGN(n)\__declspec(align(n))#else/*Linux*/#defineALIGN(n)\__attribute__(aligned(n))#endif#endiffloat*ptr=_mm_malloc(8,32);_mm_free(ptr);+使用SSE或AVX需要在编译器中添加/arch:SSE(-msse)或/arch:AVX(-mavx)选项来启用指令集。+使用SSE或AVX需要在编译器中预定义__SSE__或__AVX__宏来声明函数集。+在编译时检测编译器是否支持SSE或AVX需要包含zintrin.h头文件,支持则定义INTRIN_SSE或INTRIN_AVX宏。+在运行时检测处理器是否支持SSE和AVX需要包含ccpuid.h头文件,使用simd_sse_level和simd_avx_level函数判断其版本。#ifdefINTRIN_SSEif(simd_sse_level(NULL)=SIMD_SSE_1){//RUNYOURSSECODECDTWoDTW;oDTW.GetDTWPath_SSE(&oUserData,&oTempData,MFCC_LIMIT);}#elifINTRIN_AVXif(simd_avx_level(NULL)=SIMD_AVX_1){//RUNYOURAVXCODECDTWoDTW;oDTW.GetDTWPath_AVX(&oUserData,&oTempData,MFCC_LIMIT);}#endif

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功