共 1,304 篇文章
共 6,317 篇文章及评论
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
如何在一台机器上使用多个版本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月08日 22:03
Bruce Chen 陈宇达 (Intel)
| 好文章啊,不错 |
| 2010年06月03日 03:40
dgsheng
|
你好,谢谢你的文章啊。 看了你的另外一篇文章。 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)
|
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
|
谢谢你的回复。 我参考了你提供的网址,其中提供的地址 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
|
To Lenber 你好,不好意思啊,又来麻烦你了。参考你的文章,能够编译通过了。 有个问题再请教你,我发现如此编译出来的还是用GCC编译的。我现在想用ICC来编译OPENSSL,不知道能否提供一些相关的资料呢? 谢谢! |
| 2010年06月06日 20:38
Lenber, Cong (Intel)
|
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,你可以尝试下。 谢谢。 |




Yanqing Wang (Intel)
10,053
在linux下,如果使用动态库生成方式,再用ln -s软连接IPP的不同版本的so的话,应该也能达到相应效果。