Dans un vrai GPU, au lieu d'avoir plusieurs cœurs essayant de lire / écrire la même région du tampon de profondeur et de tenter de se synchroniser entre eux, le tampon de profondeur est divisé en tuiles (telles que 16 × 16 ou 32 × 32), et chacune la tuile est affectée à un seul noyau. Ce noyau est alors responsable de toute la pixellisation de cette tuile: tous les triangles qui touchent cette tuile seront tramés (dans cette tuile) par le noyau propriétaire. Il n'y a alors aucune interférence entre les cœurs, et il n'est pas nécessaire qu'ils se synchronisent lorsqu'ils accèdent à leur partie du framebuffer.
Cela implique que les triangles qui touchent plusieurs tuiles devront être tramés par plusieurs coeurs. Il y a donc une étape de redistribution du travail entre le traitement de la géométrie (opérations sur les sommets et triangles) et le traitement des pixels.
À l'étape de la géométrie, chaque cœur peut traiter un bloc de primitives d'entrée; puis, pour chaque primitive, il peut rapidement déterminer les tuiles touchées par la primitive (c'est ce que l'on appelle la «rasterisation grossière») et ajouter la primitive à une file d'attente pour chaque cœur qui possède l'une des tuiles affectées.
Ensuite, à l'étape des pixels, chaque cœur peut lire la liste des primitives dans sa file d'attente, calculer la couverture en pixels pour les carreaux que possède le cœur et procéder aux tests de profondeur, à l'ombrage des pixels et à la mise à jour du framebuffer, sans aucune coordination supplémentaire. avec d'autres noyaux.