Я подозреваю, что у вас есть некоторые неправильные представления о CUDA и о том, как его использовать, тем более что вы ссылаетесь на «процесс», когда в терминологии CUDA такого нет.
Для большинства приложений CUDA для достижения хорошей производительности есть две важные вещи: оптимизация доступа к памяти и обеспечение того, чтобы каждый «активный» поток CUDA в деформации выполнял ту же операцию, что и другие активные потоки в деформации. Оба они звучат так, как будто они важны для вашего приложения.
Чтобы оптимизировать доступ к памяти, вы должны убедиться, что ваши чтения из глобальной памяти и ваши записи в глобальную память объединены. Вы можете прочитать больше об этом в руководстве по программированию CUDA, но это, по сути, означает, что смежные потоки в полусфере должны читать или записывать в смежные области памяти. Кроме того, каждый поток должен читать или записывать 4, 8 или 16 байтов за раз.
Если ваш шаблон доступа к памяти является случайным, вам, возможно, придется подумать об использовании текстурной памяти. Когда вам нужно обратиться к памяти, которая была прочитана другими потоками в блоке, вам следует использовать общую память.
В вашем случае я не уверен, каковы ваши входные данные, но вы должны по крайней мере убедиться, что ваши записи объединены. Вам, вероятно, придется приложить немного нетривиальных усилий, чтобы ваши чтения работали эффективно.
Для второй части я бы порекомендовал каждому потоку CUDA обрабатывать один пиксель в вашем выходном изображении. С помощью этой стратегии вы должны следить за циклами в ваших ядрах, которые будут выполняться дольше или короче в зависимости от данных для каждого потока. Каждый поток в ваших деформациях должен выполнять одинаковое количество шагов в одинаковом порядке. Единственное исключение из этого состоит в том, что нет реального снижения производительности за то, что некоторые потоки в деформации не выполняют никаких операций, в то время как остальные потоки выполняют одну и ту же операцию вместе.
Таким образом, я бы рекомендовал каждому потоку проверять, находится ли его пиксель внутри заданного треугольника. Если нет, то ничего не должно делать. Если это так, он должен вычислить выходной цвет для этого пикселя.
Кроме того, я настоятельно рекомендую прочитать больше о CUDA, поскольку кажется, что вы прыгаете в глубокий конец, не имея хорошего понимания некоторых основных принципов.