2013-06-13 1 views
0

У меня есть система под управлением Windows Server 2012. Система имеет 128 ГБ памяти и 6 графических процессоров Nvidia K10 с 8 ГБ памяти.Ограничения cudaHostAlloc

Я использую закрепленную память хоста для всех своих устройств (около 47 ГБ, 12 * 3,92 ГБ на устройство). Причина, по которой я хочу использовать закрепленную память, заключается в том, что мое приложение работает примерно 12-15 раз, так как я могу использовать переносы асинхронной памяти.

У меня есть память 3,92 ГБ на каждом устройстве. Если я использую cudaHostAlloc и пытаюсь выделить 3,92 ГБ, я получаю cudaErrorMemoryAllocation, когда пытаюсь выделить память хоста для второго устройства. Я использую cudaHostAlloc с флагом по умолчанию cudaHostAllocDefault.

Если вызов cudaHostAlloc с 3,79 ГБ (вместо 3,92), то все работает так, как ожидалось, поэтому я могу выделить 3,79 ГБ фиксированной памяти для всех 12 устройств.

Я не понимаю этого ограничения, и я попытался использовать VirtualAlloc, VirtualLock и cuMemHostRegister, но я столкнулся с той же проблемой при вызове cuMemHostRegister. Я убедился, что рабочего набора достаточно, и VirtualAlloc, VirtualLock комбо работает с указанным рабочим набором. cudaHostAlloc, похоже, не заботится о том, какой рабочий набор я использую. Рабочий набор по умолчанию работает до тех пор, пока я не пытаюсь использовать более 3,79 ГБ памяти на устройство с помощью cudaHostAlloc.

У кого-нибудь есть объяснение этого поведения?

+0

Поскольку @Rakkun предположил, что это может быть проблема с 32-разрядной версией. Но это может быть ограничение от ОС, как предлагается в [this] (https://devtalk.nvidia.com/default/topic/481387/unexpected-limit-in-cudahostalloc-failing-to-allocate-large-amounts-of -pinned страниц автоподстройки памяти /). Лучше проверить, что тоже с ограничениями пула памяти. Также отметьте [Примечания и примечания к выпуску инструментов CUDA Toolkit] (http://developer.download.nvidia.com/compute/cuda/5_0/rel/docs/CUDA_Toolkit_Release_Notes_And_Errata.txt). Он содержит некоторую информацию о ограничениях cudaMallo. –

+0

Используете ли вы режим tcc для the.gpus? – talonmies

+0

Это 64-битное приложение, и да, я использую TCC с отключенным ECC. Однако я буду следовать рекомендациям и читать заметку о выпуске и исправления. – patrik

ответ

2

Я думаю, проблема в том, что закрепленная память заблокирована. «Хранилище с блокировкой страниц - это ограниченный ресурс, поэтому распределение в памяти с блокировкой страниц начнется с ошибкой задолго до распределения в доступной для просмотра памяти. Кроме того, по , уменьшая объем физической памяти, доступной операционной системе для подкачки, потребляет слишком большая память с блокировкой страниц снижает общую производительность системы ». Вы можете найти более подробную информацию в 3.2.4 в руководстве по программированию Cuda

+0

В принципе согласен. Однако я могу изменить рабочий набор и выделить и заблокировать требуемую память с помощью VirtualAlloc и VirtualLock, но cuMemHostRegister все же сработает. Я не понимаю разницу в распределении 12 раз 3,92, что не работает по сравнению с распределением 12 раз 3,79, что работает – patrik

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