Visual Studio配置Intel IPP库流程详解
英特尔IPP(Integrate Performance Primitives)库是一个功能强大,使用简单的函数库,能够针对不同的英特尔架构进行了高度优化。其免版税 API 可以帮助开发人员
- 使用单指令、多数据 (SIMD)的 指令(类似于matlab中的函数)。
- 提高计算密集型应用程序的性能,包括信号处理、数据压缩、视频处理和加密。
- 降低软件开发和维护的成本并缩短上市时间。
本文将介绍在Windows系统中使用Visual Studio编译器配置Intel IPP的流程。
一、官网下载IPP库
进入官网,点击Download the Stand-Alone Version模块
跳转后选择需要的版本进行下载安装
下载完成后启动安装程序,照着提示一路点点点就行
安装完成后,需要配置PATH、LIB、INCLUDE环境变量,可以通过运行脚本<install_dir>\env\vars.bat程序实现
二、使用Visual Studio链接IPP库
- 打开Visual Studio创建一个新的空项目
- 在解决方案处右击你的工程并点击“属性”,进行到配置页面
- 在配置页面中选择“配置属性”->VC++目录,并完成如下的配置
- 在“包含目录中”添加Intel IPP的include目录地址(默认是在<install_dir>\include);
- 在“库目录”中添加Intel IPP的library目录地址(默认是在<install_dir>\lib<arch>);
- 在“可执行文件目录”中添加Intel IPP的可执行文件目录(默认是在<install_dir>\redist<arch>);
上述是官网教程配置IPP库的常用方法,通常情况下配置第三方库可以在工程属性页按照如下步骤配置
- 配置头文件所在目录(存放.h头文件的目录)
C/C+±>常规->附加包含目录
- 添加库文件目录(存放静态库.lib文件的目录)
链接器->常规->附加库目录
- 添加具体的lib文件(静态库文件)
链接器->输入->附加依赖项
- 添加dll文件索引目录(存放动态库.dll文件的目录)
VC++目录->常规->可执行文件目录
- 在“配置属性”->Intel Libraries for oneAPI将"Use Intel IPP"选项设置为Default Linking Methed。
- 创建main.cpp文件,并运行检测代码
#include <stdio.h>
#include "ipp.h"
#define PRINT_INFO(feature, text) printf(" %-30s= ", #feature); \
printf("%c\t%c\t", (cpuFeatures & feature) ? 'Y' : 'N', (enabledFeatures & feature) ? 'Y' : 'N'); \
printf( #text "\n")
int main(int argc, char* argv[])
{
const IppLibraryVersion *libVersion;
IppStatus status;
Ipp64u cpuFeatures, enabledFeatures;
ippInit(); /* Initialize Intel(R) IPP library */
libVersion = ippGetLibVersion();/* Get Intel(R) IPP library version info */
printf("%s %s\n", libVersion->Name, libVersion->Version);
status = ippGetCpuFeatures(&cpuFeatures, 0);/* Get CPU features and features enabled with selected library level */
if (ippStsNoErr != status) return status;
enabledFeatures = ippGetEnabledCpuFeatures();
printf("Features supported: by CPU\tby Intel(R) IPP\n");
printf("------------------------------------------------\n");
PRINT_INFO(ippCPUID_MMX, Intel(R) Architecture MMX technology supported);
PRINT_INFO(ippCPUID_SSE, Intel(R) Streaming SIMD Extensions);
PRINT_INFO(ippCPUID_SSE2, Intel(R) Streaming SIMD Extensions 2);
PRINT_INFO(ippCPUID_SSE3, Intel(R) Streaming SIMD Extensions 3);
PRINT_INFO(ippCPUID_SSSE3, Supplemental Streaming SIMD Extensions 3);
PRINT_INFO(ippCPUID_MOVBE, Intel(R) MOVBE instruction);
PRINT_INFO(ippCPUID_SSE41, Intel(R) Streaming SIMD Extensions 4.1);
PRINT_INFO(ippCPUID_SSE42, Intel(R) Streaming SIMD Extensions 4.2);
PRINT_INFO(ippCPUID_AVX, Intel(R) Advanced Vector Extensions instruction set);
PRINT_INFO(ippAVX_ENABLEDBYOS, Intel(R) Advanced Vector Extensions instruction set is supported by OS);
PRINT_INFO(ippCPUID_AES, Intel(R) AES New Instructions);
PRINT_INFO(ippCPUID_CLMUL, Intel(R) CLMUL instruction);
PRINT_INFO(ippCPUID_RDRAND, Intel(R) RDRAND instruction);
PRINT_INFO(ippCPUID_F16C, Intel(R) F16C new instructions);
PRINT_INFO(ippCPUID_AVX2, Intel(R) Advanced Vector Extensions 2 instruction set);
PRINT_INFO(ippCPUID_ADCOX, Intel(R) ADOX/ADCX new instructions);
PRINT_INFO(ippCPUID_RDSEED, Intel(R) RDSEED instruction);
PRINT_INFO(ippCPUID_PREFETCHW, Intel(R) PREFETCHW instruction);
PRINT_INFO(ippCPUID_SHA, Intel(R) SHA new instructions);
PRINT_INFO(ippCPUID_AVX512F, Intel(R) Advanced Vector Extensions 512 Foundation instruction set);
PRINT_INFO(ippCPUID_AVX512CD, Intel(R) Advanced Vector Extensions 512 CD instruction set);
PRINT_INFO(ippCPUID_AVX512ER, Intel(R) Advanced Vector Extensions 512 ER instruction set);
PRINT_INFO(ippCPUID_AVX512PF, Intel(R) Advanced Vector Extensions 512 PF instruction set);
PRINT_INFO(ippCPUID_AVX512BW, Intel(R) Advanced Vector Extensions 512 BW instruction set);
PRINT_INFO(ippCPUID_AVX512VL, Intel(R) Advanced Vector Extensions 512 VL instruction set);
PRINT_INFO(ippCPUID_AVX512VBMI, Intel(R) Advanced Vector Extensions 512 Bit Manipulation instructions);
PRINT_INFO(ippCPUID_MPX, Intel(R) Memory Protection Extensions);
PRINT_INFO(ippCPUID_AVX512_4FMADDPS, Intel(R) Advanced Vector Extensions 512 DL floating-point single precision);
PRINT_INFO(ippCPUID_AVX512_4VNNIW, Intel(R) Advanced Vector Extensions 512 DL enhanced word variable precision);
PRINT_INFO(ippCPUID_KNC, Intel(R) Xeon Phi(TM) Coprocessor);
PRINT_INFO(ippCPUID_AVX512IFMA, Intel(R) Advanced Vector Extensions 512 IFMA (PMADD52) instruction set);
PRINT_INFO(ippAVX512_ENABLEDBYOS, Intel(R) Advanced Vector Extensions 512 is supported by OS);
return 0;
}
运行结果如下,则代表成功配置IPP库
) Advanced Vector Extensions 512 is supported by OS);
return 0;
}
运行结果如下,则代表成功配置IPP库
[外链图片转存中...(img-Yj3dmEZA-1688455564490)]