我在其他地方读到 cudaMalloc 将跨内核同步。(例如, cudaMalloc 会同步主机和设备吗?)但是,我刚刚测试了这段代码,根据我在可视化分析器中看到的内容,cudaMalloc 似乎没有同步。如果将 cudaFree 添加到循环中,则会同步。我正在使用 CUDA 7.5。有谁知道 cudaMalloc 是否改变了它的行为?或者我错过了一些微妙之处?非常感谢!
__global__ void slowKernel()
{
float input = 5;
for( int i = 0; i < 1000000; i++ ){
input = input * .9999999;
}
}
__global__ void fastKernel()
{
float input = 5;
for( int i = 0; i < 100000; i++ ){
input = input * .9999999;
}
}
void mallocSynchronize(){
cudaStream_t stream1, stream2;
cudaStreamCreate( &stream1 );
cudaStreamCreate( &stream2 );
slowKernel <<<1, 1, 0, …Run Code Online (Sandbox Code Playgroud) cuda ×1