cuda - 测量GPU中上下文切换的开销

标签 cuda gpu overhead context-switch

有很多方法可以衡量 CPU 上下文切换开销。似乎几乎没有资源来衡量 GPU 上下文切换开销。 CPU 上下文切换和 GPU 是完全不同的。

GPU调度基于warp调度。为了计算GPU上下文切换的开销,我需要知道有上下文切换的warp和没有上下文切换的warp的时间,并做减法得到开销。

我对如何通过上下文切换测量扭曲时间感到困惑?有没有人有一些想法可以衡量?

最佳答案

我认为谈论 GPU 上上下文切换的“开销”真的没有意义。

在 CPU 上,上下文切换是在软件中通过内核中称为“调度程序”的函数完成的。调度程序是普通代码,是处理器必须运行的一系列机器指令,运行调度程序所花费的时间不是花在“有用”工作上的时间。

另一方面,GPU 在没有调度程序的情况下在硬件中进行上下文切换,而且速度足够快,以至于当一个任务遇到流水线停顿时,可以引入另一个任务来利用否则会空闲的流水线阶段。这称为“延迟隐藏”——一项任务的延迟被其他任务的进度隐藏。上下文切换实际上允许在给定的时间范围内完成更多有用的工作。

如需更多信息,请参阅 this answer我写了一个关于 super 用户的相关问题。

关于cuda - 测量GPU中上下文切换的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254975/

相关文章:

c - 如何获取每个进程的 GPU 使用率?

c - 为什么调用函数时会有开销?

c - C 中 switch 语句的开销

cuda - 是否有可用的基于 GPU 的约束求解器? CUDA,OpenCL?

c - OpenAcc 复制输入和复制输出时出错

language-agnostic - GPGPU 是黑客吗?

c++ - 没有虚函数的 C++ 继承开销

ubuntu - CUDA交叉编译错误! cuda-gdb 错误消息 RSEG1058

c++ - 使用 CUDA 对相同数据进行 FFT 每次都会给出不同的结果?

CUDA 8.0 - cudaMemcpy() - 线性或恒定时间操作?