我一直在尝试使用填充数组的CUDA编写代码,将数组的内容写入磁盘,在第一次写入磁盘完成后用不同的值重新填充数组,等等。(我正在使用这个策略,以防止全局内存空间限制我的最终文件大小。)我的问题是是否像
for(n = 0; n < 100; n++) {
kernel<<<blocks, threads>>> (dev_In, dev_Out);
cudaMemcpy(host_Out, dev_Out, size*sizeof(float), cudaMemcpyDeviceToHost);
fwrite(host_Out, sizeof(float), size, fp);
}
是安全的。我假设由于只有默认流,内核执行,内存被复制(同步),最后host_Out被写入文件。这是我不太确定的部分。来自for循环迭代(n + 1)的内核是否会开始执行而来自for循环迭代(n)的fwrite仍在工作?我假设没有,但当我插入行
printf("%d ", n);
刚好在fwrite()之后;在for循环的结束括号之前,在3分钟执行程序期间没有任何反应,直到最后一秒左右,当数字0到99全部一次打印时。这让我想知道printf()命令以及fwrite()命令是否在错误的时间执行。
提前感谢任何建议!