从this开始,来自不同上下文的两个内核似乎无法同时执行。在这方面,我从两个应用程序读取CUPTI活动跟踪时感到困惑。跟踪显示了kernel_start_timestamp,kernel_end_timestamp和duration(这是kernel_end_timestamp - kernel_start_timestamp)。
申请1: ....... 8024328958006530 8024329019421612 61415082 .......
申请2: ....... 8024328940410543 8024329048839742 108429199
使长时间戳和持续时间更具可读性:
应用程序1:61.415 ms的内核X从xxxxx28.958 s运行到xxxxx29.019 s
应用程序2:内核Y为108.429 ms,从xxxxx28.940 s运行到xxxxx29.0488 s
因此,内核X的执行与内核Y的执行完全重叠。
我正在使用/ path_to_cuda_install / extras / CUPTI / sample / activity_trace_async来跟踪应用程序。我将CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE修改为1024,将CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT修改为1.我只启用了CUPTI_ACTIVITY_KIND_MEMCPY,CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL和CUPTI_ACTIVITY_KIND_OVERHEAD的跟踪。我的应用程序在每个逻辑时间步长中调用cuptiActivityFlushAll(0)一次。
由于使用不当,我看到的这些错误的CUPTI值是否是其他的?
澄清:MPS未启用,在单GPU上运行
更新:bug提交,这似乎是CUDA 6.5的一个已知问题 等待有机会使用CUDA 7进行测试(在多个用户之间共享GPU并需要一个不活动的窗口以暂时切换到CUDA 7)
答案 0 :(得分:1)
我不知道如何设置CUPTI活动痕迹。但是,即使没有MPS服务器,2个内核也可以在单个GPU上共享时间跨度,但一次只能在GPU上运行一个内核。
如果未使用CUDA MPS服务器,则来自不同上下文的内核不能重叠。我假设你没有使用MPS服务器,那么时间分片调度程序将决定一次访问GPU的上下文。如果没有MPS,上下文只能在时间分片调度程序分配给它的时隙中访问GPU。因此,一次只有来自GPU上运行的单个上下文的内核(没有MPS服务器)。
请注意,多个内核可能在GPU上彼此共享时间跨度,但仍然在该时间跨度内,只有来自单个上下文的内核才能访问GPU资源(我也假设您正在使用单个GPU)。
有关详细信息,您还可以查看MPS Service文档