Question

J'ai écrit ce petit sous-programme qui compare les fonctions mathématiques simples de vecteur, réalisée soit avec une boucle:

f(i) = a(i) + b(i)

ou directement:

f = a + b

ou en utilisant Intel MKL VML:

vdAdd (n, a, b, f)

Les résultats de synchronisation pour n = 50000000 sont:

VML 0,9 sec 0,4 directe boucle 0,4

Et je ne comprends pas, pourquoi VML prend deux fois plus longtemps que les autres méthodes! (Boucle est parfois plus rapide que directe)

Subroutine se trouve sous http://paste.ideaslabs.com/show/L6dVLdAOIf et appelé via

program test

  use vmltests
  implicit none

  call vmlTest()

end program
Était-ce utile?

La solution

Votre code échantillon ont problème potentiel de cache L2, on peut surmonter avec l'optimisation de blocage. Voir la réponse Forum Réseaux Intel® Software pour plus de détails: http: // logiciel .intel.com / fr-fr / forums / showthread.php? t = 80041

Intel® optimisation Avis:

  

compilateurs Intel®, les bibliothèques associées   et des outils de développement associés, peuvent   inclure ou utiliser des options   optimiser pour les jeux d'instructions qui sont   disponible à la fois Intel® et non Intel   microprocesseurs (par exemple SIMD   jeux d'instructions), mais ne pas optimize   également pour les processeurs non Intel.   En outre, certaines options du compilateur   pour les compilateurs Intel, y compris certains   qui ne sont pas spécifiques à Intel   micro-architecture, sont réservés   microprocesseurs Intel. Pour une analyse détaillée   description des options du compilateur Intel,   y compris les jeux d'instructions et   microprocesseurs spécifiques qu'ils   implicate, s'il vous plaît se référer à la « Intel®   Compilateur utilisateur et guides de référence »   sous « Options du compilateur. » Beaucoup   routines bibliothèque qui font partie de   produits du compilateur Intel® sont plus   hautement optimisé pour Intel   microprocesseurs que pour les autres   microprocesseurs. Alors que les compilateurs   et les bibliothèques dans le compilateur Intel®   produits offrent des optimisations pour les deux   Intel et Intel compatible   microprocesseurs, selon la   options sélectionnées, votre code et   d'autres facteurs, vous obtiendrez probablement   performances supplémentaires sur Intel   microprocesseurs.

     

compilateurs Intel®, les bibliothèques associées   et des outils de développement associés, peuvent   ou peut ne pas optimiser au même degré   pour les processeurs non Intel pour   optimisations qui ne sont pas uniques à   microprocesseurs Intel. Celles-ci   optimisations incluent Intel® en streaming   SIMD Extensions 2 (Intel® SSE2),   Intel® 3 extensions Streaming SIMD   (Intel® SSE3) et Supplemental   Streaming SIMD Extensions 3 (Intel®   SSSE3) Les jeux d'instructions et d'autres   optimisations. Intel ne   garantir la disponibilité,   fonctionnalité ou l'efficacité de tout   optimisations sur des microprocesseurs   fabriqué par Intel.   optimisations dépendantes microprocesseur   dans ce produit sont destinés à être utilisés   avec des microprocesseurs Intel.

     

Alors que Intel croit nos compilateurs et   les bibliothèques sont d'excellents choix à   aider à obtenir le meilleur   performances sur Intel® et non Intel   microprocesseurs, Intel recommande   vous évaluez d'autres compilateurs et   bibliothèques pour déterminer qui répondent le mieux   vos besoins. Nous espérons gagner   votre entreprise en cherchant à offrir la   meilleure performance de tout compilateur ou   bibliothèque; s'il vous plaît laissez-nous savoir si vous   nous ne faisons pas trouver

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