2011-05-16 10 views

Répondre

8

Le code "vectorisé" est généralement plus rapide dans les environnements interprétés comme Matlab et numpy parce que les versions vectorisées exécutent souvent (mais pas toujours) un code pré-compilé et optimisé écrit en C ou FORTRAN. L'exécution parallèle peut ou non jouer un rôle à cet égard.

L'utilisation de la vectorisation en numpy entraîne généralement une amélioration des performances pour cette raison - souvent les routines sont compilées C ou FORTRAN qui s'exécutent beaucoup plus vite que le code python natif qui doit être exécuté sur l'interpréteur. Egalement numpy, étant écrit en grande partie en C, peut contourner le verrou global de l'interpréteur python, ce qui peut grandement améliorer la réactivité dans le code python qui utilise des threads.

+0

Qu'en est-il du programme utilisant UBLAS, une différence entre la version vectorisée et la version normale? Ou, d'après ce que vous dites, uBLAS (C++) est déjà rapide sans vectorisation? – zhanwu

+0

Désolé, je n'ai aucune expérience avec UBLAS. Comment il se comporte devrait être complètement différent de Matlab ou numpy. Dans ceux-ci, la grande accélération de la vectorisation est principalement en contournant l'interprète. uBLAS est une bibliothèque de modèles qui est toujours compilée en code exécutable à partir du C++ qu'elle contient. – talonmies

+4

Pour UBLAS, je pense qu'ils se réfèrent à une signification différente du mot "vectorisation" que ce que l'on entend par la vectorisation de code pour MATLAB ou numpy. Pour UBLAS, la version vectorisée utilise des instructions dites vectorielles, des instructions CPU qui fonctionnent sur plusieurs données à la fois. Sur les processeurs Intel, ce sont les instructions SSE. –

2

Je pense qu'une partie de ce qui rend la vectorisation plus rapide est qu'elle réduit le temps système associé aux appels de fonctions multiples. Le passage d'un vecteur à une fonction correspond à un appel unique, alors que le passage individuel de chaque élément de ce vecteur à la fonction correspond à plusieurs appels.

+0

C'est certainement vrai, mais ce n'est probablement pas la raison la plus importante. – Nzbuu

Questions connexes