Когда я запускаю следующий фрагмент кода, сообщаемый общий объем памяти моего графического процессора изменяется (в любом случае, согласно cudaMemGetInfo
). Это поведение не упомянуто в документации для cudaMemGetInfo
, в которой говорится, что total
должен содержать общий объем памяти на моем устройстве, который может быть выделен (который не может измениться без установки другого графического процессора в моей системе, верно?). Может кто-нибудь объяснить, почему это происходит? Кажется, что это не происходит, когда я не звоню cudaMallocManaged
.
#include <iostream>
void printStats()
{
size_t free, total;
cudaMemGetInfo(&free, &total);
std::cout << "free: " << free << "\ntotal: " << total << std::endl;
}
int main(void)
{
// Before memory allocation
printStats();
int N = 1;
float *x, *y;
cudaMallocManaged(&x, N*sizeof(float));
cudaMallocManaged(&y, N*sizeof(float));
// After memory allocation.
printStats();
cudaFree(x);
cudaFree(y);
// After freeing the memory.
printStats();
return 0;
}
результат:
free: 94383273356630
total: 20
free: 5661994326
total: 4
free: 140729276827856
total: 94383273355680