J'utilise un moteur qui permet d'écrire du code SIMD, et il fonctionne rapidement. Mais il n'y a qu'un seul bloc qui a tout le code.Comment se comporte le SIMD dans ce cas?
Je comprends que ce code est exécuté indépendamment sur chaque entité simultanément, mais quand il n'y a qu'un seul changement, est-il encore plus rapide de le calculer indépendamment? Est-ce l'idée avec SIMD, parallélisme?
Par exemple:
void simdFunction()
{
center = mesh.center(); // always the same
vert.pos.x = center.x; // run on each vertex
}
Dans ce cas, le centre est toujours le même, il en sera calculé pour chaque sommet sur SIMD? Si oui, est-ce encore efficace?
Fondamentalement est-ce que le fait de pouvoir exécuter cela en parallèle l'emporte sur le coût de calcul, quel que soit le sens général de la programmation SIMD?
Merci Ben, il me semble mieux comprendre maintenant. Mais je n'ai pas de contrôle sur ça. La spécification du moteur définit que je ne peux avoir qu'un seul contexte SIMD. Je peux écrire d'autres fonctions, etc. mais dès que je les appelle dans le contexte principal, ce sera la même chose. Donc je suppose que je n'ai pas le choix. –