Question

Je dois optimiser un peu de code C, ce qui fait beaucoup de calculs de physique, en utilisant des extensions SIMD sur la SPE du processeur Cell. Chaque opérateur vectoriel peut traiter 4 flotteurs en même temps. Donc, idéalement, je me attends à un 4x dans le plus speedup cas optimiste.

Pensez-vous que l'utilisation des opérateurs de vecteurs pourrait donner plus gros speedups?

Merci

Était-ce utile?

La solution

La meilleure optimisation se produit en repensant l'algorithme. Éliminer les étapes inutiles. Plus d'une manière directe d'accomplir le même résultat. Calculer la solution dans un domaine plus pertinent au problème.

Par exemple, si le tableau de vecteur est une liste de n qui sont tous sur la même ligne, il suffit de transformer seulement les points d'extrémité et interpoler des points intermédiaires.

Autres conseils

Il peut donner une meilleure vitesse jusqu'à 4 fois de points sur flottant droit que les instructions SIMD pourraient être moins exactes (pas tant à donner trop de problèmes cependant) et ainsi prendre moins de cycles à exécuter. Cela dépend vraiment.

Le meilleur plan est d'apprendre autant sur le processeur que vous optimisez pour que possible. Vous trouverez peut-être il peut vous donner beaucoup mieux que 4x améliorations. Vous pouvez découvrir que vous ne pouvez pas. Nous ne pouvons pas dire que sans le savoir plus sur l'algorithme vous optimisez et quel processeur vous ciblez.

Sur leur propre, non. Mais si le processus de ré-écrire vos algorithmes pour les aider à améliorer arrive aussi, par exemple, la localité de cache ou comportement de branchement, vous pouvez trouver accélérations sans rapport. Cependant, cela est vrai de toute ré-écriture ...

Ceci est tout à fait possible.

  • Vous pouvez faire des optimisations micro plus intelligent niveau d'instruction qu'un compilateur, si vous savez ce que vous faites.
  • La plupart des jeux d'instructions SIMD offre plusieurs opérations puissantes qui n'ont pas d'équivalent dans le code scalaire normale FPU / ALU (par exemple PMOY / PMIN etc.) dans SSE2. Même si ceux-ci ne correspondent pas à votre problème exactement, vous pouvez souvent combiner ces instructions pour un grand effet.
  • Pas sûr Cell, mais la plupart des jeux d'instructions SIMD ont des caractéristiques pour optimiser l'accès mémoire, par exemple les données prélecture dans le cache. J'ai eu de très bons résultats avec ces derniers.

Maintenant, ce n'est pas cellulaire ou PPC du tout, mais un simple filtre de convolution d'image de mes a un 20x speedup (C contre SSE2) sur Atom, ce qui est supérieur au niveau de parallélisme (16 pixels à la fois) .

Cela dépend de l'architecture .. Pour le moment, je suppose que l'architecture x86 (aka SSE).

Vous pouvez obtenir le facteur quatre facilement sur des boucles serrées. Il suffit de remplacer vos calculs existants avec instructions SSE et vous avez terminé.

Vous pouvez même obtenir un peu plus que cela parce que si vous utilisez SSE vous faites le calcul dans les registres qui ne sont généralement pas utilisés par le compilateur. Cela libère le but registre général pour d'autres tâches telles que le contrôle de la boucle et le calcul d'adresse. En bref, le code qui entoure l'instruction SSE sera plus compact et d'exécuter plus rapidement.

Et puis il y a la possibilité de laisser entendre le contrôleur de mémoire la façon dont vous voulez accéder à la mémoire, par exemple si vous voulez stocker des données d'une manière qu'il contourne le cache ou non. Pour les algorithmes qui ont faim de bande passante qui peuvent vous donner une vitesse plus supplémentaire ontop de cela.

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