一个简单的使用MKL的例子
下面是一个使用Intel MKL 进行矩阵计算的例子。 通过的这个例子,我们可以了解如何使用Intel MKL 的函数库:
1>程序说明:下面的matrix.c 文件分别调用 C 代码,Intel MKL BLAS Level 1 函数 (ddot), BLAS Level 2 函数(dgemv) 与 BLAS Level 3的函数(DGEMM)完成矩阵计算: roll_your_own_multiply 是 C 源代码,它直接依赖编译器生成优化代码。Ddot_Multiply,Dgemv_multiply使用Intel MKL 函数实现部分矩阵运算。Dgemm_multiply 直接调用MKL 的矩阵计算函数。
2>程序编译与链接:
下面是在Linux 32 的系统上,使用Intel Compiler编译该程序并链接Intel MKL 10.0的例子:
> source /opt/intel/cc/10.x.xxx/bin/iccvars.sh #设置Intel Compiler 环境变量
> icl –o matrix –I/opt/intel/mkl/10.0.xxxxx/include/ matrix.c-L/opt/intel/mkl/10.0.xxxx/lib/32/ -lmkl_intel_c -lmkl_intel_thread -lmkl_core -lguide40.lib –lpthread
其他的链接的方式,大家可以查看下面的帖子:http://support.intel.com/support/performancetools/sb/CS-028699.htm
3> 程序执行:
> source /opt/intel/mkl/10.0.xxxxx/tools/environment/mklvars32.sh #程序使用动态方式链接MKL函数时,设置MKL的环境变量。
>./matrix
4> 设置多线程运行:在Intel MKL 10.0 使用OpenMP* 实现多线程。 OpenMP*程序可以通过环境变量 OMP_NUM_THREADS 去控制线程的数目。
> export OMP_NUM_THRADS=4 #设置程序的线程为 4
> ./matrix #DGEMM在执行的时候使用4个线程。
注意:在MKL 10.0 中, 如果OMP_NUM_THREADS没有定义,MKL函数可能会根据数据的大小,以及其他的变量来设置线程数目, 缺省时,可能运行多个线程运行。
源程序下载的URL:
http://download355.mediafire.com/p59lw9bldalg/g2shflsx1md/testcode.c