Я не так хорошо знаком с OpenCL, но нашел соответствующее обсуждение на форуме NVIDIA .
Также подумал, что я отвечу на упоминание CUDA на случай, если кто-нибудь встретит позже ...
Я не думаю, что в родной CUDA есть способ выделить больше памяти, чем физически доступно на устройстве. Фактически, даже на больших картах вы не можете выделить один большой непрерывный массив, потому что карта имеет отдельные банки памяти, например в дни C1060 я вспоминаю о превышении лимита в 1,5 Гб на картах 3 Гб. Не могли бы вы предоставить некоторые подробности того, что вы подразумеваете под CUDA, разрешающей такие большие ассигнования?
Если вы используете ArrayFire (или Jacket ), у них есть основная идея виртуальная память : если у вас много небольших выделений, которые в сумме больше, чем доступно на карте, тогда он сохраняет только самые важные данные на устройстве, в то время как другие части хранятся на хосте до тех пор, пока они не понадобятся.