export CUDA_LAUNCH_BLOCKING=1 具体什么效果 ?具体举例

1,686 阅读2分钟

找到了第 1 篇资料:CUDA_LAUNCH_BLOCKING=1的作用 - 思念殇千寻 - 博客园

找到了第 2 篇资料:GPU训练时报错不清楚、笼统问题 - 知乎

找到了第 3 篇资料:cuda基础之异步启动 - 知乎

找到了第 4 篇资料:PyTorch vs LibTorch:网络推理速度谁更快? - 知乎专栏

找到了第 5 篇资料:cuda_launch_blocking在哪里设置 - CSDN文库

找到了第 6 篇资料:CUDA_LAUNCH_BLOCKING=1的作用-CSDN博客

一共找到 6 篇资料,正在阅读...

找到了 6 篇资料作为参考:

CUDA_LAUNCH_BLOCKING=1 是一个环境变量,它在CUDA编程中用于控制CUDA函数调用的行为。当你设置这个环境变量为1时,它会强制CUDA函数调用变为同步执行,而不是默认的异步执行。这意味着在执行CUDA函数(如内核启动)时,CPU会等待GPU完成当前的操作,然后才继续执行后续的代码。

具体效果举例:

  1. 调试:在调试CUDA程序时,异步执行可能会导致难以确定错误发生的位置,因为错误信息可能不会在错误实际发生的代码位置被报告。通过设置CUDA_LAUNCH_BLOCKING=1,你可以确保错误信息在错误发生时立即被报告,从而更容易定位问题。
  2. 性能分析:在进行性能分析时,同步执行可以帮助你更准确地测量单个CUDA操作的执行时间,因为它消除了异步执行带来的时间不确定性。
  3. 简化并发控制:在某些情况下,你可能希望确保在执行后续操作之前,GPU上的某个操作已经完成。通过设置这个环境变量,你可以简化并发控制逻辑,因为CPU会等待GPU操作完成。

然而,需要注意的是,使用CUDA_LAUNCH_BLOCKING=1可能会降低程序的性能,因为它阻止了CPU和GPU的并行执行。在生产环境中,通常建议仅在调试或性能分析时使用这个设置,并在问题解决后将其关闭,以恢复程序的并行性能。

在实际使用中,你可以在Linux或macOS的终端中通过以下命令设置这个环境变量:

export CUDA_LAUNCH_BLOCKING=1

在Windows中,你可以在命令提示符下使用类似的命令:

set CUDA_LAUNCH_BLOCKING=1

在Python脚本中,你可以在程序开始时导入os模块并设置这个环境变量:

import os
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

请记住,这个设置会影响所有后续的CUDA调用,直到环境变量被更改或程序结束。