什么是异构计算(HC)API?

什么是异构计算(HC)API
1. 克隆HCC源树
# 自动获取所有子模块
git clone --recursive -b clang_tot_upgrade https://github.com/RadeonOpenCompute/hcc.git[1] 
创建一个构建目录,并在该目录中运行cmake以配置构建
mkdir build;
cd build;
cmake../hcc
编译HCC
make -j
运行单元测试
make test
创建安装程序包(DEB或RPM文件)
make package
要从源代码配置和构建HCC,请使用以下步骤[n2] 
mkdir -p build; cd build
# 选择NUM_BUILD_THREADS
# 将该数字设置为CPU核数,在本例中建议将其设置为96
  cmake -DNUM_BUILD_THREADS=96 \
  -DCMAKE_BUILD_TYPE=Release \
..
make
将该数字设置为CPU核数,在本例中建议将其设置为96
要安装它,请使用以下步骤
sudo make install
使用HCC
C++AMP源代码
hcc `clamp-config --cxxflags --ldflags` foo.cpp
警告:从ROCm 2.0版本开始,C++AMP在HCC中不再可用。
HC源代码
hcc `hcc-config --cxxflags --ldflags` foo.cpp
如果从源代码构建HCC,并希望直接在构建目录中使用编译后的二进制文件:
C++AMP源代码
# 注意--build标志
bin/hcc `bin/clamp-config --build --cxxflags --ldflags` foo.cpp
警告:从ROCm 2.0版本开始,C++AMP在HCC中不再可用。
HC源代码
# 注意--build标志
bin/hcc `bin/hcc-config --build --cxxflags --ldflags` foo.cpp
针对不同GPU架构进行编译[n3] 
默认情况下,HCC将自动检测编译机本地的所有GPU,并设置正确的GPU架构。用户可以使用–amdgpu target=<GCN Version>选项为特定架构进行编译,并禁用自动检测。表3-3显示了HCC目前支持的不同版本。
存在一个环境变量HCC_AMDGPU_TARGET,用于全局覆盖HCC的默认GPU架构;但是,不建议使用此环境变量,因为它不受支持,并且将在未来的版弃用。
多ISA
HCC现在支持在一个可执行文件中包含多个GCN ISA。可以通过不同的方式进行操作:使用::–amdgpu target=命令行选项,可以指定多个–amdgu target=选项。
例子
# 将为Hawaii(gfx701), Carrizo(gfx801), Tonga(gfx802) and Fiji(gfx803) 生成ISA

链接需要删除

 [n2]分不清哪些是步骤(一般有序号),哪些是代码。

而且,前后多句都不完整(既不是标题又不是正文,此类情况全文较多),和代码混在一起

 [n3]很多,都需要处理,要么是标题,要么是完整正文……

hcc `hcc-config --cxxflags --ldflags` \

   --amdgpu-target=gfx701 \

   --amdgpu-target=gfx801 \

   --amdgpu-target=gfx802 \

   --amdgpu-target=gfx803 \

   foo.cpp

use:: HCC_AMDGPU_TARGET env var

使用,以界定HCC中的每个AMDGPU靶点。例子

export HCC_AMDGPU_TARGET=gfx701,gfx801,gfx802,gfx803

#将为Hawaii(gfx701), Carrizo(gfx801), Tonga(gfx802) and Fiji(gfx803) 生成ISA

hcc `hcc-config --cxxflags --ldflags` foo.cpp

使用CMake HSA_AMDGPU_GPU_TARGET变量配置HCC

# 默认情况下,将生成夏威夷(gfx701)、卡里佐(gfx801)、汤加(gfx802)和斐济

#(gfx803)的ISA

cmake \

   -DCMAKE_BUILD_TYPE=Release \

   -DROCM_DEVICE_LIB_DIR=~hcc/ROCm-Device-Libs/build/dist/lib \

   -DHSA_AMDGPU_GPU_TARGET="gfx701;gfx801;gfx802;gfx803" \

  ../hcc

CodeXL活动记录器

要启用CodeXL活动记录器,请使用use_CodeXL_Activity_Logger环境变量。

按以下方式配置构建

cmake \

  -DCMAKE_BUILD_TYPE=Release \

  -DHSA_AMDGPU_GPU_TARGET=<AMD GPU ISA version string> \

  -DROCM_DEVICE_LIB_DIR=<location of the ROCm-Device-Libs bitcode> \

  -DUSE_CODEXL_ACTIVITY_LOGGER=1 \

  <ToT HCC checkout directory>

在使用hcc编译的应用程序中,包含CodeXL Activity Logger标头。

#include <CXLActivityLogger.h>

HC现在有两个头文件:

1)hc.hpp:hc的主头文件

2)hc_math.hpp:hc的数学函数

大多数HC API存储在HC命名空间下,类名与C++AMP并发命名空间中的对应类名相同,见表3-3。C++AMP的用户应该很容易从C++AMP切换到HC。

表3-3 C++AMP和HC对应的类名清单

C++AMP

HC

Concurrency::accelerator

hc::accelerator

Concurrency::accelerator_view

hc::accelerator_view

Concurrency::extent

hc::extent

Concurrency::index

hc::index

Concurrency::completion_future

hc::completion_future

Concurrency::array

hc::array

Concurrency::array_view

hc::array_view

HCC内置宏

内置宏HCC内置宏定义清单,见表3-4。

表3-4 HCC内置宏定义清单

定义

__HCC__

总是1

__hcc_major__

HCC的主要版本号

__hcc_minor__

HCC的次要版本号

__hcc_patchlevel__

HCC的小块级别

__hcc_version_

_hcc_major__, __hcc_minor__, __hcc_patchlevel_的组合字符串

__hcc_patchlevel__的规则是:yyWW-(hcc驱动程序git commit#)-(hcc clang-git commit#)

yy代表年份的最后两位数字

WW代表一年中的周数

HCC语言模式宏定义,见表3-5。

表3-5 HCC语言模式宏定义

语言模式宏

定义

_KALMAR_AMP__

在C++AMP模式下为1(-std=C++AMP;从ROCm 2.0开始删除)

__KALMAR_HC__

HC模式下为1(-HC)

编译模式:HCC是一个单源编译器,内核代码和宿主代码可以驻留在同一个文件中。在内部,HCC将触发2次编译迭代,用户程序可以使用宏来确定编译器处于哪种模式,见表3-6。

表3-6 HCC编译模式宏定义

编译模式宏

定义

__KALMAR_ACCELERATOR__

如果编译器在内核代码编译模式下运行,则不是0

__KALMAR_CPU__

如果编译器在宿主代码编译模式下运行,则不是0

HC特定功能

1)内核中允许的操作规则放宽

2)tiled.exxtent和tiled_index的新语法

3)动态组段内存分配

4)真正的异步内核启动行为

5)其他HSA特定API

HC API和C++AMP之间的差异

尽管HC和C++AMP共享许多类似的程序构造(例如parallel_for_each、array、

array_view等),但这两个API之间存在几个显著差异。

支持显式异步parallel_for_each在C++AMP中,parallel_for_ each在程序中显示为同步函数调用(即主机等待内核完成);然而,编译器可以优化它以异步执行内核,并且主机将在内核修改的数据首次访问时与设备同步。例如,如果parallel_For_each写入array_view,那么在parallel_For_ each之后对主机上此array_view的第一次访问将被阻止,直到parallel_For_6ach完成。

HC支持C++AMP中的自动同步行为。此外,HC的parallel_for_each支持显式异步执行。它返回一个completion_future(类似于C++std::future)对象,其他异步操作可以与之同步,这为任务图构造提供了更好的灵活性,并实现了对优化的更精确控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROCm技术解析概述

3.2 ROCm技术解析 ROCm是第一个用于GPU计算的开源HPC/Hyperscale级平台,也是独立于编程语言的。将UNIX的选择哲学、极简主义和模块化软件开发引入GPU计算。新的ROCm基础允许为应用程序选择甚至开发工具和语言运行时。 1)[n1] ROCm是为规模而构建的;它支持通过RDMA进行服务器…

AMD GPU上对比语言图像预训练(CLIP)模型的交互

AMD GPU上对比语言图像预训练(CLIP)模型的交互 3.1.1 介绍 对比语言图像预训练(CLIP)是一种连接视觉和自然语言的多模态深度学习模型。它是在OpenAI的论文从自然语言监督中学习可转移的视觉模型(2021)中介绍的,并在大量(4亿)图像字幕对的网络抓取数据上进行了对比训练…

推荐书1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

我的世界 GTNH 传送权限单独指定

起因 在 GTNH 2.7.2 上,对于 Journey Map 传送点的支持需要 op 管理员权限,给管理员权限容易刷物件和其他意外,所以需要限制权限同时又能方便移动。 解决方案 使用 ForgeEssentials 来管理权限,从 Forge-essentials-curseforge 获取 1.7.10 版本的插件,放到服务端 mods 目…

洛谷 P3131 [USACO16JAN] Subsequences Summing to Sevens S(前缀和+模运算性质)

前缀和,模运算性质。做题历程拿到手的时候就是考虑前缀和,毕竟要求区间和,如果暴力做就是N3,那么就开始做,写了个O(n2)复杂度代码,交上去80分...迷了,心想这题难道dp啊,懒得想的我直接看题解,发现大佬用了一个很简单的模运算性质就过去了,即(a - b) mod 7 == 0 那么 …

FastAPI性能优化指南:参数解析与惰性加载

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 探索数千个预构建的 AI 应用,开启你的下一个伟大创意第一章:参数解析性能原理 1.1 FastAPI请求处理管线 async def app(scope, receive, send):# 1. 请求解析阶段body = await receive()# 2. 参数验证阶段valid…

MYSQL-索引入门

介绍:结构:语法:create index i on tb_emp(name);show index from tb_emp;drop index i on tb_emp;

事物

操作:start transaction;delete from tb_dept where id=2; delete from tb_emp where dept_id===2;commit;rollback ;只要有失败就可以回滚四大特性ACID:总结:

关于编码转换问题

今天我在写攻防世界的“no-strings-attached”这道题的时候,在处理16进制字符串序列转10进制整数的时候出现了问题,这个问题是关于“utf-8”对某些字节值进行特殊处理导致的。具体情况如下: 首先是我提取的两个16进制字符序列然后我对其进行小端序的进制转换操作,操作如下:…

一点点矩阵

矩阵置0//O(m*n) O(m+n) var setZeroes = function(matrix) {let row=[]let col=[]let n=matrix.lengthlet m=matrix[0].lengthfor(let i=0;i<n;i++){for(let j=0;j<m;j++){if(matrix[i][j]==0){row.push(i)col.push(j)}}}for(let i of row){for(let j=0;j<m;j++){mat…

基于DVB-T的COFDM+16QAM+Viterbi编解码图传通信系统matlab仿真,包括载波定时同步,信道估计

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要基于DVB-T的COFDM+16QAM+Viterbi编解码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该系统结合了正交频分复用(COFDM)…

Day15_http协议

每日一题 面试题: 请解释以下问题:HTTP/2 的主要改进有哪些?与 HTTP/1.1 相比,它如何解决“队头阻塞”问题? HTTPS 是如何实现数据加密的?详细说明 TLS 握手过程。 HTTP/3 为什么选择基于 UDP 的 QUIC 协议?它解决了哪些传统 TCP 协议的缺陷?解答: 1. HTTP/2 的改进与…