OpenCL и большие наборы данных

Доброго времени суток.
Решил замерить за какое время выполняются относительно простые выражения на GPU/CPU под OpenCL, найти его зависимость от размеров входных данных и спрогнозировать дальнейший рост, благо значения монотонно возрастают и ряд вполне описывается полиномом третьего порядка.
Чтобы разница между временем выполнения небольших выражений была заметней, замеры делаю на больших объемах данных.

График по полученным данным имеет перелом, который существенно ухудшает прогноз, потому решил расширить рамки замера, чтобы найти участок функции без резких колебаний и пронозировать по нему, да и просто оценить дальнейшее поведение ряда, но уперся в доступный размер массива 2^32.

Отсюда несколько вопросов:
Есть ли возможность (возможно средствами opencl) создать в памяти массив большего размера, или придется подгружать с диска?
Разница между CL_PROFILING_COMMAND_END и CL_PROFILING_COMMAND_START показывает только время работы кернела, или и время передачи в него данных?

Forums: 

Вообще-то, 2^32 даже int-ов

Вообще-то, 2^32 даже int-ов (а меньше - нет смысла) - это 16 гигабайт данных.

Кроме того, на OpenCL существует дурацкое ограничение в 1/4 памяти прибора (никогда в него не упирался, поэтому до сих пор не знаю - это на одну аллокацию или на все аллокации одного kernel, но сдается мне что на юнит исполнения, чтобы асинхронность обеспечить),

Как следствие, вы в реальности в ограничение 2^32 вряд-ли упретесь, а упретесь гораздо раньше в другие ограничения.

Видимо я некорректно

Видимо я некорректно выразился, для массива типа float предельный элемент к которому я могу обратиться (2^32)/16.

А по поводу разницы между CL_PROFILING_COMMAND_END и CL_PROFILING_COMMAND_START, включает ли в себя время передачи данных в кернел??
В описании clGetEventProfilingInfo сказано, что это время начала и конца работы кернела, однако для пустого кернела также получаю ненулевую разницу.
Либо можно как-нибудь еще замерить время, уходящее на передачу данных в кернел?

Ну даже (2^32)/16 - это

Ну даже (2^32)/16 - это четверть миллиарда.

Т.е. получается, что вы можете иметь гигабайт флоатов. Для 32-битной реализации OpenCL (т.е. адресуемое пространство 4Gb) и с учетом ограничения в 1/4 памяти устройства - должно быть нормально.

CL_PROFILING я не пользовался, но судя по контексту - это относится к одному событию (команде) в очереди, т.е. без передачи данных.

Для пустого кернела тоже должно быть "порядка микросекунды" (опять же забыл цифры, кажется пустой CUDA kernel запускается микросекунд 5-10, по порядку величины)