英特尔Parallel Studio XE 在腾讯云上的实践:英特尔高性能数学核心计算库在腾讯云上的实践

  • 4 课时
  • 318 学过
  • 6 分
GPU 云服务器云计算

课程概述

本次课程将介绍英特尔数学核心计算库Intel Math Kernel Library(MKL),并指导用户如何使用Intel MKL来提升运用程序的性能。

【课程大纲】

1.英特尔数学核心计算库(MKL)简介

2.如何搭建MKL环境

3.如何使用MKL提高用户计算性能

4.实验结果及分析

机构简介

英特尔(Intel Corporation)

英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于1968年,拥有50余年推动技术创新和耕耘产业生态的成功经验。如今,英特尔正转型为一家以数据为中心的公司。英特尔的战略愿景聚焦于三个方面:一是致力于生产世界上最好的半导体芯片;二是引领人工智能与“自能”革命;三是做全球领先的端到端技术平台提供者。英特尔正与合作伙伴一起,共推人工智能、自动驾驶、 5G及物联网等领域的技术创新与应用突破,驱动智能互联世界,从而解决人类面临的重大挑战。 英特尔于1985年进入中国,是在华高科技领域最大的外国投资企业之一,协议总投入约130亿美元。中国是英特尔全球战略之重点,英特尔在中国拥有美国总部之外最为全面的业务部署,覆盖了前沿研究、产品技术开发、精尖制造、产业生态合作、市场营销、客户服务、风险投资和企业社会责任等。英特尔中国现有员工约9,500人。扎根中国三十四年,英特尔见证并深度参与了中国的改革开放,从浦东开发、西部开发到振兴东北等,英特尔一直跟随改革开放的步伐,积极带动区域经济发展,为高端制造持续注入新动力。 2014年12月,英特尔宣布在未来15年将为成都工厂投资16亿美元,首次引入英特尔最先进的高端测试技术( ATT),使成都工厂在原有的芯片封装与测试业务之外进一步升级为英特尔在美国境外唯一的ATT技术工厂;该技术已于2016年11月18日正式投产。 2015年10月,英特尔宣布投资55亿美元,将英特尔大连工厂升级为非易失性存储技术制造基地;该项目已经于2016年7月正式投产, 2017年发布了两款全新的基于3D NAND的数据中心级固态盘;其二期项目已经在2018年9月投产英特尔最先进的96层3D NAND产品。英特尔中国研究院是英特尔全球五大创新中枢之一,而英特尔亚太研发中心已发展成为英特尔在亚洲最大的综合性研发基地之一。 英特尔中国积极履行企业社会责任,涵盖了人才培养、员工关爱、多元化和包容、环境可持续、供应链建设、志愿服务等领域。英特尔连续20多年被教育部评为最佳合作伙伴。我们持续支持英特尔杯嵌入式大赛、英特尔杯软件创新大赛和人工智能人才培养等项目,开展丰富多彩的校园活动,每年都有上万名学生的直接参与,受益青少年数以十万计。英特尔中国员工在2018年参与志愿活动人数达8,636人,贡献志愿服务时间超过12万小时,参与比例为69%; 10年来累计志愿服务时间超过72 万小时。我们把公司运营与环境可持续发展协调并进,积极减少碳足迹;还和政府、产业链以及公益组织深入合作,共同推动绿色可持续发展。全球独立机构声望研究院发布的“中国最具声望的公司”( RepTrak? 100) 2018年百强排行榜中,英特尔荣登榜首。

讲义

使用Intel高性能数学核心计算库

课程目标

  • l了解英特尔高性能数学核心计算库(MKL)有哪些特点和优势
  • l掌握如何在腾讯云使用镜象工具轻松搭建集成了英特尔优化的高性能数学核心计算库开发环境
  • l掌握英特尔数学核心计算库的使用方法
  • l掌握使用MKL矩阵运算替换原始代码以实例的方式快速提高计算性能

目录

第一章 英特尔数学核心计算库(MKL)简介

第二章 如何搭建MKL开发环境

第三章 如何使用MKL提高用户计算性能

第四章 实验结果及分析

第一章 英特尔数学核心计算库(MKL)简介

数学核心库(MKL)简介

  • Intel MKL, 全称Intel Math Kernel Library
  • 提供经过高度优化的数学程序库
  • 满足需要极致性能的科学、工程及金融等领域的应用而设计
  • 为当前及下一代英特尔处理器提供性能优化
  • 支持主流的操作系统(Windows, Linux, Mac OS等)
  • 与主流的开发工具(Microsoft Visual Studio, Eclipse等)相集成,调试简便
  • 最小的付出获取极速的性能提升

提供的数学运算

通过提供高度优化,线程化和向量化的数学函数,加快科学,工程,金融和机器学习应用程序的计算速度

提供用于密集和稀疏线性代数(BLAS,LAPACK,PARDISO),FFT,矢量数学,摘要统计,样条曲线等的关键功能

自动为每个处理器分配优化的代码,而无需分支代码

针对单核向量化和缓存利用率进行了优化

多核和多核自动并行化

从单核运算扩展到集群函数

Automatic-Dispatching

自动调度特定于ISA的代码路径以获得最佳的调优性能

性能数据

数学核心库(MKL)分类

  • 线性运算
  • 傅里叶变化
  • 向量化随机数
  • 统计相关函数
  • 向量化基本函数
  • 其它

英特尔®MKL BLAS(基本线性代数包)

参考实现 http://netlib.org/blas/

英特尔®MKL快速傅立叶变换(FFT)

  • 自动并行化避免数据冲突
  • 批量处理

英特尔®MKL矢量运算

Intel® MKL 稀疏分解器

数学核心库(MKL)丰富资源

资源

网址

Intel® MKL Website

https://software.intel.com/en-us/intel-mkl

Intel® MKL Forum

https://software.intel.com/en-us/forums/intel-math-kernel-library

Intel® MKL Benchmarks

https://software.intel.com/en-us/intel-mkl/benchmarks#

Intel®MKL Link Line Advisor

http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/

第二章 如何搭建MKL开发环境

步骤

  1. 在云上使用MKL
  2. 找到镜像
  3. 完成服务器配置
  4. 确认配置信息开通

使用腾讯云服务器

在镜像市场中找到 Intel Parallel Studio境像

选择镜像后完成服务器配置

第三章 如何使用MKL提高用户计算性能

典型矩阵运算C=alpha*A*B+beta*C

本示例衡量了计算实矩阵乘积的性能

使用三重嵌套循环的C = alpha * A * B + beta * C,其中A,B和C是矩阵,而alpha和beta是双精度标量。

在这个简单的示例中,省略了良好的编程风格和较高的Intel®MKL性能所必需的诸如内存管理,数据对齐和I / O之类的操作,以提高可读性。

C 原始代码

当alpha=1, beta=0时:

for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            sum = 0.0;
            for (k = 0; k < p; k++)
                sum += A[p*i+k] * B[n*k+j];
            C[n*i+j] = sum;
        }
    }

三个for循环进行的操作,使用MKL函数dgemm进行直接替换

#include "mkl.h"

/* Computing real matrix C=alpha*A*B+beta*C, where A, B, and C 
     are matrices and alpha and beta are double precision scalars */

// Step 1: Allocate memory for Matrix aligned on 64-byte boundary
double *C = (double *)mkl_malloc( m*n*sizeof( double ), 64 );

// Step 2: Perform C=alpha*A*B+beta*C by calling cblas_dgemm
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 
                m, n, p, alpha, A, p, B, n, beta, C, n);

// Step 3: Free allocated memory
mkl_free(C);

第四章 实验、结果及分析

实验目标

为矩阵A,B,C分配内存

初始化输入矩阵A(2000 x 200)和B(200 x 1000)

计算矩阵C=矩阵A乘矩阵B

输出矩阵运算耗时

实验所需要的软件包

Intel编译器或GCC

Intel数学核心库(MKL)

如果采用MKL镜像生成实例则上述软件包已经装配好了

实验原代码目录及文件

/home/ubuntu/mkl example/demo matrix multiply.c 和 matrix_multiply_mkl.c

编译及运行

1. source

source /opt/intel/compilers and libraries 2019.4.243/linux/bin/compilervars.sh intel64

2.cd到路径/home/ubuntu/mkl example/demo并编译

make libintel64 compiler=gnu function=matrix_multiply

make libintel64 compiler=gnu function=matrix_multiply_mkl

3.运行

results/gnu_lp64_parallel _intel64_lib/matrix multiply.out

results/gnu_lp64 parallel intel64_lib/matrix multiply_mkl.out

结果及分析

原始计算性能

290.81466 milliseconds

MKL优化后计算性能

28.82696 milliseconds

课程评价(0)

感谢你参加本课程,请你作出评价:
0/300

以下选自学员评价

暂无精选评价