OpenVX

Khronos Group

Khronos Group是一个行业组织,创建开放标准以实现并行计算、图形、视觉、传感处理和动态媒体在各种平台和设备上的编写和加速。Khronos标准包括Vulkan, OpenGL, OpenGL ES, WebGL, OpenCL, SPIR, SYCL, WebCL, OpenVX, EGL, OpenMAX, OpenVG, OpenSL ES, StreamInput, COLLADA和glTF。

OpenSL:音频的硬件加速接口。

Vulkan:OpenGL的升级版本。在OpenGL中Context和单一线程是绑定的,所以所有需要作用于Context的操作,例如改变渲染状态,绑定Shader,调用Draw Call,都只能在单一线程上进行。Vulkan中不再需要依赖于绑定在某个线程上的Context,而是用全新的基于Queue的方式向GPU递交任务,并且提供多种Synchronization的组件让多线程编程更加亲民。

简单来说,Khronos的任务就是创建一个统一的硬件和软件之间的API,这样无论软件厂商,还是硬件厂商,都能各行其道,互不干扰了。

概述

官网:

https://www.khronos.org/openvx/

上图给出了OpenVX的主要用途,以及它和Khronos其他兄弟项目之间的关系。

OpenVX本身也是一个系列标准。它包括:

OpenVX:一个传统的CV接口。提供包括直方图、Harris、Canny等特征算子的API。

OpenVX SC(Safety Critical):安全版的OpenVX。

OpenVX NN Extension:专门用于提供NN加速方面的API。目前主要集中于CNN的加速,即卷积、池化等操作,对其他NN支持有限。此外,这些API主要用于预测,而非训练。

Khronos官方提供了一个OpenVX的软件参考实现,用于软硬件厂商的测试工作。

相关API文档和参考实现(sample code)参见:

https://www.khronos.org/registry/OpenVX/

Host & Device

和OpenGL类似,一般将CPU称作Host,而将GPU称作Device。App运行在Host上,而硬件加速由Device实现。

Device上的内存一般不能直接访问,需要使用vxCreateScalar、vxCreateTensor之类的API,将相关数据传到Device上。

类似的,有些API也分为Host版本和Device版本,前者用于Host和Device之间的数据交换,而后者用于Device内部数据的交换。

比如,vxCreateTensorAddressing和vxCreateTensorView,都是选择tensor的某一部分,前者是Host API,而后者是Device API。

数组的存储格式

和OpenGL一样,OpenVX中的tensor,也是列优先存储的。而C语言是行优先存储的。

行优先/列优先的概念参见:

http://blog.csdn.net/zhoxier/article/details/8058176

数组按行/列存储

OpenCL

官网:

https://www.khronos.org/opencl/

按照Michael J. Flynn的分类方法,计算机的体系结构可分为如下四类:

Single instruction stream single data stream (SISD)

Single instruction stream, multiple data streams (SIMD)

Multiple instruction streams, single data stream (MISD)

Multiple instruction streams, multiple data streams (MIMD)

原图地址:

https://en.wikipedia.org/wiki/Flynn's_taxonomy

CPU通常是SISD和SIMD的,而GPU则是MISD的,超级计算机则是MIMD的。

OpenCL是一个硬件中立标准,原则上和计算机的体系结构无关。当然现实中,我们主要使用GPU进行运算加速。

和OpenGL、OpenVX的专用性不同,OpenCL主要定位于通用数学运算。OpenGL年代久远也就罢了。对于像OpenVX这样的新标准,有的时候其内部实现也有可能依赖于OpenCL。毕竟无论哪个领域的专用计算,最终都可以分解为基本的数学运算。

简单来说,OpenVX的封装粒度在层一级,而OpenCL最多只提供到矩阵运算一级的API

术语:

Shared Virtual Memory,SVM

Memory consistency model

Multisample anti-aliasing,MSAA

参考:

http://blog.csdn.net/leonwei/article/details/8880012

从零开始学习OpenCL开发(一)架构

SYCL

SYCL是Khronos提供的基于OpenCL的C++接口层。

官网:

https://www.khronos.org/sycl

ComputeCpp

ComputeCpp是Codeplay公司提供的SYCL接口的实现。它除了支持OpenCL之外,还支持CUDA和C++AMP。

官网:

https://www.codeplay.com/products/computesuite/computecpp

OpenVG

OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。

官网:

https://www.khronos.org/openvg/

OpenVG和OpenGL 3D的差异:

1.OpenVG能实现的功能,OpenGL 3D都能实现,后者的功能要强大的多。

2.OpenGL 3D的基本图元是三角形,而OpenVG的基本图元是Path,也就是闭合曲线。通常来说,Path的顶点要远少于三角形。例如,绘制一个圆形,要用很多三角形拟合,但使用Path的话,用3段Bézier curve就可以表示了。

3.OpenVG支持物体任意缩放而不失真,而OpenGL 3D中的物体在大分辨率下会有锯齿。

上图是OpenVG的pipeline。

运算加速库

MKL

Intel Math Kernel Library是一套经过高度优化和广泛线程化的数学例程,专为需要极致性能的科学、工程及金融等领域的应用而设计。

官网:

https://software.intel.com/zh-cn/mkl

Neon

Neon是个大路货的名字,在数值计算领域ARM和Intel都有叫Neon的硬件或技术。

ARM的Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD扩展结构。它主要聚焦于矩阵运算,当然也可用于DL领域。

官网:

https://developer.arm.com/technologies/neon

Intel的Neon专为DL设计。

官网:

https://ai.intel.com/neon/

OpenACC

官网:

https://www.openacc.org/

PGI

PGI是由The Portland Group开发的并行计算库,但后者已于2013年被NVIDIA收购。

官网:

https://www.pgroup.com/

HSA

HSA (Heterogeneous System Architecture)是AMD推出的异构系统架构。

官网:

http://www.amd.com/zh-cn/innovations/software-technologies/hsa

NetLib

NetLib是一个数学方面的网站,收集了大量的数学软件和论文。官网:

http://www.netlib.org/

知名软件LAPACK(Linear Algebra PACKage)和BLAS (Basic Linear Algebra Subprograms)的官网就在NetLib:

http://www.netlib.org/lapack/index.html

http://www.netlib.org/blas/index.html

LAPACK和BLAS的历史非常悠久,是用Fortran语言编写的。

常用线性代数库

ATLAS(Automatically Tuned Linear Algebra Soft)

代码:

https://sourceforge.net/projects/math-atlas/

安装:

sudo apt-get install libatlas-base-dev

OpenBLAS

官网:

http://www.openblas.net/

代码:

https://github.com/xianyi/OpenBLAS

作者:张先轶,北京理工大学本硕(2005年、2007年)+中科院博士(2014年)。PerfXLab(澎峰科技)创始人。
个人主页:
http://xianyi.github.io/index_cn.htm

OpenBLAS需要gfortran参与编译:

sudo apt install gfortran

需要注意gcc的版本和gfortran的版本必须一致。例如,某台机器为了项目需要,没有使用ubuntu默认的gcc版本,这样即使安装了gfortran,也还是不行。最后,安装匹配的gfortran才解决了该问题。

NVIDIA

NVIDIA作为行业龙头,其影响力甚至在Khronos Group之上,它提出的标准很多成为了行业的事实标准。

最近(2018.2),公司副总M给我们讲座的时候,回顾他早年在NVIDIA的经历,当时他曾拥有数万股NV的股票,可惜早都卖了。这十几年来,NV股票经过5次分拆,当初的一股现在要值6500美元。他要不卖,现在可能已经是亿万富翁了。。。

术语

iGPU:Integrated Graphics Processing Unit。

dGPU:Discrete Graphics Processing Unit。

CUDA

CUDA是NVIDIA最早推出的通用数学运算库。除了基本的数学运算之外,还提供了一些工具包:

cuBLAS:线性计算库。

NVBLAS:多GPU版的cuBLAS。

cuFFT:FFT计算库。

nvGRAPH:图计算库。(这里的图是数学图论中的图,和DL框架中的计算图是两回事。)

cuRAND:随机数生成库。

cuSPARSE;稀疏矩阵计算库。

cuSOLVER:解线性方程的计算库。包括解稠密方程的cuSolverDN、解稀疏方程的cuSolverSP和矩阵分解的cuSolverRF。

Deep Learning SDK

cuDNN:DL计算库。

NCCL:多结点、多GPU的通信库。

TensorRT:嵌入式设备上专用于DL inference的计算库。

NVIDIA DIGITS:一款web应用工具,可在网页上对Caffe进行图形化操作和可视化。

参考:

https://mp.weixin.qq.com/s/v8-JHd5tWm41WLqR-h6eKA

使用TensorRT集成加速TensorFlow推理

NVDLA

NVIDIA Deep Learning Accelerator是一个开源的用于inference的芯片方案。官网:

http://nvdla.org/

NVIDIA DALI

NVIDIA DALI是一个GPU加速的数据增强和图像加载库,为优化深度学习框架数据pipeline而设计,而其中的NVIDIA nvJPEG是用于JPEG解码的高性能GPU加速库。

代码:

https://github.com/NVIDIA/dali

Tensor Core

https://mp.weixin.qq.com/s/pPjPLqgXZ8iCPS42vXJpuQ

NVIDIA Tensor Core深度学习核心解析

CUDA实战

安装:

http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

参考:

http://ishare.iask.sina.com.cn/f/17211495.html

深入浅出谈CUDA技术

http://peghoty.blog.163.com/blog/static/493464092013016113254852/

CUDA编程入门

http://blog.csdn.net/xsc_c/article/category/2186063

某人的并行计算专栏

http://tieba.baidu.com/p/2155772860

GPU和Shader技术的基础知识

http://www.cnblogs.com/geniusalex/archive/2008/12/26/1941766.html

CPU GPU设计工作原理

http://www.jianshu.com/p/8687a040eb48

GPU处理图像Shader的入门

https://mp.weixin.qq.com/s/bvNnzkOzGYYYewc3G9DOIw

GPU是如何优化运行机器学习算法的?

https://mp.weixin.qq.com/s/nAwxtOUi6HpIjVOREgEfaA

CUDA编程入门极简教程

https://mp.weixin.qq.com/s/-zdIWkuRZXhsLJmOZljOBw

CUDA编程精品教材分享《基于GPU-多核-集群等并行化编程》

CATIA

CATIA是法国达索公司的产品开发旗舰解决方案。作为PLM协同解决方案的一个重要组成部分,它可以通过建模帮助制造厂商设计他们未来的产品,并支持从项目前阶段、具体的设计、分析、模拟、组装到维护在内的全部工业设计流程。CATIA是GPU在工业上的一个重要的应用案例。

官网:

https://www.3ds.com/products-services/catia/

MLPerf

MLPerf是谷歌、百度、斯坦福等联手打造的基准测量工具,用于测量机器学习软件与硬件的执行速度。

它的到来代表着原本市场规模较为有限的AI性能比较方案正式踏上发展正轨。简而言之就是:以后各大公司发布的AI性能对比不能再王婆卖瓜自卖自夸了。

官网:

https://mlperf.org/

RDMA

RDMA网卡(Remote Direct Memory Access,这是一种硬件的网络技术,它使得计算机访问远程的内存时无需远程机器上CPU的干预)已经可以提供50~100Gbps的网络带宽和微秒级的传输延迟。

目前许多以深度学习为目标应用的GPU机群都部署了这样的网络。

参考:

https://mp.weixin.qq.com/s/_xcE8RUs0m4gwk3kxpe9jA

基于HTM/RDMA的可扩展内存事务处理系统

OpenVX, 运算加速库, NVIDIA相关推荐

  1. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  2. 障碍期权定价 python_Python王牌加速库2:深度学习下的障碍期权定价

    作者:Yi Dong 编译:1+1=6 1.前言 上一期推文中,我们使用了Numba和CuPy来运行蒙特卡罗模拟来确定亚式障碍期权的价格.Python王牌加速库:奇异期权定价的利器​mp.weixin ...

  3. python barrier option pricing_Python王牌加速库:深度学习下的障碍期权定价!

    蒙特卡罗模拟需要数以百万计的路径来得到精确的答案,这需要大量的计算.Ryan等人得研究表明,可以训练深度学习模型对衍生品进行估值.深度学习模型是准确和快速的,能够产生比传统模型快一百万倍的估值.在今天 ...

  4. python barrier option pricing_Python王牌加速库深度学习下的障碍期权定价

    Python王牌加速库深度学习下的障碍期权定价 Python王牌加速库:深度学习下的障碍期权定价! 蒙特卡罗模拟需要数以百万计的路径来得到精确的答案,这需要大量的计算.Ryan等人得研究表明,可以训练 ...

  5. GPU加速库AmgX

    GPU加速库AmgX AmgX提供了一条简单的途径来加速NVIDIA GPU上的核心求解器技术.AmgX可以为模拟的计算密集型线性求解器部分提供高达10倍的加速度,特别适合于隐式非结构化方法. 它是一 ...

  6. chrome 使用gpu 加速_DLI每周一课|用CUDA C的GPU加速库加速应用程序(新人有礼)

    课程名称:使用 CUDA C/C++ 中的 GPU 加速库加速应用程序 学习模式:随时随地在线自学,并在云端GPU服务器上进行实践练习 预备知识:"使用 CUDA C/C++ 加速应用程序& ...

  7. Ubuntu20.04 安装HPC_SDK加速库

    Ubuntu20.04 安装HPC_SDK加速库 1. NVIDIA HPC SDK 简介 2. 安装 3. OpenACC程序测试 参考 1. NVIDIA HPC SDK 简介 NVIDIA HP ...

  8. Python数据系列(四)- 数组array-NumPy:Python的“运算加速氮气”

    本系列要对Python在数据处理中经常用的列表(list).元组(tuple).字典(dictionary).array(数组)-numpy.DataFrame-pandas .集合(set)等数据形 ...

  9. 深度神经网络加速库cuDNN简介

    深度神经网络加速库cuDNN简介 简介 NVIDIA® CUDA深度神经网络库 (cuDNN: CUDA Deep Neural Network ) 是用于深度神经网络的 GPU 加速基元库.它提供了 ...

最新文章

  1. Java 必须掌握的 20+ 种 Spring 常用注解
  2. netty框架_Netty实战:设计一个IM框架
  3. Git的思想和基本工作原理
  4. Unity性能优化-遮挡剔除
  5. 【CodeForces - 1102C 】Doors Breaking and Repairing (思维,简单博弈)
  6. 解决BLOB/TEXT column can‘t have a default value query问题
  7. java 泛型参数写法_参数化类型——Java泛型
  8. python为什么叫爬虫-python为什么叫网络爬虫
  9. 调用iphone客户端进行授权发微博的方法--使用友盟组件
  10. 实用多媒体技术 课程习题及解答
  11. 如何下载微信视频号的视频?教你三种方法,一分钟轻松解决
  12. 朱生豪先生的情书 ---- 醒来觉得甚是爱你
  13. 学习HTML+CSS有感
  14. 基于thrift的匹配操作
  15. matlab计算轮廓曲率半径,【转】求最小曲率半径matlab源程序
  16. 大数据处理的基本思路
  17. 防抖和节流的理解与实现
  18. Android电池驱动
  19. 互联网时代养猪资源平台
  20. rust packed_simd库学习

热门文章

  1. 数据管理(八)--CD程序
  2. 基于php的地铁查询系统,HTML5 Canvas实现交互式地铁线路图
  3. “对技术没有好奇心”真的是很失败的一件事情
  4. Git简单基本操作指令集合
  5. ECMAScript 新提案:JSON模块
  6. Vue 前端导出后端返回的excel文件
  7. 逻辑短路 java_逻辑操作符中的短路现象
  8. 用python画图所需要的插件_用Python画图
  9. 大学计算机基础毕业论文操作步骤,大学计算机基础教学论文
  10. hdu 5384 Danganronpa(字典树)