2014-11-25 4 views
1

Я хотел бы знать свое свободное и полное память о моих GPU устройств благодаря функции cuMemGetInfo()cuMemGetInfo() и size_t ограничение

// ----- Before any variable initialization ----- 
size_t free; 
size_t total; 
CUresult result=cuMemGetInfo(&free,&total); 

я получаю результат:

Free memory : 4095 MB 
Total memory : 4095 MB 

Я работаю над Tesla C2070 с 6 ГБ памяти на 64-битной Windows 7. Однако мое приложение работает в 32 бит. Мой код должен дать мне что-то вроде:

Free memory : 5376 MB 
Total memory : 5376 MB // values given by the deviceQuery.exe example of CUDA 

I 4095 * 1024 * 1024 = 4293918720 составляет около 2^32 (после округления). Действительно, size_t s - указатель на unsigned int (на 4 байта).

Итак, вот мой вопрос. Можно ли изменить определение size_t, чтобы указать на unsigned long, например?

благодаря

+1

Задайте свой хост-код для компиляции для 64 бит, и вы должны получить 64 бит 'size_t'. –

+0

О, я помню, что я не могу запустить 64-битное приложение из-за совместимости между Qt, CUDA и Visual Studio. Есть ли способ обойти это? –

+1

@ ParkYoung-Bae, если вы хотите дать ответ на эти строки, я бы поднял голову. Компиляция приложения в виде 64-битного означает * единственный способ * получить доступ к памяти GPU за пределами границы 4 ГБ. –

ответ

2

size_t обычно 32 бит при компиляции для 32 битых целей. Если вы хотите получить 64 бита size_t, просто установите ваш компилятор на целевые 64-разрядные платформы.

Если вы используете цепочку сборки Visual Studio, here is the documentation on the topic. Если вы используете цепочку сборки Qt, я не знаю, как это делается, но это как-то возможно.

Вы говорите, что в комментариях:

Я не могу запустить приложение 64-битную из-за совместимости Qt, CUDA и Visual Studio. Есть ли способ обойти это?

Насколько мне известно, это невозможно. Если вы построите 32 бита, вы привяжетесь к 32-разрядной версии cuMemGetInfo, которая работает с 32 битами size_t. Там не обойтись.

Однако, если память используется, я работал в прошлом с 64-разрядными приложениями, построенными с помощью VS2012, CUDA 6 и Qt 4.8, поэтому у вас должна быть возможность настроить цепочку инструментов на 64 бит.