新闻详情

新闻详情

首页 / 资讯中心 / 详情

Taichi GPU 内核如何用 ti.sync() 正确测量执行时间?

发布时间:2026/9/12 9:11:39来源:尧图网络
Taichi GPU 内核如何用 ti.sync() 正确测量执行时间?
Taichi GPU 内核如何用 ti.sync() 正确测量执行时间【免费下载链接】taichiProductive, portable, and performant GPU programming in Python.项目地址: https://gitcode.com/GitHub_Trending/ta/taichi在 Taichi 中给 GPU 内核计时是一个容易踩坑的操作使用 GPU 后端时内核被编译后是发送到 GPU 队列执行的Python 程序不会等待内核执行完就继续执行下一条语句。如果你直接在内核调用前后用time.time()掐表测出来的时间并不包含内核在 GPU 上的实际执行时间。本文基于 kernel_sync 文档说明如何在内核调用后显式调用ti.sync()等待内核完成从而得到正确的执行时间。适用前提程序运行在 GPU 后端ti.init(archti.gpu)内核本身没有返回值、不访问 field、也没有print等需要同步数据的操作。为什么直接计时会漏掉 GPU 执行时间下面的代码来自官方文档定义了一个计算量很大的benchmark内核并尝试测量其耗时import time import taichi as ti ti.init(archti.gpu) ti.kernel def benchmark(): x 1.0 for i in range(1000): for j in range(10000): x ti.sin(float(i j)) start time.time() benchmark() end time.time() print(end - start)文档指出虽然benchmark是一个计算密集的内核但程序不会等待它执行完才执行后续语句benchmark的执行时间被排除在计时之外。也就是说这里打印出来的end - start只覆盖了内核编译与提交到 GPU 队列的开销远小于 GPU 上真正的计算时间。在内核调用后加 ti.sync() 再计时修正方法是在内核调用之后、读取结束时间之前显式调用ti.sync()import time import taichi as ti ti.init(archti.gpu) ti.kernel def benchmark(): x 1.0 for i in range(10000): for j in range(100000): x ti.sin(float(i j)) start time.time() benchmark() ti.sync() end time.time() print(end - start)ti.sync()会阻塞程序等待 GPU 队列中排在前面的所有内核任务执行完毕后才继续执行后续语句因此end - start此时包含了内核在 GPU 上的执行时间。FAQ 中也提到ti.sync()的作用类似 CUDA 的cudaStreamSynchronize()。验证方式同样是行为层面的对比两段代码第一段无ti.sync()的计时结果不包含内核执行时间第二段在benchmark()与end time.time()之间加入ti.sync()后计时结果才会反映 GPU 上的实际执行耗时。文档没有给出固定的预期数值实际输出取决于你的硬件。哪些情况下不需要手动 ti.sync()大多数时候 Taichi 会自动处理数据同步以下情形无需手动调用ti.sync()内核有返回值Taichi 会等待内核完成后才把返回值交还给 Python 作用域在 Python 作用域调用x.to_numpy()如果 fieldx正被其他内核使用Taichi 会确保使用该 field 的内核先完成在 Python 作用域访问或修改 Taichi field同样会先确保使用 field 的内核结束。文档示例之所以必须显式调用ti.sync()正是因为这个内核没有返回值、不含 print 语句、也不涉及任何 field 操作属于典型的发射后不管内核。另外注意 CPU 后端的差异在 CPU 后端上所有内核调用都是阻塞的程序会等待当前内核结束再执行下一条语句因此CPU 后端既不用担心数据依赖也不需要调用ti.sync()。ti.sync()的计时修正只针对 GPU 后端。可选用 KernelProfiler 获取内核级性能数据如果目标不止是测一次耗时而是想看每个内核的统计信息可以在ti.init()时启用kernel_profilerTrue再用ti.profiler.print_kernel_profiler_info()输出结果支持 count 与 trace 两种模式。Profiler 文档 特别强调了两点KernelProfiler目前仅支持 CPU 和 CUDA 后端程序运行在 GPU 上时执行性能分析前要先调用ti.sync()与本文的计时要求一致。文档还建议在多次运行性能分析后观察最小或平均执行时间而不是只看单次结果。【免费下载链接】taichiProductive, portable, and performant GPU programming in Python.项目地址: https://gitcode.com/GitHub_Trending/ta/taichi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

图片盲水印实践:blind_watermark 3 分钟嵌入与提取 2026/9/12 9:44:43

图片盲水印实践:blind_watermark 3 分钟嵌入与提取

图片盲水印实践:blind_watermark 3 分钟嵌入与提取 【免费下载链接】blind_watermark Blind&Invisible Watermark ,图片盲水印,提取水印无须原图! 项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark …

阅读更多 →
5分钟跑起来DeepTutor:开源AI私教,喂一份PDF就能答出带引用的答案 2026/9/12 9:44:43

5分钟跑起来DeepTutor:开源AI私教,喂一份PDF就能答出带引用的答案

5分钟跑起来DeepTutor:开源AI私教,喂一份PDF就能答出带引用的答案 【免费下载链接】DeepTutor DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/. 项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor 昨晚刚给某个…

阅读更多 →
30岁转行网络安全的实战路径与经验分享 2026/9/12 9:44:43

30岁转行网络安全的实战路径与经验分享

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
本地人常去的火锅店,2026年实测哪家口味更贴合本地 2026/9/12 9:44:43

本地人常去的火锅店,2026年实测哪家口味更贴合本地

一、本地人常去的火锅店市场现状如何?2026年,本地人常去的火锅店市场持续呈现本土化深耕特征,越来越多主打口味适配本地消费习惯的品牌获得稳定客流。遇南三作为2023年创立的手工炒料重庆火锅品牌,截至2026年5月已经开出14家直营门…

阅读更多 →
微电网多目标优化:负荷满意度与运行成本的Pareto前沿求解 2026/9/12 9:44:43

微电网多目标优化:负荷满意度与运行成本的Pareto前沿求解

简介:一份围绕考虑负荷满意度的微电网运行多目标优化问题的MATLAB代码资源,面向电力系统调度与智能优化算法初学者及研究者,重点演示NSGA-II(二代非支配排序遗传算法)在含约束多目标问题中的编码、寻优与结果分析流程。…

阅读更多 →
AI文献工具助力科研:从选题到写作全流程优化 2026/9/12 9:41:43

AI文献工具助力科研:从选题到写作全流程优化

1. 科研党如何用AI工具告别文献整理焦虑第一次写文献综述时,我花了整整两周时间在PubMed和Web of Science上手动筛选了200多篇论文,光是整理Excel表格就做到凌晨三点。直到导师问我"这些文献之间的关联性是什么"时,我才发现自己的整…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞