Для очень старой версии CUDA, которую вы используете, cudaMemGetInfo
не является частью API времени выполнения. У него есть аналог в драйвере cuMemGetInfo
, который можно использовать вместо него. Обратите внимание, что для использования версии API драйвера этого вызова сначала необходимо установить контекст. Это должно работать на CUDA 2.x:
// CUDA 2.x version
#include <cstdio>
#include <cuda.h>
#include <cuda_runtime_api.h>
int main(){
unsigned int f, t;
cudaSetDevice(0);
cudaFree(0); // This will establish a context on the device
cuMemGetInfo(&f, &t);
fprintf(stdout,"%d %d\n",f/1024,t/1024);
return 0;
}
РЕДАКТИРОВАТЬ: этот ответ применяется к CUDA 3.0 и более поздним версиям:
Ваша проблема не cudaMemGetInfo
, это аргументы, которые вы ей предоставляете. Я бы предсказал, что это:
// CUDA 3.0 or later version
#include <cuda.h>
#include <cuda_runtime_api.h>
int main(){
size_t f, t;
cudaSetDevice(0);
cudaMemGetInfo(&f, &t);
return 0;
}
будет работать там, где не работает ваш пример. Обратите внимание, что nvcc
использует компилятор хоста C ++ для компиляции кода хоста, и он не найдет экземпляры функций API с неверными аргументами. Обратите внимание, что прототип cudaMemGetInfo равен
cudaError_t cudaMemGetInfo(size_t * free, size_t * total)
и аргументы должны быть size_t
, что не совпадает с unsigned int
на многих платформах.