oneAPI GPU 优化指南 - OpenMP 部署调优指南 - 编译并运行 OpenMP 应用程序

本章节翻译by chenchensmail@163.com  原文:Compiling and Running an OpenMP Application (intel.com)

使用以下编译器选项启用 OpenMP 部署到 Intel® GPU。 这些选项适用于 C/C++ 和 Fortran。

-fiopenmp -fopenmp-targets=spir64

默认情况下,Intel® 编译器将程序转换为中间语言表示 SPIR-V, 并将其存储在编译过程生成的二进制文件中。 该代码可以通过在 runtime 中将 SPIR-V 代码 转换为平台的汇编代码以便在任何硬件平台上运行。 这个过程被称为即时 (JIT) 编译。

要启用编译器优化报告的输出,请添加以下选项:

-qopt-report=3 -O3

Note:

  • -qopenmp 编译器选项相当于 -fiopenmp,并且 这两个选项可以互换使用。

提前 (AOT) 编译

用于 Intel® 数据中心 Max 系列GPU的提前 (AOT) 编译, 你需要指定一个额外的编译器选项 (-Xs), 如下所示。 此选项适用于 C/C++ 和 Fortran。

-fiopenmp -fopenmp-targets=spir64_gen -Xs "-device 0x0BD5 -revision_id 0x2f"

OpenMP Runtime 例程

以下是一些与设备相关的 runtime 例程:

omp_target_alloc
omp_target_free
omp_target_memcpy

Intel® 编译器支持以下 runtime 例程 作为 Intel® 拓展:

omp_target_alloc_host
omp_target_alloc_device
omp_target_alloc_shared

可以使用上面的 Intel® 拓展调用 omp_target_free 来释放分配的内存。

有关 icx、 icpx 和 ifx 编译器中支持的 OpenMP 功能列表, 请参阅:

环境变量

以下是一些对于调试有用或提高程序的性能 的环境变量。

有关环境变量的更多信息,请参阅:

LIBOMPTARGET_DEBUG=1

启用显示来自 libomptarget.so 的调试信息。

LIBOMPTARGET_DEVICES=<DeviceKind>

控制子设备向用户公开的方式。

<DeviceKind> := DEVICE | SUBDEVICE | SUBSUBDEVICE |
                device | subdevice | subsubdevice

DEVICE/device: 仅最上层设备被报告为 OpenMP 设备, 并支持 subdevice 子句。

SUBDEVICE/subdevice: 仅第一级子设备被报告为 OpenMP 设备, 并忽略 subdevice 子句。

SUBSUBDEVICE/subsubdevice: 仅第二级子设备被报告为 OpenMP 设备, 并忽略 subdevice 子句。 在使用 Level Zero 后端的 Intel® GPU 上, 将 subsubdevice 限制为堆栈内的单个计算 slice 还需要设置额外的 GPU 计算 runtime 环境变量 CFESingleSliceDispatchCCSMode=1

默认值为 <DeviceKind>=device

LIBOMPTARGET_INFO=<Num>

允许用户从 libomptarget 请求不同类型的 runtime 信息。 详细信息请参见:

LLVM/OpenMP Runtimes — LLVM/OpenMP 19.0.0git documentation

LIBOMPTARGET_LEVEL0_MEMORY_POOL=<Option>

控制如何配置可重用内存池。

<Option>       := 0 | <PoolInfoList>
<PoolInfoList> := <PoolInfo>[,<PoolInfoList>]
<PoolInfo>     := <MemType>[,<AllocMax>[,<Capacity>[,<PoolSize>]]]
<MemType>      := all | device | host | shared
<AllocMax>     := positive integer or empty, max allocation size in MB
<Capacity>     := positive integer or empty, number of allocations from
                  a single block
<PoolSize>     := positive integer or empty, max pool size in MB

pool 是一个内存块列表,可以从单个块中 提供至少 <Capacity> 个最大为 <AllocMax> 大小的分配, 总大小不超过 <PoolSize>

LIBOMPTARGET_LEVEL0_STAGING_BUFFER_SIZE=<Num>

将暂存 buffer 大小设置为 <Num> KB。 暂存 buffer 用于优化在主机内存不是统一共享内存 (USM) 时 主机和设备之间的拷贝操作。暂存 buffer 仅用于独立设备。 默认的暂存 buffer 大小为 16 KB。

LIBOMPTARGET_LEVEL_ZERO_COMMAND_BATCH=copy

启用 target 区域中数据传输的命令批处理。

如果在 target 构造上有 map(to: ) 子句, 则此环境变量允许多个数据从主机到设备同时传输。 同样,如果在 target 构造上有 map(from: ) 子句, 则此环境变量允许多个数据从设备到主机同时传输。 请注意, map(tofrom: ) 或 map( ) 将被拆分为 map(to: ) 和 map(from: )

LIBOMPTARGET_LEVEL_ZERO_USE_IMMEDIATE_COMMAND_LIST=<Bool>

启用/禁用使用即时命令列表进行 kernel 提交。

<Bool> := 1 | T | t | 0 | F | f

默认情况下,禁用使用即时命令列表。

LIBOMPTARGET_PLUGIN=<Name>

指定要使用的部署插件名称。

<Name> := LEVEL0 | OPENCL | X86_64 |
          level0 | opencl | x86_64

默认情况下,卸载插件为 LEVEL0。

LIBOMPTARGET_PLUGIN_PROFILE=<Enable>[,<Unit>]

启用基本插件分析并在程序结束时显示结果。

<Enable> := 1 | T
<Unit>   := usec | unit_usec

默认情况下,插件分析被禁用。

如果未指定 <Unit> ,默认单位是微秒(usec)。

LIBOMPTARGET_PROFILE=<FileName>

允许 libomptarget.so 生成类似于 Clang 的 -ftime-trace 选项的时间分析输出。

OMP_TARGET_OFFLOAD=MANDATORY

指定如果遇到设备构造或设备内存例程 且设备不可用或不受实现支持, 则终止程序执行。

控制隐式和显式缩放的环境变量

要禁用隐式缩放并仅使用一个 GPU 堆栈,请设置: ZE_AFFINITY_MASK=0.0

要启用显式缩放,请设置: LIBOMPTARGET_DEVICES=subdevice

在 Intel® 数据中心 GPU Max 系列上,默认启用隐式缩放。

SYCL 的环境变量

有几个 SYCL_PI_LEVEL_ZERO 环境变量 对于开发和调试 SYCL 程序(不仅仅是 OpenMP )非常有用。 它们在以下链接记录:

intel/llvm

参考文献

  1. OpenMP Features and Extensions Supported in Intel® oneAPI DPC++/C++ Compiler

  2. Fortran Language and OpenMP Features Implemented in Intel® Fortran Compiler

  3. Intel® oneAPI DPC++/C++ Compiler Developer Guide and Reference - Supported Environment Variables

  4. Intel® oneAPI Programming Guide - Debug Tools

  5. LLVM/OpenMP Runtimes

  6. Debugging Variables for Level Zero Plugin

  7. Environment variables that effect DPC++ compiler and runtime

  上一章                                    主目录​​    上级目录                                                               下一章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值