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. p>
s / dgemv code>? li>
- ou peut-être essayer de codage à base de codage une solution SSE2 (je n'ai pas de SSE3, selon CPUInfo). li>
ol>
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. P>
5 Réponses :
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 . p>
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.
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. P>
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. p>
J'utilise un gotoblas. Ce sont les routines de noyau de haute performance. Les plusieurs fois mieux que MKL et Blas. P>
Il y a des problèmes de licence avec Gotoblas.
Ce qui suit fournit des routines Blas Niveau 1 (Opérations vectorielles) à l'aide de SSE. p>
http://www.applied-mathematics.net/minissel1blas/minissel1blas.html < / a> p>
Si vous avez une carte graphique NVIDIA, vous pouvez obtenir Cubla qui effectuera l'opération sur la carte graphique. p>
http://developer.nvidia.com/cublas P>
pour les cartes graphiques ATI (AMD) P>
http://developer.amd.com/libries/appmathlibs/pages/ Default.aspx P>
Quel compilateur utilisez-vous?