Quel est l'état de l'art en ce qui concerne l'utilisation de numpy
pour utiliser des coeurs multiples (sur le matériel Intel) pour des choses comme les produits vectoriels intérieurs et extérieurs, les multiplications matricielles vectorielles, etc.?numpy sur le matériel multicœur
Je suis heureux de reconstruire numpy
si nécessaire, mais à ce stade, je cherche des moyens d'accélérer les choses sans changer mon code.
Pour référence, mon show_config()
est la suivante, et je ne l'ai jamais observé numpy
d'utiliser plus d'un noyau:
atlas_threads_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/local/atlas-3.9.16/lib']
language = f77
include_dirs = ['/usr/local/atlas-3.9.16/include']
blas_opt_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/local/atlas-3.9.16/lib']
define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')]
language = c
include_dirs = ['/usr/local/atlas-3.9.16/include']
atlas_blas_threads_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/local/atlas-3.9.16/lib']
language = c
include_dirs = ['/usr/local/atlas-3.9.16/include']
lapack_opt_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/local/atlas-3.9.16/lib']
define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')]
language = f77
include_dirs = ['/usr/local/atlas-3.9.16/include']
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
mkl_info:
NOT AVAILABLE
Je doute que vous puissiez obtenir une accélération par le calcul multithread pour des produits scalaires de vecteurs de taille 4000. Un tel produit scalaire ne nécessite que quelques microsecondes à calculer. La surcharge de l'assignation de la tâche à un thread séparé annulera probablement au moins toute la vitesse que vous pourriez gagner, même en utilisant des pools de threads. –
Je multiplie des matrices de 32M x (4k ... 1.5M) par des matrices (4k ... 1.5M) x quelque chose, et j'ai essayé de le faire en utilisant la boîte à outils multiprocessing, néanmoins cela semble créer beaucoup de surcharge de mémoire , car les données sont copiées dans de nouveaux processus (merci le GIL pour cela). Ce serait génial si tous les 8 noyaux étaient utilisés par atlas. – Herbert