Моя программа OpenCL включает около 7 миллиардов рабочих элементов. В моей программе на C ++ я бы установил это в my global_item_size:
size_t global_item_size = 7200000000;
Если моя программа скомпилирована для 64-битных систем (x64), этот глобальный размер в порядке, поскольку SIZE_MAX (максимальное значение size_t ) намного превышает 7 миллиардов. Однако для обеспечения обратной совместимости я хочу убедиться, что моя программа может компилироваться в 32-битные системы (x86). В 32-битных системах SIZE_MAX составляет около 4 миллиардов, что меньше моего глобального размера, 7 миллиардов. Если я попытаюсь установить глобальный размер на 7 миллиардов, это приведет к переполнению. Что я могу сделать в этом случае?
Одним из решений, о котором я думал, было создание многомерного глобального и локального размера. Однако это решение требует, чтобы ядро вычисляло исходный глобальный размер (потому что мое ядро сильно зависит от глобального и локального размера), что приведет к потере производительности.
* 1007 ядра. Я думаю, что это решение было бы немного «неаккуратным», и синхронизация ядер тоже не была бы лучшим решением. чем максимальный размер size_t? Если это невозможно, какие обходные пути?