sycl::info::event_profiling的command_submit提交的是全部代码还是仅parallel-for?
关于SYCL事件profiling时间戳的范围说明
你提到的cl::sycl::info::event_profiling::command_submit获取的是时间戳而非时长,它对应的是SYCL runtime将完整的命令组(你传入submit方法的lambda所对应的设备任务包)提交到设备命令队列的时间点,和你回调块内的主机侧代码无关。
三个profiling时间戳的具体对应范围如下:
command_submit:主机端已经完成命令组的所有预处理逻辑(包括你在回调内写的变量拷贝、accessor创建、内核参数绑定等主机侧执行的代码),正式将打包好的设备任务提交到设备队列的时间点。回调块内的主机代码是在submit方法调用时在主机侧同步执行完成的,不属于提交给设备的任务范围。command_start:设备端调度到该命令组,开始执行对应的计算任务(也就是你写的parallel_for内核)的时间点。command_end:设备端完成该命令组的所有操作(包括内核执行完毕、所有buffer写入操作完成)的时间点。
补充说明:
如果你需要统计内核实际在设备上的执行时长,使用 end_time - start_time 即可;如果需要统计任务从提交到设备到执行完成的总耗时,使用 end_time - submit_time 即可。
另外需要注意:创建队列时必须显式启用profiling属性,否则无法获取合法的profiling信息,队列构造示例如下:
sycl::queue gpuQueue{sycl::gpu_selector_v, sycl::property::queue::enable_profiling{}};
内容的提问来源于stack exchange,提问作者saharsa
相关产品推荐
相关产品推荐

