Concurrency 如何同时发布2个CUDA内核?;

Concurrency 如何同时发布2个CUDA内核?;,concurrency,cuda,profiling,nsight,Concurrency,Cuda,Profiling,Nsight,我试图创建4个流来同时启动4个内核,但它似乎是使用nsight连续运行的 我的硬件:RTX2060 我的测试代码如下: #include "cuda_runtime.h" #include <stdio.h> #define N 1000000 __global__ void kernel_1() { double sum = 0.0; for (int i = 0; i < N; i++) { sum = sum +

我试图创建4个流来同时启动4个内核,但它似乎是使用nsight连续运行的

我的硬件:RTX2060

我的测试代码如下:

#include "cuda_runtime.h"
#include <stdio.h>

#define N 1000000

__global__ void kernel_1() 
{
    double sum = 0.0;
    for (int i = 0; i < N; i++) {
        sum = sum + tan(0.1) * tan(0.1);
    }
}

int main()
{
    const int n_streams = 4; 
    cudaStream_t *streams = (cudaStream_t *)malloc(n_streams * sizeof(cudaStream_t));
    for (int i = 0; i < n_streams; i++) {
        cudaStreamCreateWithFlags(&streams[i], cudaStreamNonBlocking);
    }
    dim3 block(1);
    dim3 grid(1);

    for (int i = 0; i < n_streams; i++) {
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
        kernel_1 << <grid, block, 0, streams[i] >> >();
    }

    printf("done\n");
    return 0;
}
#包括“cuda_runtime.h”
#包括
#定义N 1000000
__全局无效内核1()
{
双和=0.0;
对于(int i=0;i();
内核1>();
内核1>();
内核1>();
}
printf(“完成”\n);
返回0;
}
时间表如下所示:

执行管道中不同区域的调度存在延迟。由于编译器优化,您的内核没有做任何工作,因此无法从您的实验中分辨出任何东西。让
sum
参与内存写入(甚至在编译器看来),画面可能会有所不同。内核启动的开销比处理运行内核所需的时间更长?@cwharris:鉴于此内核被编译为空存根,并且不执行任何操作,因此绝对有一个CUDA示例代码。在WDDM GPU上观察并发可能仍然很困难。根据您使用探查器的方式和正在使用的探查器,探查器可能会序列化并发内核。