Определить максимальную длину тяги :: device_vector - PullRequest
1 голос
/ 01 июля 2011

Есть ли способ определить максимальный размер thrust::device_vector<T>, который можно безопасно выделить?

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Нет прямого пути, который я знаю.Мой обычный подход состоял в том, чтобы сделать что-то вроде этого:

const size_t MB = 1<<20;

size_t reserved, total;
cudaMemGetInfo( &reserved, &total );
char fail = 0;
while( cudaMalloc( (void**)&pool, reserved ) != cudaSuccess )
{
    reserved -= MB;
    if( reserved < MB )
    {
        fail = 1;
        break;
    }
}

, который начинается с общего объема свободной памяти, возвращаемого с cudaMemGetInfo, а затем уменьшается до моего «разумного» размера (насколько я могу сказать вВ эпоху GT200 у графического процессора (GPU) есть пара страниц разного размера (самый большой - 1 МБ).Цикл продолжается до тех пор, пока вы либо не получите выделение, либо память не станет настолько фрагментированной или исчерпанной, что даже одна страница потерпит неудачу.Не очень красиво, но, кажется, работает 99,999% времени.

0 голосов
/ 01 июля 2011

используйте cudaMemGetInfo.

документы здесь

...