Точная программа не важна
Это желаемое за действительное.Проблема, которую вы пытаетесь решить, очень важна важна;если бы это было так же просто, как перекомпиляция кода C ++ в двоичные файлы шейдеров GPU, почти все программное обеспечение сделало бы это для свободного увеличения скорости.
Как правило, вы не сможете конвертировать всю программу C ++ 1: 1 вядро графического процессора, и даже если вам удастся это сделать, оно будет работать крайне плохо.Вам действительно нужно приложить усилия, чтобы переосмыслить вашу проблему с точки зрения операций типа SIMD, чтобы добраться куда угодно с графическими процессорами.
В частности, у вас, кажется, создается впечатление, что каждое ядро "ядра" GPUявляется независимымЭто не так, их группы работают в режиме блокировки, поэтому, если ваш код перегружен, у вас будет очень плохое использование.Они также разделяют шину памяти, поэтому, если каждый поток обращается к некоррелированным областям памяти, это значительно замедлит выполнение, и вы не сможете достаточно быстро подавать ALU / FPU.
Память также является проблемой,но не только из-за общего объема VRAM, как вы указали, но и потому, что локальные переменные используют «личную» память, которая на самом деле является регистром и очень ограниченным ресурсом (в лучшем случае измеряется в килобайтах).
Я рекомендую ознакомиться с руководствами по оптимизации OpenCL, опубликованными всеми основными поставщиками графических процессоров.Это даст вам хорошее представление о том, какой код работает хорошо, а что нет, и какие соображения следует учитывать при принятии решения о том, какой код выгружать в графический процессор и как.