Question

J'utilise un moteur qui permet d'écrire le code SIMD et il fonctionne rapidement. Mais il n'y a qu'un seul bloc qui a tout le code.

Je comprends que ce code est exécuté indépendamment sur chaque entité simultanément, mais quand il n'y a qu'une seule chose qui change, est-il encore plus rapide de le calculer malgré tout? 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, donc sera-t-il calculé pour chaque sommet sur SIMD? Si oui, est-ce toujours efficace?

Fondamentalement, le fait de pouvoir exécuter cela en parallèle l'emporte-t-il à l'emprunte du coût de la calcul, indépendamment du sens général de la programmation SIMD?

Était-ce utile?

La solution

Ce code est exécuté indépendamment sur chaque entité simultanément

Non, ce n'est pas ainsi que SimD fonctionne.

Avec SIMD, toutes les unités arithmétiques fonctionnent en étape de verrouillage, effectuant des opérations identiques. Il n'y a aucune indépendance.

Généralement, vous feriez mieux de calculer des constantes partagées une seule fois, dans un code séquentiel. De cette façon, le moteur SIMD passera moins de temps sur chaque tranche de sommets.

L'exception serait si le calcul est court, le SIMD est un co-processeur (comme GPGPU), et les données sont déjà dans ce co-processeur. L'informatique en utilisant SIMD pourrait facilement battre les données de déplacement vers le processeur séquentiel et le dos.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top