Я пытаюсь сделать эксперимент. У меня два приложения. В одном приложении я меняю память кучи с 8 МБ по умолчанию на 4 МБ, а затем запускаю ядро, и, наконец, я занят. В другом приложении я просто запрашиваю размер памяти кучи устройства. Интересно, что для первого приложения после запуска ядра я продолжаю получать 4 МБ, а для другого приложения я продолжаю получать 8 МБ. Почему так?Память кучи памяти CUDA для различных приложений
Код для применения 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);
}
}
это означает, что различные пользовательские приложения получают разную память кучи. Я имею в виду, когда другое пользовательское приложение пытается получить доступ к графическому процессору, тогда драйвер создает 8-мегабайтную новую кучную память из глобальной памяти. –