我正在尝试做一个实验。我有两个应用程序。在一个应用程序中,我将堆内存从默认的 8MB 更改为 4MB,然后启动内核,最后我忙着等待。在另一个应用程序中,我只是查询设备堆内存的大小。有趣的是,对于内核启动后的第一个应用程序,我继续获得 4MB,而对于其他应用程序,我继续获得 8MB。为什么这样?
应用程序 1 的代码是 -
__global__ void kernelA()
{
printf("I am running on kernelA\n");
}
int main()
{
size_t size;
cudaDeviceSetLimit(cudaLimitMallocHeapSize,100*sizeof(float));
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %dn",(int)size);
kernelA<<<1,10>>>();
cudaThreadSynchronize();
while(1)
{
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %d\n",(int)size);
}
}
应用程序 2 的代码是 -
int main()
{
int k=1;
size_t size;
for(k=1;k<1000000;k++)
{
cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
printf("Heap size found to be %d\n",(int)size);
}
}