OVH Cloud OVH Cloud

memcpy, ATLAS et C++

11 réponses
Avatar
plagne.laurent
Bonjour =E0 tous,

je viens de faire des mesures de perfs sur mon syst=E8me linux (X86) qui
me laissent un peu songeur...

Quand je fais une copy de vecteur de r=E9els avec une simple boucle (les
resultats sont =E9quivalent sur des pointeur C o=F9 des vecteurs STL),
j'obtiens des perfs qui sont les m=EAmes que si je passe par memcpy(..).
Je m'interesse en particulier aux grand vecteur (eg. size=3D10e6).

for (int i=3D0 , i <size ; i++) X[i]=3DY[i]

Sur ma machine, les perfs hors cache sont +/- constantes ( +/- 50
Millions d'=E9lements copi=E9s par seconde)

A ce point, tout va bien et le compilo (gcc) semble faire un boulot
correct...

Sauf que : Si je fais la m=EAme op=E9ration via ATLAS ( ATL_dcopy(..)),
j'obtiens une performance meilleure d'un facteur 2 (+/- 100 Millions
d'=E9l=E9ments copi=E9s par seconde).

Trois questions :
1 Vous semble-t-il normal qu'une op=E9ration aussi =E9l=E9mentaire soit
"nativement" aussi peu optimis=E9e ?
2 Est-il possible de modifier l'environnement pour que la version
boucle soit efficace (modif de la libc ?)
3 Je n'ai rien compris au film ?

P=2ES. Je d=E9veloppe une biblioth=E8que o=F9 les op=E9rations globale sur
les vecteurs sont d=E9finies et sil'utilisateur
=E9crit X=3DY cela appel ATLAS si la lib est install=E9e. Mais j'ai quand
m=EAme l'impression que ce bon niveau de perf
devrait =EAtre accessible directement depuis le langage...

Merci pour vos lumi=E8res !

Laurent

1 réponse

1 2
Avatar
plagne.laurent
Ca serait bien d'envoyer un pointeur du bon coté :
http://math-atlas.sourceforge.net/
Le site http://projects.opencascade.org/btl/ que j'ai indiqué

contient des pointeurs vers les librairies citées (ATLAS, blitz++).

A part ça, je pensais que mon dernier post était de nature à
modérer ma première intervention et donc à limiter les réactions
justement outragées des gardiens du temple C++. Donc, soyons plus
explicite, j'ai fait une observation mineure et qui ne présente pas
d'interêt pour la majorité des développeurs C++. Je vous présente
mes plus plates excuses.

Laurent

1 2