最近在对一个算法做CUDA编写,在测试时间的时候,发现cudaMalloc 耗时特别厉害,在程序中只有一个传入数据,
double* CudaDat_GPU;
cudaMalloc((void**) &CudaDat_GPU,sizeof(double)PNum1isize);其中PNum1为24,isize大小为53.
由于这个核函数会运行四次,测试时间发现,第一次cudamalloc为87ms 后面三次时间为1ms,我想请问请问一下,怎么会有这个打的差距呢,我的显卡是GTX 650 ti
楼主您好:
首次调用涉及到runtime初始化等因素,慢很正常。
(例如,您如果程序上去开头来个空kernel, 并等待它完成,依然也会很慢)
后续的1ms一次如果依然无法忍受,建议减少分配、释放的次数,
或者一次性分配一大段显存,然后实现自己的分配器。
感谢来访。
回到您的问题:
您的一个kernel运行4次,没必要分配和释放4次的,您完全可以就分配1次,然后反复重用。
您觉得呢?
谢谢大家的回复,我去试试四次完了再分配和释放,看看运行效果。