gpt4 book ai didi

cuda - cudaMalloc和cudaFree是同步还是异步调用?

转载 作者:行者123 更新时间:2023-12-05 00:31:59 46 4
gpt4 key购买 nike

我想测试cudaMalloc和cudaFree是否是同步调用,因此我对CUDA SDK中的“simpleMultiGPU.cu”示例代码进行了一些修改。以下是我更改的部分(未缩进的行):

float *dd[GPU_N];;
for (i = 0; i < GPU_N; i++){cudaSetDevice(i); cudaMalloc((void**)&dd[i], sizeof(float));}
//Start timing and compute on GPU(s)
printf("Computing with %d GPUs...\n", GPU_N);
StartTimer();

//Copy data to GPU, launch the kernel and copy data back. All asynchronously
for (i = 0; i < GPU_N; i++)
{
//Set device
checkCudaErrors(cudaSetDevice(i));

//Copy input data from CPU
checkCudaErrors(cudaMemcpyAsync(plan[i].d_Data, plan[i].h_Data, plan[i].dataN * sizeof(float), cudaMemcpyHostToDevice, plan[i].stream));

//Perform GPU computations
reduceKernel<<<BLOCK_N, THREAD_N, 0, plan[i].stream>>>(plan[i].d_Sum, plan[i].d_Data, plan[i].dataN);
getLastCudaError("reduceKernel() execution failed.\n");

//Read back GPU results
checkCudaErrors(cudaMemcpyAsync(plan[i].h_Sum_from_device, plan[i].d_Sum, ACCUM_N *sizeof(float), cudaMemcpyDeviceToHost, plan[i].stream));
cudaMalloc((void**)&dd[i],sizeof(float));
cudaFree(dd[i]);

//cudaStreamSynchronize(plan[i].stream);
}

通过在大循环中分别注释掉cudaMalloc行和cudaFree行,我发现对于2-GPU系统,GPU处理时间分别为30毫秒和20毫秒,因此我得出结论,cudaMalloc是异步调用,而cudaFree是一个异步调用。同步调用。不确定这是否成立,也不确定CUDA体系结构的设计关注点是什么。
我的计算能力是2.0,我同时尝试了cuda4.0和cuda5.0。

最佳答案

这两个功能是同步的。

关于cuda - cudaMalloc和cudaFree是同步还是异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997579/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com