Ich vermute, dass Sie einige falsche Vorstellungen von CUDA und seiner Verwendung haben, insbesondere da Sie von einem "Prozess" sprechen, obwohl es so etwas in der CUDA-Terminologie nicht gibt.
Für die meisten CUDA-Anwendungen sind zwei Dinge wichtig, um eine gute Leistung zu erzielen: die Optimierung des Speicherzugriffs und die Sicherstellung, dass jeder "aktive" CUDA-Thread in einem Warp dieselbe Operation zur gleichen Zeit ausführt wie die anderen aktiven Threads im Warp. Beides klingt so, als ob es für Ihre Anwendung wichtig wäre.
Um Ihren Speicherzugriff zu optimieren, sollten Sie sicherstellen, dass Ihre Lesevorgänge aus dem globalen Speicher und Ihre Schreibvorgänge in den globalen Speicher zusammengeführt werden. Weitere Informationen hierzu finden Sie im CUDA Programmierhandbuch, aber im Wesentlichen bedeutet dies, dass benachbarte Threads in einem Half-Warp von benachbarten Speicherplätzen lesen oder in diese schreiben müssen. Außerdem sollte jeder Thread 4, 8 oder 16 Bytes auf einmal lesen oder schreiben.
Wenn Ihr Speicherzugriffsmuster zufällig ist, sollten Sie die Verwendung von Texturspeicher in Betracht ziehen. Wenn Sie auf Speicher zugreifen müssen, der von anderen Threads in einem Block gelesen wurde, sollten Sie auf gemeinsamen Speicher zurückgreifen.
In Ihrem Fall bin ich nicht sicher, was Ihre Eingabedaten sind, aber Sie sollten zumindest sicherstellen, dass Ihre Schreibvorgänge zusammengeführt werden. Wahrscheinlich werden Sie einen nicht unerheblichen Aufwand betreiben müssen, um Ihre Lesevorgänge effizient zu gestalten.
Für den zweiten Teil würde ich empfehlen, dass jeder CUDA-Thread ein Pixel in Ihrem Ausgabebild verarbeitet. Bei dieser Strategie sollten Sie auf Schleifen in Ihren Kernels achten, die je nach den Daten pro Thread länger oder kürzer ausgeführt werden. Jeder Thread in Ihren Warps sollte die gleiche Anzahl von Schritten in der gleichen Reihenfolge ausführen. Die einzige Ausnahme hiervon ist, dass es keine wirklichen Leistungseinbußen gibt, wenn einige Threads in einem Warp keine Operation ausführen, während die übrigen Threads dieselbe Operation gemeinsam ausführen.
Daher würde ich empfehlen, dass jeder Thread prüft, ob sein Pixel innerhalb eines bestimmten Dreiecks liegt. Wenn nicht, sollte er nichts tun. Ist dies der Fall, sollte er die Ausgangsfarbe für dieses Pixel berechnen.
Außerdem würde ich dringend empfehlen, mehr über CUDA zu lesen, da es scheint, als würden Sie ins kalte Wasser springen, ohne einige der grundlegenden Prinzipien zu verstehen.