英特尔数学核心函数库(Intel Math Kernel Library,MKL)是一套经过高度优化和广泛线程化的数学例程,专为需要极致性能的科学、工程及金融等领域的应用而设计。核心数学函数包括BLAS、LAPACK、ScaLAPACK1、稀疏矩阵解算器、快速傅立叶转换、矢量数学及其它函数。其可以为英特尔处理器提供性能优化,并且更出色地与 Microsoft Visual Studio相集成。Intel MKL是一套经过高度优化和线程化的函数库,并提供了C和Fortran接口。
使用矩阵乘法(cblas_cgemm)为例来对比不同环境与配置的性能差距。
#include<stdio.h>#include<stdlib.h>#include"mkl.h" // 调用mkl头文件#define min(x,y) (((x) < (y)) ? (x) : (y))
讯享网
讯享网double* A, * B, * C; //声明三个矩阵变量,并分配内存int m, n, k, i, j; //声明矩阵的维度,其中double alpha, beta; m = 2000, k = 200, n = 1000; alpha = 1.0; beta = 0.0; A = (double*)mkl_malloc(m * k * sizeof(double), 64); //按照矩阵维度分配内存 B = (double*)mkl_malloc(k * n * sizeof(double), 64); //mkl_malloc用法与malloc相似,64表示64位 C = (double*)mkl_malloc(m * n * sizeof(double), 64); if (A == NULL || B == NULL || C == NULL) { //判空 mkl_free(A); mkl_free(B); mkl_free(C); return1; } for (i = 0; i < (m * k); i++) { //赋值 A[i] = (double)(i + 1); } for (i = 0; i < (k * n); i++) { B[i] = (double)(-i - 1); } for (i = 0; i < (m * n); i++) { C[i] = 0.0; }
先定义出待乘矩阵AA和BB,拟执行C=A∗BC=A∗B。其中CC矩阵为全0,AA和BB矩阵设置为:
A=⎡⎣⎢⎢⎢⎢⎢1.01001.0⋮.02.01002.0⋮.0⋯⋯⋱⋯1000.02000.0⋯.0⎤⎦⎥⎥⎥⎥⎥ B=⎡⎣⎢⎢⎢⎢⎢−1.0−1001.0⋮−.0−2.0−1002.0⋮−.0⋯⋯⋱⋯−1000.0−2000.0⋯−.0⎤⎦⎥⎥⎥⎥⎥A=[1.02.0⋯1000.01001.01002.0⋯2000.0⋮⋮⋱⋯.0.0⋯.0] B=[−1.0−2.0⋯−1000.0−1001.0−1002.0⋯−2000.0⋮⋮⋱⋯−.0−.0⋯−.0]
1 对比普通CPU与MKL库性能差距
1.1 使用dgemm(Sequential 串行)
printf (" Making the first run of matrix product using Intel(R) MKL dgemm function \n"" via CBLAS interface to get stable run time measurements \n\n"); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, p, alpha, A, p, B, n, beta, C, n); printf (" Measuring performance of matrix product using Intel(R) MKL dgemm function \n"" via CBLAS interface \n\n"); s_initial = dsecnd(); for (r = 0; r < LOOP_COUNT; r++) { cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, p, alpha, A, p, B, n, beta, C, n); } s_elapsed = (dsecnd() - s_initial) / LOOP_COUNT; printf (" == Matrix multiplication using Intel(R) MKL dgemm completed == \n"" == at %.5f milliseconds == \n\n", (s_elapsed * 1000));
输出为:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/21253.html