MKL——常用函数说明

2023-11-08

Intel MKL,全称 Intel Math Kernel Library,提供经过高度优化和大量线程化处理的数学例程,面向性能要求极高的科学、工程及金融等领域的应用。MKL是一款商用函数库,提供C、Fortran 和 Fortran 95的支持,但仅支持Intel自家旗下的CPU。

在Intel CPU上,MKL的性能要远高于Eigen, 虽然OpenBLAS和其差距不是太大,但OpenBLAS提供的函数太少。

下面,简单介绍一些C环境下常用的MKL矩阵运算函数。主要使用单精度浮点数据操作

字符关键字

数据类型关键字:

s: real, single precision,实数单精度

c: complex, single precision,复数单精度

d: real, double precision,实数双精度

z: complex, double precision,复数双精度

常用矩阵类型关键字:

ge: general matrix,一般矩阵

gb: general band matrix,一般带状矩阵

sy: symmetric matrix,对称矩阵
sp: symmetric matrix (packed storage)
sb: symmetric band matrix

tr: triangular matrix,三角阵
tp: triangular matrix (packed storage)
tb: triangular band matrix.

常用操作类型关键字:

mv: matrix-vector product,矩阵向量乘积

sv: solving a system of linear equations with a single unknown vector

mm: matrix-matrix product,矩阵矩阵乘积

sm: solving a system of linear equations with multiple unknown vectors

举例说明:

cblas_sgemm :

s: 单精度浮点数;
ge: 一般矩阵;
mm: 矩阵矩阵乘法;

全局枚举变量定义

列出几个最常用到的,MKL已经定义的枚举变量类型:

//行主序 or 列主序
enum CBLAS_LAYOUT {
CblasRowMajor=101, /* row-major arrays */
CblasColMajor=102}; /* column-major arrays */

// 不转置 or 转置 or 共轭
enum CBLAS_TRANSPOSE {
CblasNoTrans=111, /* trans='N' */
CblasTrans=112, /* trans='T' */
CblasConjTrans=113}; /* trans='C' */

矩阵矩阵乘法

头文件:mkl.h

函数实现功能: C := alpha*op(A)*op(B) + beta*C

参数维度说明: alpha 和 beta为标量,A为矩阵(m*k),B为矩阵(k*n),C为矩阵(m*n)

函数接口:

void cblas_sgemm (const CBLAS_LAYOUT Layout, 
                  const CBLAS_TRANSPOSE transa, 
                  const CBLAS_TRANSPOSE transb, 
                  const MKL_INT m, 
                  const MKL_INT n, 
                  const MKL_INT k, 
                  const float alpha, 
                  const float *a, 
                  const MKL_INT lda, 
                  const float *b, 
                  const MKL_INT ldb, 
                  const float beta, 
                  float *c, 
                  const MKL_INT ldc);

参数说明:

const CBLAS_LAYOUT Layout: 矩阵主序,默认行主序CblasRowMajor
const CBLAS_TRANSPOSE transa:矩阵A是否转置,op(A),默认不转置CblasNoTrans
const CBLAS_TRANSPOSE transb:矩阵B是否转置,op(B),默认不转置CblasNoTrans 

const MKL_INT m:A的行数
const MKL_INT n:B的列数
const MKL_INT k:A的列数,即A*B ~ (m*k) * (k*n)

const float alpha: 乘法系数
const float *a: 矩阵A的内存地址
const MKL_INT lda:A不转置,则为A的列数;否则为A的行数

const float *b: 矩阵B的内存地址
const MKL_INT ldb:B不转置,则为B的列数;否则为B的行数

const float beta: 乘法系数 
float *c: 矩阵C的内存地址 
const MKL_INT ldc):C的列数,显然列数为n

矩阵向量乘法

头文件:mkl.h

函数实现功能: y := alpha*op(A)*x + beta*y

参数维度说明: alpha 和 beta为标量,A为矩阵(m*n),x和y为向量(n*1)

函数接口:

void cblas_sgemv (const CBLAS_LAYOUT Layout, 
                  const CBLAS_TRANSPOSE trans, 
                  const MKL_INT m, 
                  const MKL_INT n, 
                  const float alpha, 
                  const float *a, 
                  const MKL_INT lda, 
                  const float *x, 
                  const MKL_INT incx, 
                  const float beta, 
                  float *y, 
                  const MKL_INT incy);

参数说明:

const CBLAS_LAYOUT Layout:矩阵A主序设置,默认行主序CblasRowMajor
const CBLAS_TRANSPOSE trans:矩阵A是否转置,op(A),默认不转置CblasNoTrans
const MKL_INT m:A的行数
const MKL_INT n:B的列数 

const float alpha: 乘法系数
const float *a: 矩阵A的内存地址
const MKL_INT lda:A不转置,则为A的列数;否则为A的行数

const float *x:矢量x的内存地址
const MKL_INT incx: 矢量x的取样间隔,该值必须大于0,常设为1 

const float beta, 
float *y:矢量y的内存地址 
const MKL_INT incy: 矢量y的取样间隔,该值必须大于0,常设为1 

向量乘法1

头文件:mkl.h

函数实现功能: y := a*x + b*y

参数维度说明: a和 b为标量,x和y为向量(n*1)

函数接口:

void cblas_saxpby (const MKL_INT n, 
                   const float a, 
                   const float *x, 
                   const MKL_INT incx,
                   const float b, 
                   float *y, 
                   const MKL_INT incy);

参数说明:

const MKL_INT n:向量元素个数
const float a, 
const float *x, 
const float *x:矢量x的内存地址
const MKL_INT incx: 矢量x的取样间隔,该值必须大于0,常设为1 
const float b:
float *y:矢量y的内存地址 
const MKL_INT incy: 矢量y的取样间隔,该值必须大于0,常设为1 

向量乘法2

头文件:mkl.h

函数实现功能: y := a*x + y

参数维度说明: a标量,x和y为向量(n*1)

函数接口:

void cblas_saxpby (const MKL_INT n, 
                   const float a, 
                   const float *x, 
                   const MKL_INT incx,
                   float *y, 
                   const MKL_INT incy);

参数说明:请参照向量乘法1。

向量元素加减乘除

头文件:mkl.h

函数实现功能: y[i] = a[i] {+ - * /} b[i]

参数维度说明: a、b和y为向量(n*1)

函数接口:

void vsAdd( const MKL_INT n, 
           const float*a, 
           const float*a,
           float*y );

减法则为:

void vsSub( const MKL_INT n, const float*a,const float*b,float*y );

乘法则为:

void vsMul( const MKL_INT n, const float*a,const float*b,float*y );

除法则为:

void vsDiv( const MKL_INT n, const float*a,const float*b,float*y );

向量scale运算

头文件:mkl.h

函数实现功能: x = a*x

参数维度说明: a为标量,x为向量(n*1)

函数接口:

void cblas_sscal (const MKL_INT n, 
                  const float a, 
                  float *x, 
                  const MKL_INT incx);

数据copy

头文件:mkl.h

函数实现功能: y = x

参数维度说明: x和y为向量(n*1)(矩阵也可以看做向量)

函数接口:

void cblas_saxpby (const MKL_INT n, 
                   const float *x, 
                   const MKL_INT incx,
                   float *y, 
                   const MKL_INT incy);

参数说明:请参照向量乘法1。

指数运算

头文件:mkl.h

函数实现功能: y = exp(x)

参数维度说明: x和y为向量(n*1)(矩阵也可以看做向量)

函数接口:

vsExp( const MKL_INT n,
       const float*a, 
       float*y );

关于特殊值的运算说明:

具体参照下表:

EXP

求和运算

头文件:mkl.h

函数实现功能: \(y = \sum{x}\)

参数维度说明: x和y为向量(n*1)(矩阵也可以看做向量)

函数接口:

float cblas_sasum (const MKL_INT n, 
                   const float *x, 
                   const MKL_INT incx);

参数说明:

const MKL_INT n: 向量中元素个数
const float *x: 向量在内存中的地址
const MKL_INT incx : 矢量x的取样间隔,该值必须大于0,常设为1 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MKL——常用函数说明 的相关文章

  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】计算最大乘积

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 计算最大乘积 知识点字符串位运算 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素 长度乘积的最大值 如果
  • GAN网络系列博客(一):用于人脸生成的StyleGAN结构

    目录 简介 基于风格的生成器 生成器的性质 总结 Reference 在未来的一段时间 我会开一个小专题 来介绍下GAN网络的一些经典论文 希望对那些想要入坑的同学提供一点点帮助 考虑到StyleGAN系列论文在相关领域的影响力 我们首先来
  • QT 多线程实现方式

    前因 当调用QApplication exec 时 就启动了QT的事件循环 在开始的时候QT会发出一些事件命令来显示和绘制窗口部件 在这之后 事件循环就开始运行 它不断检查是否有事件发生并且把这些事件发生给应用程序的QObject 当处理一
  • 微信小程序使用van-tabs组件,ios真机z-index层级错乱问题【已解决,ios自定义组件层级不穿透】

    一 这是模拟器上的效果 二 这是苹果11真机上的效果 安卓真机正常 三 先来理一下代码的层级现状 A 为van tabs B 是自定义组件 为数据列表 C为单个数据 D 也是自定义组件 图中省略 为单个数据详情弹窗 且D是B的子组件 在z
  • 题目0158-快递业务站

    快递业务站 题目描述 快递业务范围有 N 个站点 A 站点与 B 站点可以中转快递 则认为 A B 站可达 如果 A B 可达 B C 可达 则 A C 可达 现在给 N 个站点编号 0 1 n 1 用 s i j 表示 i j 是否可达
  • 信任的机制——区块链

    区块链是一个从顶向下实现的一项技术 是可以设计 可以编程的 区块链是一个信任的机器 是在完全不信任的节点之间建立信任机制的技术 是利用互联网传递价值的一种价值网络 这是一个把时间当朋友的技术 区块链在应用的过程中通过自身的设计 解决的问题
  • SAX解析xml

    第一步 创建xml
  • 【死磕 Java 基础】 — 你以为异常就是 try…catch ?那你天真了

    大家好 我是大明哥 个人网站 https www cmsblogs com 前言 我敢说对于很多小伙伴来说 他们以为在 Java 中异常就是 try catch 稍微有点儿意识的还会用下 throw new Exception 真的有这么简
  • osg的ref_ptr和observer_ptr

    ref ptr就是所谓的强指针类型 observer ptr是所谓的弱指针类型 需要注意的是他们都是类 而不是指针 只不过他们用于管理指针 1 如何实现自动内存管理 所谓自动内存管理就是只管对象或指针的创建和使用而不管销毁 实现自动内存管理
  • 关于ORACLE清理表空间总结

    1 查看索引和表的初始大小 SELECT bytes 1024 1024 M TABLE SIZE u FROM dba SEGMENTS U WHERE U owner IN CLEAR TRADE INTERFACE SECURITY
  • 【THOI 2012】 水位

    A1363 水位 思路题 做这道题的时候如果思路清晰的话 就是一道简单的乘法原理 高精度题 按照原始高度升序排序 最开始 所有点各自属于一个连通块 按照高度顺序 从最低的开始合并连通块 假设当前处理到 l r l r这个区间 他们的高度都是
  • Unity实现用WASD控制一个物体前后左右移动-小白课程01

    1 根据业务逻辑搭建场景 02 根据业务写代码 using System Collections using System Collections Generic using UnityEngine 实现让被挂在的物体往前移动 按下W键往前
  • git submodule的使用

    开发过程中 经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用 而公共代码库的版本管理是个麻烦的事情 今天无意中发现了git的git submodule命令 之前的问题迎刃而解了 添加 为当前工程添加submodule
  • FasterRCNN详解

    FasterRCNN详解 1 2 2 FasterRCNN 1 模型 1 1 主干网络VGG16 or ResNet50 1 2 RPN生成建议框 1 3 RCNN进行分类和回归 2 预测 2 1 预测流程 3 训练 3 1 训练流程 3
  • 多目标跟踪:SORT和Deep SORT

    https zhuanlan zhihu com p 59148865 多目标跟踪 即Multiple Object Tracking MOT 主要任务中是给定一个图像序列 找到图像序列中运动的物体 并将不同帧的运动物体进行识别 也就是给定
  • let和const与var的区别

    目录 一 定义 二 let 三 const 四 代码演示 四 循环中let和var声明的循环变量的区别 4 1 事件的绑定 4 2 循环变量存储的数据数值 4 2 1 var声明的循环变量 4 2 2 let声明的循环变量 一 定义 let
  • 快速排序C++(极简)

    原理建议去B站看视频 注意 注意 注意 刚开始移动的顺序真的很重要 可以试试顺序换一下 整个代码就出问题了 我试过的 第11和12行 代码如下 从小到大 为例 include
  • 操作系统-内存管理

    内存的基础知识 内存可存放数据 程序执行前需要先放到内存中才能被CPU处理 缓和CPU与硬盘之间的速度矛盾 如何区分各个程序的数据是放在什么地方 给内存的存储单元编地址 内存地址从0开始 每个地址对应一个存储单元 装入的三种方式 绝对装入
  • 海康威视测试实习生面试经历

    时间 2018 4 25 地点 海康威视二期 面试岗位 测试实习生 面试结果 通过 背景 大三 通信工程 自学了JAVA 还没学到框架 还是前一天看了一点测试的基础知识就去面试了 面试时间好久 技术面半小时 HR面半小时 技术面 面试官一男

随机推荐

  • 2PC(两阶段提交)方案

    XA方案 2PC的传统方案是在数据库层面实现的 如Oracle MySQL都支持2PC协议 为了统一标准减少行业内不必要的对接成本 需要制定标准化的处理模型及接口标准 国际开放标准组织Open Group定义了分布式事务处理模型DTP Di
  • 微信小程序(初学篇)——仿美团外卖

    初识小程序 为它的小巧玲珑所吸引 不由得心血来潮 这不正是用户所需要的吗 既方便快捷 又不占手机内存 所以我下定决心一定要做出一个自己的小程序 然后赚钱 赚钱 赚钱 当然现在只是学习阶段 所以先仿一个高端产品来挑战自我吧 说到高端 自然然而
  • android定位webview元素,appium— Android定位webView里面的UI元素

    Android SDK中的UIAutomator中本身是不支持网页中的UI元素定位 下面介绍几种常用的定位app内部的网页的UI元素的方法 一 使用chrome浏览器调试移动端网页 这是使用最多的一种方法 首页确保自己的手机已经跟电脑连接且
  • list 的forEach 方法 使用lambda 和“”::”关键字

    你是否会疑惑 list 遍历的时候 就这么一行是怎么做到的如此神奇 List
  • 4、Navicat 安装和使用

    一 Navicat 基本介绍 Navicat 是一款图形化 MySQL 管理软件 Navicat 的功能足以满足专业开发人员的所有需求 但是对数据库服务器初学者来说又简单易操作 Navicat 的用户界面 GUI 设计良好 让你以安全且简单
  • Idea 打开 RunDashboard (完整)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net sheinenggaosuwo article details 86624759 Ho
  • (详细图解)通过VMware安装centOS系统并进行开机配置(小白版)

    一 VMware的版本及选择 VMware ESX Server ESX本身为一操作系统 不需要宿主操作系统 它本身就是一个操作系统 用来管理硬件资源 所有的系统都安装在它的上面 带有远程web管理和客户端管理功能 VMware GSX S
  • 最近用了一个免费的服务器

    最近看到一个免费的服务器阿贝云 声称是永久免费使用的 有免费虚拟主机 也有免费的云服务器 带宽也不错 下载基本峰值能达到10M s
  • Android学习之完整的注册登录Demo(APP端+服务器端)

    因比赛或者项目需要 写了几个小打小闹的APP 有的处于 单机 状态 有的处于 半联网 状态 觉得学习有点操之过急 所以先缓一缓 梳理一下之前所学的知识 将之前做的一些小玩意儿 整理出来写成博客 第一篇便是大部分APP都具有的注册登录系统 代
  • 15款最好用的思维导图(心智图 )工具

    原文地址 http www linuxidc com Linux 2015 01 111807 htm 思维导图也叫心智图 是一项流行的全脑式学习方法 用来表示词 思路 任务或其他与围绕着一个中央关键词或想法项目的示意图 通过径向 图形和非
  • 【控制】基于PID实现水箱控制系统matlab代码

    1 内容介绍 计算机控制技术 课程是电气信息类专业的主干课程之一 实验教学是该课程教学的重要组成部分 本实验项目以水箱液位为控制参量 设计了包括系统硬件 基于Matlab的控制界面 PID控制程序等内容的 计算机控制技术 实验方案 通过教学
  • 二叉树:总结篇(需要掌握的二叉树技能都在这里了)

    二叉树 总结篇 需要掌握的二叉树技能都在这里了 二叉树的理论基础 二叉树的遍历方式 1 深度优先遍历 2 广度优先遍历 求二叉树的属性 1 是否对称 2 求最大深度 3 求最小深度 4 求有多少个节点 5 是否平衡 6 找所有路径 7 递归
  • 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution def init self self stack sel
  • ant.design的input框同时绑定onBlur和onPressEnter事件且方法为同一个方法后的结果

    ant design的input框同时绑定onBlur和onPressEnter事件且方法为同一个方法后的结果 前几天在做项目时碰到了这么一件事 就是在input上面同时绑定onBlur事件和onPressEnter 而且这两个事件还同时使
  • Python爬虫实战案例——第二例

    某某美剧剧集下载 从搜索片名开始 本篇文章主要是为大家提供某些电影网站的较常规的下载电影的分析思路与代码思路 通过爬虫下载电影 我们会从搜索某部影片的关键字开始直到成功下载某一部电影 地址 aHR0cHM6Ly93d3cuOTltZWlqd
  • esp32 SPIFFS的使用

    读取方法 include FS h include SPIFFS h include AutoFile h void File Init SPIFFS begin true 挂载 时间较长 void contentWrite String
  • 目标检测 - 主流算法介绍 - 从RCNN到DETR

    目标检测是计算机视觉的一个非常重要的核心方向 它的主要任务目标定位和目标分类 在深度学习介入该领域之前 传统的目标检测思路包括区域选择 手动特征提取 分类器分类 由于手动提取特征的方法往往很难满足目标的多样化特征 传统方法始终没能很好的解决
  • Inno Setup 添加管理员权限

    1 在 Setup 节点添加 PrivilegesRequired admin 2 在Inno Setup的安装目录下有个SetupLdr e32文件 用exescope打开 然后在十六进制区域编辑 在右边ASCII显示区域无法编辑 修改到
  • 关于新版vscode的ul>li*3等,不提示快捷方式解决方法

    到文件首选项的设置里搜索emmet 然后找到Emmet Use Inline Completions 勾选上就可以了 快捷方式 如ul gt li 3 加上tab键 注意按enter键无效
  • MKL——常用函数说明

    Intel MKL 全称 Intel Math Kernel Library 提供经过高度优化和大量线程化处理的数学例程 面向性能要求极高的科学 工程及金融等领域的应用 MKL是一款商用函数库 提供C Fortran 和 Fortran 9