如题。
为了加速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
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 Likes
Otis
#5
请问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耗费的时间吗?