如何在一台机器上使用多个版本IPP

作者: Lenber, Cong (Intel) (6 篇文章) 日期: 二月 4, 2010 在 4:38 下午

最近在用IPP实现AES的加密模块,为了对比几个版本IPP在加密模块上的性能,
要在同一台机器上装几个版本的IPP。
并在运行同一个执行文件的时候链接不同版本的IPP库。

为了实现这种做法,我们需要在编译的时候链接IPP的动态库。
在运行执行文件的时候,修改链接库的目录。

下面举一个例子,系统是linux,Windows应该同理。

假设源代码文件a.cpp,编译生成的执行文件为a_exec,另外IPP有两个版本:ipp版本A,ipp版本B。

1)如果版本A和版本B的大版本号一致,例如都是6.1.***,那么可以不用重新编译

编译的命令为:

g++ -o a_exec a.cpp -I /ipp版本A or B的安装目录/include, ipp_aes.cpp -L /ipp版本A or B的安装目录/sharedlib -

lpthread -lippcpem64t -lguide

生成的执行文件 a_exec 在执行的时候可以选择链接版本A的库或是版本B的库。

执行命令为:
# export export LD_LIBRARY_PATH=/ipp版本A/sharedlib
# ./a_exec
结果为使用IPP版本A的结果

# export export LD_LIBRARY_PATH=/ipp版本B/sharedlib
# ./a_exec
结果为使用IPP版本B的结果

2)如果版本A和版本B的大版本号不一样,比如A为6.1.***,B为5.*.**,文件需要分别编译:

使用版本A:
# g++ -o a_exec a.cpp -I /ipp版本A的安装目录/include, ipp_aes.cpp -L /ipp版本A的安装目录/sharedlib -lpthread  -lippcpem64t -lguide

# export export LD_LIBRARY_PATH=/ipp版本A/sharedlib
# ./a_exec

使用版本B:
# g++ -o a_exec a.cpp -I /ipp版本B的安装目录/include, ipp_aes.cpp -L /ipp版本B的安装目录/sharedlib -lpthread  -lippcpem64t -lguide

# export export LD_LIBRARY_PATH=/ipp版本B/sharedlib
# ./a_exec

这样就可以分别得到使用不同IPP库的性能数据了。

如果要在另外一台机器上运行这个执行文件,
只需把执行文件,以及相应IPP版本的动态库拷贝到这台机器上,并在执行前运行:
# export export LD_LIBRARY_PATH=ipp库所在的目录
就可以看到这个执行文件在这台机器上的性能数据了。

OK,就是这样。
P.S. 最新版的IPP性能还真是不错。
P.P.S.希望我也能跟duofeng同学一样把工作里遇到的方法记录下来,哪怕只是很小很小的一点。
P.P.P.S.这次测试的数据以及编写的代码应该会在不久后就可以发布。

分类: 其他, 并行计算

如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.

 评论 (7)

2010年02月04日 01:12

Yanqing Wang (Intel)
Yanqing Wang (Intel)总分:
10,053
黑带
学习了!

在linux下,如果使用动态库生成方式,再用ln -s软连接IPP的不同版本的so的话,应该也能达到相应效果。
2010年02月08日 22:03

Bruce Chen 陈宇达 (Intel)
Bruce Chen 陈宇达 (Intel)总分:
10,095
黑带
好文章啊,不错
2010年06月03日 03:40

dgsheng
dgsheng总分:
85
注册用户
你好,谢谢你的文章啊。

看了你的另外一篇文章。 http://software.intel.com/en-us/articles/boosting-openssl-ae.....equirement

目前我也正常学习使用icc 编译openssl,在CentOS5.5 64位平台下,根据文章中提示的,下载相关软件。其中 Linux: l _crypto_ipp_em64t_p_6.1.4.059.tar.gz 在Intel网站上找不到了,根据注册之后的URL访问提示页面访问不到了。不知道能不能从别的地方获取到该文件呢?现在编译的时候出现错 误,进行不下去了。

非常感谢!
2010年06月03日 19:08

Lenber, Cong (Intel)
Lenber, Cong (Intel)总分:
710
绿带
to dg

你好,也感谢你的关注。
l_crypto_ipp....tar.gz是需要通过注册来下载的。
如何获取,这篇文章讲的比较详细,麻烦你再试一下:
http://software.intel.com/en-us/articles/download-ipp-cryptography-libraries/

希望对你能有帮助。
Thanks.
2010年06月03日 19:56

dgsheng
dgsheng总分:
85
注册用户
谢谢你的回复。

我参考了你提供的网址,其中提供的地址 Intel® Premier Support https://premier.intel.com/

下载到了 Linux: l _crypto_ipp_em64t_p_6.1.4.059.tar.gz
找到昨天不能下载的原因了,竟然是IE浏览器版本的问题,我使用IE8访问总是显示页面没有找到,换成了IE6就打开了页面。

有问题再来请教你了,谢谢!
2010年06月04日 02:40

dgsheng
dgsheng总分:
85
注册用户
To Lenber
你好,不好意思啊,又来麻烦你了。参考你的文章,能够编译通过了。

有个问题再请教你,我发现如此编译出来的还是用GCC编译的。我现在想用ICC来编译OPENSSL,不知道能否提供一些相关的资料呢?

谢谢!
2010年06月06日 20:38

Lenber, Cong (Intel)
Lenber, Cong (Intel)总分:
710
绿带
to dg

如果直接运行build_ssl_ipp.sh,它调用的是openssl源代码下面的config:
./config ${LINKAGE} --prefix="${LOCATION}" --openssldir="${LOCATION}" -DUSE_IPP -I"${IPP_INCLUDE}" "${IPP_LIB_DIR_LIST}" "${IPP_LIB_LIST}"

而openssl源代码下的config,里面只指定了gcc作为编译器:
if [ "$GCCVER" != "" ]; then
CC=gcc
***********
***********
else
CC=cc
fi

所以如果要使用icc进行编译openssl目前有两种方式:
1)如果自己编译Openssl(没有加ipp的patch),可以在执行了config之后,把Makefile里面的 CC=gcc 改成 CC=icc,再进行make
2)如果使用ipp-sample里面的build_ssl_ipp.sh进行编译,就需要直接修改config文件,把上面那段代码改成 CC=icc。

当然两种方式的前提都是:系统已经安装好icc,且环境变量正确。
我还没有试过icc编译openssl,你可以尝试下。

谢谢。

 引用 (0)


 写评论  

欲获得技术支持,请访问软件支持页面.
姓名 (必填)*

电子邮件 (必填,不在本页面显示)*

您的 URL (可选)


评论*