代码:
__global__ void K1() {
int p=1;
for(int i=0; i<100000; ++i)
for(int j=0; j<100000; ++j)
p*=(i+100)*j;
printf("K1\n");
}
__global__ void K2() {
printf("K2\n");
}
int main() {
int *ptr;
cudaStream_t s1, s2;
cudaStreamCreate(&s1);
cudaStreamCreate(&s2);
K1<<<1, 1, 0, s1>>>();
cudaHostAlloc(&ptr, 1, 0);
K2<<<1, 1, 0, s2>>>();
cudaDeviceSynchronize();
return 0;
}
输出:
K2
K1
问题:
s1
与默认流相同吗?如果主机线程在它们之间发出以下任何一个操作,则来自不同流的两个命令不能同时运行:
- 页面锁定的主机内存分配,
在K2
完成后不应该K1
开始吗?