10
votes

Produit DOT - SSE2 vs blas

Quel est mon meilleur choix pour calculer le produit DOT d'un vecteur x avec un grand nombre de vecteurs Y_I, où X et Y_I sont de longueur 10K environ.

  1. Shove the Y est dans une matrice et utilisez une routine optimisée s / dgemv ?
  2. ou peut-être essayer de codage à base de codage une solution SSE2 (je n'ai pas de SSE3, selon CPUInfo).

    Je cherche juste des conseils généraux ici, de sorte que toute suggestion sera utile.
    Et oui, j'ai besoin de la performance. Merci pour n'importe quelle lumière.


1 commentaires

Quel compilateur utilisez-vous?


5 Réponses :


4
votes

Je pense que GPU sont spécifiquement conçus pour effectuer des opérations comme celle-ci rapidement (entre autres). Vous pouvez donc probablement utiliser des bibliothèques DirectX ou OpenGL pour effectuer les opérations vectorielles. D3DXVEC2DOT Cela vous permettra également de vous enregistrer du temps CPU .


3 commentaires

D3dxvec2dot n'utilise pas le GPU. Et à côté de cela, vous ne voyez pas une vitesse d'accélération des programmes GPGPU lorsque vous transformez de très grands ensembles de données ou utilisez des programmes très «coûteux» sur le GPU. Cela est dû au coût de la mise en place du GPU pour faire le travail, puis de lire le résultat. Chaque transfert de données vers / depuis le GPU est une opération très coûteuse.


Il est difficile de battre le produit DOT de DirectX si des flotteurs sont suffisamment bons.


Les processeurs actuels sont également tout à fait capables d'effectuer ce type de traitement.



0
votes

CoDcoding Une solution SSE2 n'est pas très difficile et apportera une bonne vitesse sur une routine pure C. Combien cela apportera une routine blas doit être déterminé par vous.

La plus grande vitesse est dérivée en structurant les données dans un format, de sorte que vous puissiez exploiter le parallélisme et l'alignement des données.


0 commentaires

1
votes

Alternatives pour les routines de blas optimisées:

  • Si vous utilisez des compilateurs Intel, vous pouvez Avoir accès à Intel MKL
  • pour d'autres compilers Atlas fournit généralement de beaux numéros de performance

0 commentaires

0
votes

J'utilise un gotoblas. Ce sont les routines de noyau de haute performance. Les plusieurs fois mieux que MKL et Blas.


1 commentaires

Il y a des problèmes de licence avec Gotoblas.