环境变量¶
标准选项¶
-
NVSHMEM_VERSION
¶
启动时打印库版本。
-
NVSHMEM_INFO
¶
启动时打印环境变量选项。
-
NVSHMEM_SYMMETRIC_SIZE
¶
指定每个 PE 的对称堆内存大小(以字节为单位)。结果大小由实现定义,并且必须至少与数字前缀和缩放因子的乘积的整数上限一样大。缩放因子允许的字符后缀如下
- k 或 K 乘以 2^10 (千字节)
- m 或 M 乘以 2^20 (兆字节)
- g 或 G 乘以 2^30 (吉字节)
- t 或 T 乘以 2^40 (太字节)
例如,字符串 ‘20m’ 等效于整数值 20971520,或 20 兆字节。类似地,字符串 ‘3.1M’ 等效于整数值 3250586。仅识别一个乘数,并且忽略乘数后的任何字符,因此 ‘20kk’ 不会产生与 ‘20m’ 相同的结果。使用字符串 ‘.5m’ 将产生与字符串 ‘0.5m’ 相同的结果。NVSHMEM_SYMMETRIC_SIZE
的无效值是一个错误,NVSHMEM 库应通过从 nvshmem_init_thread
返回非零值或导致程序终止来报告此错误。
-
NVSHMEM_DEBUG
¶
设置为启用调试消息。可选值:VERSION、WARN、INFO、ABORT、TRACE
引导选项¶
-
NVSHMEM_BOOTSTRAP
¶
应该用于初始化 NVSHMEM 的默认引导程序的名称。允许的值:PMI、MPI、SHMEM、plugin
-
NVSHMEM_BOOTSTRAP_PMI
¶
应该用于初始化 NVSHMEM 的 PMI 引导程序的名称。允许的值:PMI、PMI-2、PMIX
-
NVSHMEM_BOOTSTRAP_PLUGIN
¶
当指定 NVSHMEM_BOOTSTRAP=plugin 时,要加载的引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_MPI_PLUGIN
¶
MPI 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_SHMEM_PLUGIN
¶
SHMEM 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_PMI_PLUGIN
¶
PMI 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_PMI2_PLUGIN
¶
PMI-2 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_PMIX_PLUGIN
¶
PMIx 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_UID_PLUGIN
¶
UID 引导程序插件文件的名称。
-
NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME
¶
定义一个前缀列表,以过滤 NVSHMEM 要使用的接口。使用 ^
符号,NVSHMEM 将排除以该列表中的任何前缀开头的接口。要匹配(或不匹配)精确的接口名称而不是前缀,请在字符串前加上 =
字符。
示例:eth
:使用所有以 eth
开头的接口,例如 eth0
、eth1
、… =eth0
:仅使用接口 eth0
^docker
:不要使用任何以 docker
开头的接口 ^=docker0
:不要使用接口 docker0
。
注意:默认情况下,环回接口 (lo
) 和 docker 接口 (docker*
) 将不会被选中,除非没有其他可用接口。如果您更喜欢使用 lo
或 docker*
而不是其他接口,您需要使用 NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME
显式选择它们。默认算法还将优先选择以 ib
开头的接口而不是其他接口。设置 NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME
将绕过自动接口选择算法,并且可以使用与手动选择匹配的所有接口。
-
NVSHMEM_BOOTSTRAP_UID_SOCK_FAMILY
¶
接口所属的套接字族名称。允许的值:AF_INET6、AF_INET。
-
NVSHMEM_BOOTSTRAP_UID_SESSION_ID
¶
UID 会话标识符的名称,由 <ipv4>:<TCP 端口> 或 [<ipv6>]:<TCP 端口> 或 <hostname>:<TCP 端口> 的组合指定。
附加选项¶
-
NVSHMEM_DEBUG_FILE
¶
调试输出文件名,可能包含 %h 代表主机名,%p 代表 pid。
-
NVSHMEM_MAX_TEAMS
¶
允许的最大同时团队数。
-
NVSHMEM_MAX_MEMORY_PER_GPU
¶
每个 GPU 的最大内存
-
NVSHMEM_DISABLE_CUDA_VMM
¶
禁用 CUDA VMM 用于 P2P 内存映射。默认情况下,CUDA VMM 在 x86 上启用,在 P9 上禁用。NVSHMEM 中的 CUDA VMM 功能要求 CUDA RT 版本和 CUDA 驱动程序版本大于或等于 11.3。
-
NVSHMEM_DISABLE_P2P
¶
即使可用,也禁用 GPU 的 P2P 连接。
-
NVSHMEM_DISABLE_NVLS
¶
即使可用,也禁用通过 NVSwitch 为 P2P 连接的 GPU 提供的 NVLINK SHARP 集合通信。
-
NVSHMEM_CUMEM_GRANULARITY
¶
cuMemAlloc
/cuMemCreate
的粒度。
-
NVSHMEM_CUDA_LIMIT_STACK_SIZE
¶
指定 P9 上每个 GPU 线程的堆栈大小限制。
-
NVSHMEM_PROXY_REQUEST_BATCH_MAX
¶
代理线程在进度循环的单次迭代中处理的最大请求数。
集合通信选项¶
-
NVSHMEM_DISABLE_NCCL
¶
禁用 NCCL 用于集合操作。
-
NVSHMEM_BARRIER_DISSEM_KVAL
¶
用于屏障操作的分发算法的基数。
-
NVSHMEM_BARRIER_TG_DISSEM_KVAL
¶
用于线程组屏障的分发算法的基数。
-
NVSHMEM_FCOLLECT_LL_THRESHOLD
¶
消息大小阈值,达到此阈值将使用 fcollect LL 算法。
-
NVSHMEM_BCAST_ALGO
¶
- 要使用的广播算法。
- 0 - 使用默认算法选择策略
-
NVSHMEM_REDMAXLOC_ALGO
¶
- 要使用的归约算法。
- 1 - 默认值,标记 alltoall 算法
- 2 - 平面归约 + 平面广播
- 3 - 拓扑感知的两级归约 + 拓扑感知广播
-
NVSHMEM_REDUCE_SCRATCH_SIZE
¶
运行时为每个团队保留的对称堆内存量(最小 16B,8B 的倍数),用于实现 reduce 和 reducescatter 集合通信。
传输选项¶
-
NVSHMEM_REMOTE_TRANSPORT
¶
为远程操作选择的传输:ibrc、ucx、libfabric、ibdevx、none。
-
NVSHMEM_DISABLE_IB_NATIVE_ATOMICS
¶
禁用 InfiniBand 本地原子操作的使用。
-
NVSHMEM_DISABLE_GDRCOPY
¶
禁用 IB RC 传输中的 GDRCopy 的使用。
-
NVSHMEM_ENABLE_NIC_PE_MAPPING
¶
当未设置或设置为 0 时,PE 被分配节点上距离它最近的 NIC。当设置为 1 时,NVSHMEM 要么以循环方式将 NIC 分配给 PE,要么在使用 NVSHMEM_HCA_PE_MAPPING
或 NVSHMEM_HCA_LIST
时使用它们(如果已指定)。
-
NVSHMEM_IB_GID_INDEX
¶
ROCE 的源 GID 索引。默认情况下,它会动态发现 NIC 支持的 GID。
-
NVSHMEM_IB_TRAFFIC_CLASS
¶
ROCE 的流量类别。
-
NVSHMEM_IB_SL
¶
要在 IB/ROCE 上使用的服务级别。
-
NVSHMEM_IB_ADDR_FAMILY
¶
当 NVSHMEM_IB_GID_INDEX
未设置时,与 NVSHMEM 动态选择的 GID 关联的 IP 地址族。
-
NVSHMEM_IB_ADDR_RANGE
¶
定义当 NVSHMEM_IB_GID_INDEX
未设置时,NVSHMEM 动态选择的有效 GID 范围。
-
NVSHMEM_IB_ROCE_VERSION_NUM
¶
当 NVSHMEM_IB_GID_INDEX
未设置时,与 NVSHMEM 动态选择的 IB GID 关联的 ROCE 版本。
-
NVSHMEM_HCA_LIST
¶
要在 NVSHMEM 应用程序中使用的 HCA 的逗号分隔列表。条目的格式为 hca_name:port
,例如 mlx5_1:1,mlx5_2:2
,并且以 ^ 开头的条目将被排除。NVSHMEM_ENABLE_NIC_PE_MAPPING
必须设置为 1,此变量才能生效。
-
NVSHMEM_HCA_PE_MAPPING
¶
将 HCA 映射到 PE,形式为逗号分隔列表。逗号分隔列表中的每个条目的格式为 hca_name:port:count
。例如,mlx5_0:1:2,mlx5_0:2:2
表示 PE0、PE1 映射到 mlx5_0 的端口 1,PE2、PE3 映射到 mlx5_0 的端口 2。NVSHMEM_ENABLE_NIC_PE_MAPPING
必须设置为 1,此变量才能生效。
-
NVSHMEM_DISABLE_LOCAL_ONLY_PROXY
¶
在仅 NVLink 配置(无 IB,无 UCX)上运行时,完全禁用代理线程。这将禁用设备端全局退出和设备端等待超时轮询(由 NVSHMEM_TIMEOUT_DEVICE_POLLING
构建时变量启用),因为这些由代理线程处理。
-
NVSHMEM_LIBFABRIC_PROVIDER
¶
为 libfabric 传输设置功能集提供程序:cxi、efa、verbs
-
NVSHMEM_IBGDA_NUM_DCT
¶
GPU 发起的通信传输中使用的 DCT QP 的数量。
-
NVSHMEM_IBGDA_NUM_DCI
¶
GPU 发起的通信传输中使用的 DCI QP 的总数。设置为 0 或负数以使用自动配置。
-
NVSHMEM_IBGDA_NUM_SHARED_DCI
¶
共享池中 DCI QP 的数量。其余 DCI QP (NVSHMEM_IBGDA_NUM_DCI - NVSHMEM_IBGDA_NUM_SHARED_DCI) 是独占分配的。有效值:[1, NVSHMEM_IBGDA_NUM_DCI]。
-
NVSHMEM_IBGDA_DCI_MAP_BY
¶
指定如何分配独占 DCI QP。选项为:cta、sm、warp、dct。
- cta:按 CTA ID 循环分配(默认)。
- sm:按 SM ID 循环分配。
- warp:按 Warp ID 循环分配。
- dct:按 DCT ID 循环分配。
-
NVSHMEM_IBGDA_NUM_RC_PER_PE
¶
GPU 发起的通信传输中每个对等 PE 使用的 RC QP 的数量。设置为 0 以禁用 RC QP(默认值为 2)。如果设置为正数,则 DCI 将仅用于强制实施一致性。
-
NVSHMEM_IBGDA_RC_MAP_BY
¶
指定如何分配 RC QP。选项为:cta、sm、warp。
- cta:按 CTA ID 循环分配(默认)。
- sm:按 SM ID 循环分配。
- warp:按 Warp ID 循环分配。
-
NVSHMEM_IBGDA_FORCE_NIC_BUF_MEMTYPE
¶
强制 NIC 缓冲区内存类型。有效选项为:gpumem(默认)、hostmem。对于其他值,请使用自动发现。
-
NVSHMEM_IBGDA_NUM_REQUESTS_IN_BATCH
¶
在提交到 NIC 之前要批处理的请求数。它将向上舍入到最接近的 2 的幂。设置为 1 表示激进提交。
-
NVSHMEM_IBGDA_NUM_FETCH_SLOTS_PER_DCI
¶
每个 DCI QP 的获取操作的内部缓冲区槽数。它将向上舍入到最接近的 2 的幂。
-
NVSHMEM_IBGDA_NUM_FETCH_SLOTS_PER_RC
¶
每个 RC QP 的获取操作的内部缓冲区槽数。它将向上舍入到最接近的 2 的幂。
-
NVSHMEM_IB_ENABLE_IBGDA
¶
设置为启用 GPU 发起的通信传输。
-
NVSHMEM_IBGDA_NIC_HANDLER
¶
选择用于响铃 NIC 门铃的处理器。选项为 auto
、gpu
、cpu
。
auto
:使用 GPU SM,如果不支持,则回退到 CPU(默认)。gpu
:使用 GPU SM。cpu
:使用 CPU 代理线程。
-
NVSHMEM_IB_DISABLE_DMABUF
¶
设置为禁用任何基于 IB 的远程传输中的 DMAbuf。
-
NVSHMEM_IBGDA_ENABLE_MULTI_PORT
¶
设置为在可用时启用每个 PE 的多个 NIC。
NVTX 选项¶
-
NVSHMEM_NVTX
¶
设置为启用 NVTX instrumentation。接受逗号分隔的 instrumentation 组列表。默认情况下,NVTX instrumentation 处于禁用状态。
init : library setup
alloc : memory management
launch : kernel launch routines
coll : collective communications
wait : blocking point-to-point synchronization
wait_on_stream : point-to-point synchronization (on stream)
test : non-blocking point-to-point synchronization
memorder : memory ordering (quiet, fence)
quiet_on_stream : nvshmemx_quiet_on_stream
atomic_fetch : fetching atomic memory operations
atomic_set : non-fetchong atomic memory operations
rma_blocking : blocking remote memory access operations
rma_nonblocking : non-blocking remote memory access operations
proxy : activity of the proxy thread
common : init,alloc,launch,coll,memorder,wait,atomic_fetch,rma_blocking,proxy
all : all groups
off : disable all NVTX instrumentation