У меня есть система под управлением 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.
У кого-нибудь есть объяснение этого поведения?
Поскольку @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. –
Используете ли вы режим tcc для the.gpus? – talonmies
Это 64-битное приложение, и да, я использую TCC с отключенным ECC. Однако я буду следовать рекомендациям и читать заметку о выпуске и исправления. – patrik