OpenVX, 运算加速库, NVIDIA
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相关推荐
- CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)
1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...
- 障碍期权定价 python_Python王牌加速库2:深度学习下的障碍期权定价
作者:Yi Dong 编译:1+1=6 1.前言 上一期推文中,我们使用了Numba和CuPy来运行蒙特卡罗模拟来确定亚式障碍期权的价格.Python王牌加速库:奇异期权定价的利器mp.weixin ...
- python barrier option pricing_Python王牌加速库:深度学习下的障碍期权定价!
蒙特卡罗模拟需要数以百万计的路径来得到精确的答案,这需要大量的计算.Ryan等人得研究表明,可以训练深度学习模型对衍生品进行估值.深度学习模型是准确和快速的,能够产生比传统模型快一百万倍的估值.在今天 ...
- python barrier option pricing_Python王牌加速库深度学习下的障碍期权定价
Python王牌加速库深度学习下的障碍期权定价 Python王牌加速库:深度学习下的障碍期权定价! 蒙特卡罗模拟需要数以百万计的路径来得到精确的答案,这需要大量的计算.Ryan等人得研究表明,可以训练 ...
- GPU加速库AmgX
GPU加速库AmgX AmgX提供了一条简单的途径来加速NVIDIA GPU上的核心求解器技术.AmgX可以为模拟的计算密集型线性求解器部分提供高达10倍的加速度,特别适合于隐式非结构化方法. 它是一 ...
- chrome 使用gpu 加速_DLI每周一课|用CUDA C的GPU加速库加速应用程序(新人有礼)
课程名称:使用 CUDA C/C++ 中的 GPU 加速库加速应用程序 学习模式:随时随地在线自学,并在云端GPU服务器上进行实践练习 预备知识:"使用 CUDA C/C++ 加速应用程序& ...
- Ubuntu20.04 安装HPC_SDK加速库
Ubuntu20.04 安装HPC_SDK加速库 1. NVIDIA HPC SDK 简介 2. 安装 3. OpenACC程序测试 参考 1. NVIDIA HPC SDK 简介 NVIDIA HP ...
- Python数据系列(四)- 数组array-NumPy:Python的“运算加速氮气”
本系列要对Python在数据处理中经常用的列表(list).元组(tuple).字典(dictionary).array(数组)-numpy.DataFrame-pandas .集合(set)等数据形 ...
- 深度神经网络加速库cuDNN简介
深度神经网络加速库cuDNN简介 简介 NVIDIA® CUDA深度神经网络库 (cuDNN: CUDA Deep Neural Network ) 是用于深度神经网络的 GPU 加速基元库.它提供了 ...
最新文章
- Java 必须掌握的 20+ 种 Spring 常用注解
- netty框架_Netty实战:设计一个IM框架
- Git的思想和基本工作原理
- Unity性能优化-遮挡剔除
- 【CodeForces - 1102C 】Doors Breaking and Repairing (思维,简单博弈)
- 解决BLOB/TEXT column can‘t have a default value query问题
- java 泛型参数写法_参数化类型——Java泛型
- python为什么叫爬虫-python为什么叫网络爬虫
- 调用iphone客户端进行授权发微博的方法--使用友盟组件
- 实用多媒体技术 课程习题及解答
- 如何下载微信视频号的视频?教你三种方法,一分钟轻松解决
- 朱生豪先生的情书 ---- 醒来觉得甚是爱你
- 学习HTML+CSS有感
- 基于thrift的匹配操作
- matlab计算轮廓曲率半径,【转】求最小曲率半径matlab源程序
- 大数据处理的基本思路
- 防抖和节流的理解与实现
- Android电池驱动
- 互联网时代养猪资源平台
- rust packed_simd库学习