Abstract: 本文介绍内核的并发执行,以及相关的知识Keywords: 流,事件,深度优先,广度优先,硬件工作队列,默认流阻塞行为
开篇废话
没有废话,继续前面的内容,上文中我们说到了流,事件和同步等的概念,以及一些函数的用法,接下来的几个例子,介绍并发内核的几个基本问题,包括不限于以下几个方面:
- 使用深度优先或者广度优先方法的调度工作
- 调整硬件工作队列
- 在Kepler设备和Fermi设备上避免虚假的依赖关系
- 检查默认流的阻塞行为
- 在非默认流之间添加依赖关系
- 检查资源使用是如何影响并发的
非空流中的并发内核
本文我们开始使用NVIDIA提供的另一个可视化工具nvvp进行性能分析,其最大用途在于可视化并发核函数的执行,第一个例子中我们就能清楚地看到各个核函数是如何执行的,本例子中使用了同一个核函数,并将其复制多份,并确保每个核函数的计算要消耗足够的时间,保证执行过程能够被性能分析工具准确的捕捉到。
我们的核函数是:
__global__ void kernel_1()
{
double sum=0.0;
for(int i=0;i&l