Concurrency 如何同时发布2个CUDA内核?;
我试图创建4个流来同时启动4个内核,但它似乎是使用nsight连续运行的 我的硬件:RTX2060 我的测试代码如下: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 +
#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上观察并发可能仍然很困难。根据您使用探查器的方式和正在使用的探查器,探查器可能会序列化并发内核。