Taichi如何查看profile中kernel name对应的函数

如题。
为了加速taichi程序,我进行了profile,
arch=CPU x64,
[Taichi] version 1.0.0, llvm 10.0.0, commit 6a15da85, win, python 3.7.0
在结果中看到这两个kernel占用了主要时间,想请问一下要如何知道这两个kernel具体对应的是什么语句呢?然后进行针对性的优化

[ 18.59%   0.064 s      2x |   31.477    32.204    32.931 ms] fill_tensor_c0_1_kernel_0_range_for
[ 11.30%   0.039 s 228640x |    0.000     0.000     0.037 ms] snode_reader_12_kernel_0_serial

cc @qiao-bo @haidonglan

Hi, 一般情况下前面的名字对应的是ti.kernel的名字,比如fill_tensor_***对应的应该是fill_tensor的kernel (比如你调用了某个snode的fill函数,which is a kernel in Taichi). 后面的range_for一般对应的是你kernel中一个并行的for loop. 像这种情况下fill_tensor 应该只有一个for loop, 所以0_range_for. 如果你的kernel有多个for loop, 应该会得到1_range_for, 2_range_for … etc. Serial是ti.kernel中没有被并行的部分,

3 个赞

非常感谢你的回复~

请问kernel profiler中c222_0/c234_0代表什么意思

=========================================================================
Kernel Profiler(count, default) @ CUDA on NVIDIA GeForce RTX 3070
=========================================================================
[      %     total   count |      min       avg       max   ] Kernel name
-------------------------------------------------------------------------
[ 53.65% 128.210 s 152949x |    0.063     0.838     1.441 ms] kernel_force_assemble_contact_table__c222_0_kernel_0_range_for
[  8.90%  21.262 s 152949x |    0.027     0.139    12.063 ms] kernel_force_assemble_contact_table__c234_0_kernel_0_range_for
[  8.33%  19.919 s  76475x |    0.022     0.260     2.655 ms] update_contact_table__c204_0_kernel_2_range_for
[  8.28%  19.786 s  76474x |    0.021     0.259     0.582 ms] update_contact_table__c204_1_kernel_2_range_for

Taichi会把Kernel中的代码进一步分块成一个个"offloaded task",作为最小执行单元。其中不同的range_for会被分到不同的"offloaded taks"中,因此这里c222_0表示第一个range_for,c234_0表示第二个range_for

后续我们会把profiler信息做的更明确一些~

请问taichi的profile能看到func耗费的时间吗?

可以的,可以参考这里:Profiler | Taichi Docs