Visual Studio配置Intel IPP库流程详解

Visual Studio配置Intel IPP库流程详解

英特尔IPP(Integrate Performance Primitives)库是一个功能强大,使用简单的函数库,能够针对不同的英特尔架构进行了高度优化。其免版税 API 可以帮助开发人员

  • 使用单指令、多数据 (SIMD)的 指令(类似于matlab中的函数)。
  • 提高计算密集型应用程序的性能,包括信号处理数据压缩视频处理和加密
  • 降低软件开发和维护的成本并缩短上市时间。

本文将介绍在Windows系统中使用Visual Studio编译器配置Intel IPP的流程。

一、官网下载IPP库

官网链接

进入官网,点击Download the Stand-Alone Version模块

image-20230704134651607

跳转后选择需要的版本进行下载安装

image-20230704143229981

下载完成后启动安装程序,照着提示一路点点点就行

image-20230704135129745

image-20230704142700804

image-20230704142900753

image-20230704142940081

image-20230704142952261

image-20230704143154598

image-20230704143609792
安装完成后,需要配置PATH、LIB、INCLUDE环境变量,可以通过运行脚本<install_dir>\env\vars.bat程序实现
在这里插入图片描述

二、使用Visual Studio链接IPP库

  1. 打开Visual Studio创建一个新的空项目

  1. 在解决方案处右击你的工程并点击“属性”,进行到配置页面

  1. 在配置页面中选择“配置属性”->VC++目录,并完成如下的配置
  • 在“包含目录中”添加Intel IPP的include目录地址(默认是在<install_dir>\include);
  • 在“库目录”中添加Intel IPP的library目录地址(默认是在<install_dir>\lib<arch>);
  • 在“可执行文件目录”中添加Intel IPP的可执行文件目录(默认是在<install_dir>\redist<arch>);

image-20230704141557451

上述是官网教程配置IPP库的常用方法,通常情况下配置第三方库可以在工程属性页按照如下步骤配置

  • 配置头文件所在目录(存放.h头文件的目录)

C/C+±>常规->附加包含目录

  • 添加库文件目录(存放静态库.lib文件的目录)

链接器->常规->附加库目录

  • 添加具体的lib文件(静态库文件)

链接器->输入->附加依赖项

image-20230704151755619

  • 添加dll文件索引目录(存放动态库.dll文件的目录)

VC++目录->常规->可执行文件目录

image-20230704152103280

  1. 在“配置属性”->Intel Libraries for oneAPI将"Use Intel IPP"选项设置为Default Linking Methed。

image-20230704141817485

  1. 创建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库

image-20230704142122216

) Advanced Vector Extensions 512 is supported by OS);
return 0;
}


运行结果如下,则代表成功配置IPP库

[外链图片转存中...(img-Yj3dmEZA-1688455564490)]



  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值