2012-06-01 5 views
1

Я пытаюсь сделать эксперимент. У меня два приложения. В одном приложении я меняю память кучи с 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);  
    } 
} 

ответ

1

CUDA выполнение API вызовов влияет только на CUcontext в процессе вызова, связанный с конкретным устройство. cudaDevice * напрямую не влияет на состояние других процессов или другого CUcontext в том же процессе, который может работать на одном и том же устройстве CUDA.

+0

это означает, что различные пользовательские приложения получают разную память кучи. Я имею в виду, когда другое пользовательское приложение пытается получить доступ к графическому процессору, тогда драйвер создает 8-мегабайтную новую кучную память из глобальной памяти. –

Смежные вопросы