Intel IPP密码库开发记录——第一部分 开发指南

Part I. 开发指南

内容参考官方文档

《Intel® Integrated Performance Primitives Cryptography Developer Guide, Intel Integrated Performance Primitives 2018》

1. Getting Started

路径说明

  1. 默认的Intel IPP密码库安装路径<install_dir>为C:/Program files (x86)/IntelSWTools/compilers_and_libraries_2018.x.xxx/<target_os
  2. 默认的Intel IPP密码库主文件目录<ipp cryptography directory>为<install_dir>/ippcp/.

添加环境变量

  1. 环境变量(执行如下文件)
    1. <install_dir>\ipp\bin\ippvars.bat
    2. <install_dir>\ippcp\bin\ippcpvars.bat
  2. 手动添加Path
    1. <install_dir>\redist\ ia32_win\ipp
    2. <install_dir>\redist\ intel64_win\ippcp

然后分别运行

  1. <install_dir>\ippcp\tools\ia32\perfsys\ps_ippcp.exe
  2. <install_dir>\ippcp\tools\intel64\perfsys\ps_ippcp.exe

检测这两个程序是否能正常运行;正常运行则设置正确。

2. Theory of Operation

默认的接口函数是一个分派接口而已,它会根据CPU型号去分配对于的真正实现的库。根据CPU型号实现的库和函数会以该CPU标识为前缀。

比如ippsSHA256Update()是一般的接口,内含很多版本。在64-bit 应用的第二代Core处理器会调用e9_ippsSHA256Update(),在64-bit 应用的支持SSE4.2的处理器上会调用y8_ippsSHA256Update()。

表 CPU型号的前缀标识表

3. Linking Your Application

Intel IPP密码库支持四种链接方式:单线程静态库、单线程动态库、多线程静态库、多线程动态库。

  1. 单线程库已带,安装后路径为

 <ipp cryptography directory>/lib/<arch>

  1. 多线程库需单独下载,安装后路径为

 <ipp cryptography directory>/lib/<arch>/threaded

库名

单线程

多线程

静态库

ippcpmt.lib

ippcpmt.lib

动态库

ippcp.lib

ippcp.lib

4. Programming in the VS* IDE

1. VS IDE添加路径

最好把IPP的相关路径也添加进去,因为有很多需要IPP。

工具 选项 环境很解决方案 VC目录,添加对应平台的include文件和lib文件。

  1. include
    1. <install_dir>\ipp\include
    2. <install_dir>\ippcp\include
  2. Lib
    1. <install_dir>\ipp\lib\<arch>_win,<arch> 为ia32或者intel64
    2. <install_dir>\ippcp\lib\<arch>_win,<arch> 为ia32或者intel64
  3. bin(是否需要添加,因为环境变量已经添加)
    1. <install_dir>\redist\<arch>_win\ipp,<arch> 为ia32或intel64
    2. <install_dir>\redist\<arch>_win\ippcp,<arch> 为ia32或intel64

2. 工程添加库

项目 属性 配置属性 链接器 输入 附加依赖性,添加需要的lib文件。例如动态链接需要ippcp.lib,静态链接需要ippcpmt.lib。

附录A Performance Test Tool

  1. <install_dir>\ippcp\tools\ia32\perfsys\ps_ippcp.exe
  2. <install_dir>\ippcp\tools\intel64\perfsys\ps_ippcp.exe

附录B Threading and OpenMP

如果应用层已经采用多线程来调用 IPP 密码库,则底层最好使用单线程密码库。否则,应用层和底层IPP密码库都使用多线程的话,会出现Nested parallelization,从而导致效率降低。

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/84560735
今日推荐