【知识】PyTorch种两种CUDA时间测量的方法对比

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

在PyTorch中使用CUDA进行时间测量时,以下两者各有优缺点:

  • torch.cuda.current_stream(self._device).synchronize()
  • torch.cuda.Event(enable_timing=True)

torch.cuda.current_stream(self._device).synchronize()

  1. 功能torch.cuda.current_stream(self._device).synchronize() 会同步当前设备的CUDA流,确保之前的所有操作都完成。这可以用来在开始和结束计时前确保所有前面的CUDA操作都完成。
  2. 效率:这种方法一般来说开销较大,因为它会同步整个流,导致所有未完成的CUDA操作都必须等待完成。
  3. 使用场景:适用于需要确保所有CUDA操作完成的场景,但通常不适用于精确的计时测量。
python 复制代码
import torch
import time

# 确保所有之前的操作完成
torch.cuda.current_stream().synchronize()

start_time = time.time()

# 执行一些CUDA操作
# ...

# 再次同步
torch.cuda.current_stream().synchronize()

end_time = time.time()
print(f"Elapsed time: {end_time - start_time} seconds")

torch.cuda.Event(enable_timing=True)

  1. 功能 :通过CUDA事件来进行计时,torch.cuda.Event(enable_timing=True) 创建一个启用了计时的事件,可以用event.record()方法在代码中的特定位置记录时间戳,然后通过计算开始和结束事件之间的时间差来测量操作时间。
  2. 效率:这种方法通常更高效,因为它允许异步记录事件时间,并且只会同步特定的事件,而不是整个流。通常开销较小,适合精确的时间测量。
  3. 使用场景:适用于需要精确测量特定CUDA操作执行时间的场景,例如分析和优化代码性能。
python 复制代码
import torch

start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)

start_event.record()

# 执行一些CUDA操作
# ...

end_event.record()

# 同步并计算时间
torch.cuda.synchronize()
elapsed_time = start_event.elapsed_time(end_event)
print(f"Elapsed time: {elapsed_time} milliseconds")
相关推荐
清水白石0081 分钟前
Python 内存陷阱深度解析——浅拷贝、深拷贝与对象复制的正确姿势
开发语言·python
岛雨QA4 分钟前
【基础知识】人工智能大模型常见术语(1)
人工智能·aigc·openai
国家二级编程爱好者4 分钟前
删除typora文档没有引用的资源文件
git·python
进击的雷神5 分钟前
邮箱编码解码、国际电话验证、主办方过滤、多页面深度爬取——柬埔寨塑料展爬虫四大技术难关攻克纪实
爬虫·python
互联网志20 分钟前
为数字经济与人工智能深度融合筑牢坚实底座
人工智能
l1122060335 分钟前
网站SEO定时自动发布工具优质厂家推荐
人工智能·推荐·seo优化·网站seo·定时发布工具·优质厂家
ASD123asfadxv36 分钟前
RepVGG重参数化架构改进YOLOv26训练推理双模式与多分支融合协同突破
人工智能·yolo·目标跟踪
九硕智慧建筑一体化厂家36 分钟前
一站式交付!绿色工厂节能降碳+照明+PLC集成解决方案直供
人工智能
深蓝电商API39 分钟前
多线程 vs 异步 vs 多进程爬虫性能对比
爬虫·python
RuiBo_Qiu1 小时前
【LLM进阶-Agent】1.Agent范式发展历程
人工智能·ai-native