将Tensor核心引入标准Fortran
调优的数学库是从HPC系统提取最终性能的一种简单而可靠的方法。但是,对于寿命长的应用程序或需要在各种平台上运行的应用程序,为每个供应商或库版本调整库调用可能是维护的噩梦。
可以自动生成对调优数学库的调用的编译器为提供了两全其美的优势:易于移植和终极性能。在本文中,将展示如何在GPU上无缝加速许多标准Fortran数组内在函数和语言构造。nvfortran编译器通过将Fortran语句映射到NVIDIA cuTENSOR库中的可用功能来自动启用此加速,该库是NVIDIA cuTENSOR的先河,提供GPU加速的张量线性代数库,提供张量收缩,缩小和逐元素运算。
轻松过渡到NVIDIA GPU
以下是标准Fortran数组内在函数如何映射到GPU加速的数学库。在最简单的级别上,只需要两个Fortran语句即可利用cuTENSOR库提供的出色性能:
使用cutensorex

c = matmul(a,b)
使用cutensorex预定义模块的第一条语句以重载的Fortran内在过程,数组表达式和重载的赋值形式包含cuTENSOR库的接口。编写接口以仅映射位于GPU设备内存中的阵列。在本文的稍后部分,将从OpenACC和CUDA Fortran程序员的角度讨论这意味着什么。定义了这些接口后,包含matmul()内部调用的第二条语句将自动映射到cuTENSOR函数调用。
这些接口通过识别并匹配可以映射到单个cuTENSOR内核调用的几种常用模式来实现延迟执行。在所有情况下,都将调用多个cuTENSOR函数来设置cuTENSOR所需的句柄,描述符数据结构和工作缓冲区。
但是,只有一个内核被启动到GPU。出于性能考虑,将整个语句(包括分配给左侧数组)映射起来很重要。不希望编译器为右侧操作的输入或结果(中间或最终)创建Fortran中常见的临时数组。
支持的标准Fortran操作
cuTENSOR库包含常规的排列和收缩操作。置换的结果可以可选地通过元素函数来操作,并且可选地缩放。
nvfortran编译器可以识别和映射与通用数组语法结合使用的各种Fortran转换内在函数和基本内在函数,并将其映射到cuTENSOR功能。一些更直接的翻译包括:
d =转置(a)
d =函数(transpose(a))
d = alpha * func(转置(a)

d =重塑(a,shape = […])
d =重塑(a,shape = […],order = […])
d =函数(reshape(a,…))
d = alpha * func(reshape(a,…))

d =点差(a,dim = k,ncopies = n)
d =函数(spread(a,dim = k,ncopies = n))
d = alpha * func(spread(a,dim = k,ncopies = n))
matmul()也可以在cuTENSOR中排列to的输入,并且可以缩放和累加结果。这导致几种可能的组合,例如以下语句:
c = matmul(a,b)
c = c + matmul(a,b)
c = c-matmul(a,b)
c = c + alpha * matmul(a,b)
d = alpha * matmul(a,b)+ beta * c

c = matmul(转置(a),b)
c = matmul(reshape(a,shape = […],order = […]),b)
c = matmul(a,转置(b))
c = matmul(a,reshape(b,shape = […],order = […]))
使用标准Fortran中的NVIDIA Tensor Core
当使用cutensorex模块中包含的用于随机数生成的功能时,利用cuTENSOR和NVIDIA Tensor Core就像下面的代码示例一样容易:
程序主体
使用cutensorex
整数,参数:: ni = 5120,nj = 5120,nk = 5120,ntimes = 10
实数(8),可分配,尺寸(:,

将Tensor核心引入标准Fortran相关推荐

  1. A100 Tensor核心可加速HPC

    A100 Tensor核心可加速HPC HPC应用程序的性能需求正在迅速增长.众多科学研究领域的许多应用程序都依赖于双精度(FP64)计算. 为了满足HPC计算快速增长的计算需求,A100 GPU支持 ...

  2. enum 有什么好处_高新技术企业认定四个核心评分标准是什么?软著能加分吗?...

    怎么快速申请软著下证?软件著作权申请需要多长时间?软件著作权对企业有什么作用?软著去哪里申请登记?提交材料后多久可以下证?大学生个人申请软著难吗?考研软著能加学分吗?软著的有效期是多长时间?评职称软著 ...

  3. CSS核心内容-标准流、盒子模型、浮动、定位

    CSS核心内容-标准流.盒子模型.浮动.定位,了解了核心内容才能用CSS设计出一个简单的页面 一.基础 在了解核心内容之前需要先了解HTML中的两种标签:块级元素,行内元素: 块级元素:一个块级元素占 ...

  4. 计算机美术基础课程标准,服装设计与工艺专业核心课程标准.doc

    服装设计与工艺专业核心课程标准 服装设计与工艺专业核心课程标准 服装设计专业核心课程标准 [课程名称] 服装设计 [适用专业] 服装设计与工艺教育(职业中专) 前言 课程性质 关键词:设计(desig ...

  5. 高性能ARM SOC 核心板标准(SMARC2.1)简介

    高性能Arm 处理器系统普遍采纳了核心板模式,将处理器和存储器等核心部件部署在一块小尺寸的PCB 上,通过金手指或者高密度接插件将IO信号引出.也有采用了邮票方式.这种结构大大简化了高性能计算设备的设 ...

  6. 金蝶记账王、迷你版、标准版引入凭证方法

    金蝶记账王.迷你版.标准版等版本,由于是基础版本,不支持从excel直接导入凭证: 必须要生成dbf文件,才能从Excel引入凭证,导入凭证: 当然,如果你熟悉数据库,也可以打开数据库,然后从Exce ...

  7. 用NVIDIA Tensor Cores和TensorFlow 2加速医学图像分割

    用NVIDIA Tensor Cores和TensorFlow 2加速医学图像分割 Accelerating Medical Image Segmentation with NVIDIA Tensor ...

  8. c++ standard library_什么是C/C++的标准库?

    简要介绍编写C/C ++应用程序的领域,标准库的作用以及它是如何在各种操作系统中实现的. 做为一个从事C/C++多年的程序员,从一开始就让我感到疑惑的是其内部结构:我所使用的内核函数和类从何而来? 谁 ...

  9. 什么是 C 和 C ++ 标准库?

    我已经接触C++一段时间了,一开始就让我感到疑惑的是其内部结构:我所使用的内核函数和类从何而来? 谁发明了它们? 他们是打包在我系统中的某个地方吗? 是否存在一份官方的C ++手册?今天简要介绍编写C ...

最新文章

  1. 空净厂商为何对“9颗星”认证趋之若鹜?
  2. Dotnet Core异常处理的优雅实践
  3. [Android] websocket客户端开发
  4. LeetCode 1899. 合并若干三元组以形成目标三元组
  5. Linux学习之VMware安装Linux
  6. matlab-高数 meshgrid 笛卡尔乘积(直积)
  7. Git:add多个文件或者目录的方式
  8. 计算机如何共享手机网络热点,手机也能做热点 教你如何共享手机3G网
  9. 装x玩法:插上你的专有U盘才能开机
  10. 通州区机器人比赛活动总结_超燃!通州区中小学机器人大赛圆满落幕
  11. 电力-开闭所/配电房/变电所/变电站
  12. Windows系统重装Linux系统
  13. jQuery到Vue的迁移之路
  14. 解决DeepL翻译器翻译出来的文档是只读模式,不能编辑
  15. C++中cout后面输出时加endl和不加endl的区别
  16. Ubuntu磁盘扩容(简单亲测有效)
  17. 入门Python数据挖掘与机器学习(附代码、实例)
  18. 计算机绘图cad期末考试试题,2017大学cad期末考试练习题「附答案」
  19. 国科大移动互联网技术考试
  20. 自己封装的一个JS分享组件

热门文章

  1. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行
  2. Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull
  3. PyTorch-Adam优化算法原理,公式,应用
  4. pytorch系列 -- 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization...
  5. AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)
  6. MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
  7. Kafka入门教程与详解
  8. day22_面向对象
  9. cocosstudio csd文件解析为.lua
  10. 常用样式积累-scss