Le Forum de l'Alliance Francophone

Nouvelles:

Auteur Sujet: [FAQ] Optimisation Calcul CPU - AVX  (Lu 16392 fois)

0 Membres et 1 Invité sur ce sujet

Philippe06121966

  • Invité
le: 06 January 2014 à 13:09
EDIT MODO : reprise de posts effacés

Salut !  :hello:

Suis pas un pro du domaine, mais après quelques tests, voici des infos de profane au sujet des UT AVX.

http://www.pcworld.fr/glossaire/avx,213,1.htm
http://www.pcworld.fr/processeur/actualites,intel-parle-officiellement-prochaine-version-avx-512-cartes-hpc-calcul-xeon-phi-knight-landing,540685,1.htm

Comme vous le savez probablement déjà, certains CPU peuvent "faire tourner" des applications SSE2, SSE3, AVX (AVX1, AVX2, ...)

La particularité des jeux d'instructions AVX étant e.a. d'être destinés aux calculs multimédia, scientifiques, financiers, etc
ils permettent d'effectuer certaines tâches beaucoup plus rapidement. (que SSE3 par exemple)

Suivant les projets et le nombre d'UT calculées en même temps, le gain peut dépasser 40 %.

Par contre, il y a plusieurs contraintes liées à leur utilisation.

La principale est que, sous Windows, BOINC ne peut pas reconnaître les capacités AVX de votre CPU et donc transmettre automatiquement
la demande aux projets pour recevoir des UT CPU AVX => il faut créer une app_info.xml pour les demander !
(Sauf PrimeGrid GFN Short qui permet de cocher une case "Force AVX" dans les préférences")

La deuxième est que, ces unités étant gourmandes en ressources (e.a. mémoires CPU), il est
fortement recommandé de désactiver l'hyperthreading => ne travailler QUE sur les coeurs physiques en désactivant les coeurs logiques.
Schématiquement, la charge de travail pour 1 UT AVX = 2 UT SSE3 => ralentissement sévère + chauffe si HT activé.

Pour faire court : sur un i7-4770K : Si je fais tourner 8 UT PrimeGrid GFN Short AVX en même temps, il faut > 200 heures.
Par contre, après désactivation du HT, je peux en faire tourner 4 en même temps en environ 60 heures, sans aucun ralentissement du pc.
Gain de temps = environ 40 % :D
La moyenne indiquée par le site du projet étant d'environ 220 heures.

Sur ASTEROIDS, les UT GPU n'étant, à mon humble avis, pas intéressantes ou en tout cas pas optimisées,
vous pouvez choisir de faire tourner des UT CPU AVX.
Le gain de temps devrait être d'environ 40 % par rapport aux UT SSE3.

Par contre, impossible de les télécharger automatiquement => Si vous voulez essayer des UT ASTEROIDS AVX,
voici comment faire, après vous être assuré que votre CPU supporte AVX.

(Vous pouvez aussi "ordonner" à BOINC de télécharger des SSE2, SSE3 et AVX.
Après essais, BM téléchargera automatiquement les UT adéquates.)

1) Télécharger AVX EXE depuis
http://asteroidsathome.net/boinc/download/

Le nom du fichier est :
period_search_10210_windows_x86_64__avx.exe

2) Télécharger le fichier app_info.xml ci-joint et l'inclure dans : BOINC-DATA/projects/asteroidsathome.net_boinc

!!! En ouvrant le fichier, vous verrez qu'il fait référence aux 3 applications : SSE2, SSE3 et AVX.
Si vous ne voulez recevoir QUE des AVX, il suffit d'effacer les 2 parties SSE2 et SSE3 pour ne garder que :

<app_info>
<app>
<name>period_search</name>
<user_friendly_name>Asteroids</user_friendly_name>
</app>

<!-- AVX -->
<file_info>
<name>period_search_10210_windows_x86_64__avx.exe</name>
<executable/>
</file_info>
<app_version>
<app_name>period_search</app_name>
<version_num>1021</version_num>
<avg_ncpus>1.00</avg_ncpus>
<max_ncpus>1.00</max_ncpus>
<plan_class>avx</plan_class>
<file_ref>
<file_name>period_search_10210_windows_x86_64__avx.exe</file_name>
<main_program/>
</file_ref>
</app_version>

</app_info>

Si vous gardez le fichier attaché sans le modifier, il forcera BOINC à charger les 3 types d'applications,
et c'est BOINC qui choisira automatiquement ce qui convient le mieux.

J'ai laissé le fichier tel quel pour que vous puissiez choisir les applis que vous voulez.

3) Quitter BOINC et redémarrer puis autoriser de nouvelles tâches Asteroids.

Ce fichier peut évidemment être adapté pour d'éventuels autres projets ayant des UT AVX.


J'insiste sur le fait que si vous ne désactivez pas l'HyperThreading, le gain de temps sera minime,
la t° du CPU risque de monter, et même si elle ne monte pas, il va ralentir fortement.

Finalement, pour désactiver l'HyperThreading : Dans le BIOS, options CPU, il y a généralement la possibilité de l'activer ou le désactiver.
Il y a d'autres méthodes, mais je ne les recommande pas, n'étant pas sur du résultat ;)

Bon Amusement et Bon Crunch :D
« Modifié: 30 May 2015 à 12:08 par LOCTET SetiOne »



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #1 le: 08 January 2014 à 13:46
C'est visiblement pour du windows, quel est le rôle du .exe dans tout ça ?

Tu sais si la méthode du xml marche sous Mac (sans cet exécutable) ?

Comment savoir si un CPU a le jeu d’instructions AVX ? (si ce n'est le fait qu'il doit être postérieur à début 2011 si j'ai bien compris)

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #2 le: 09 January 2014 à 23:54
Citer
Hello !

Oui, ça ne concerne que Windows ...
Je suppose que sous MAC, BM arrive à détecter les CPU AVX et en informe le serveur.
Pour savoir si un CPU accepte le jeu d'instructions AVX : CPU-Z
Voir Photo Ci-Jointe que j'ai trouvée sur le net.

=> si ton MAC télécharge automatiquement des UT AVX, sous PrimeGrid,  il faut vraiment penser à désactiver l'HT ...
Sinon presque aucun gain de temps + risque de chauffe du CPU

Sur ASTEROIDS c'est peut-être automatique aussi ?

Quant au fichier app_info.xml, il permet ou oblige, c'est selon ;), BM à aller chercher des UT AVX.
Je ne sais pas si ça fonctionne sous MAC puisque, à priori, BM détecte automatiquement la fonction AVX du CPU.

Il y a tout de même des contraintes.

Par exemple : sur mon pc avec 2 GPU, HT OFF = seulement 2 coeurs CPU AVX
car les UT GPU que je calcule sont gourmandes en temps CPU ...

Mais bon. Je voulais juste expliquer comment faire pour recevoir des UT AVX,
beaucoup plus rapide que les SSE3 + détailler les contraintes / recommandations.

Concernant le .exe, il m'a été expliqué sur le forum ASTEROIDS qu'il fallait l'installer pour permettre
la 1ère utilisation sous AVX. Ces fichiers sont fournis par l'admin du projet => installé en confiance.

Sources = je me suis basé sur les explications glanées sur ASTEROIDS et PrimeGrid pour compiler ça
+ essais persos sur PrimeGrid GFN Short :siflotte:


Ma question était surtout théorique, mon i7 date de début 2010 donc aucune chance de AVX...
« Modifié: 30 May 2015 à 12:06 par LOCTET SetiOne »

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne [AF>Libristes] nico8313

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 8027
  •   
Réponse #3 le: 10 January 2014 à 06:29
Ma question était surtout théorique, mon i7 date de début 2010 donc aucune chance de AVX...

Effectivement il faut savoir quel modèle de i7 tu possède pour savoir s'il intègre les instructions AVX

C'est visiblement pour du windows, quel est le rôle du .exe dans tout ça ?

Et bien le .exe c'est simplement l'application du projet compilé avec les instructions avx.

Tu sais si la méthode du xml marche sous Mac (sans cet exécutable) ?

A partir du moment ou le projet a compilé une application qui tourne sous Mac avec les instructions avx, oui ça fonctionne.
Par contre sous Mac les applications ne fonctionne pas avec des .exe    :D
L'application pour OSX et là :
http://asteroidsathome.net/boinc/download/period_search_10210_x86_64-apple-darwin__avx_osx

Bien évidement il faut adapter ensuite le fichier xml à l'appli OSX

Comment savoir si un CPU a le jeu d’instructions AVX ? (si ce n'est le fait qu'il doit être postérieur à début 2011 si j'ai bien compris)

Avec un logiciel comme CPU-Z pour Mac je pense.
ça te donne un truc comme ça par exemple:

« Modifié: 10 January 2014 à 06:32 par [AF>Libristes] nico8313 »



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #4 le: 12 January 2014 à 13:38
En fait à la réflexion BOINC nous dit déjà tout :

09-Jan-2014 22:30:09 [---] Processor: 8 GenuineIntel Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz [x86 Family 6 Model 30 Stepping 5]
09-Jan-2014 22:30:09 [---] Processor features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 CX16 TPR PDCM SSE4.1 SSE4.2 POPCNT

Logiquement pas de AVX, comme je disais ça n'existe que sur des CPU produits après début 2011, le mien date de plus d'un an avant.

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne kipoos

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 3261
  •   
Réponse #5 le: 02 February 2014 à 04:24
manip effectuée sur un core i5  2500k.

j'ai laissé les 3 applis : boinc devrait garder la plus rapide après en avoir fait tourner plusieurs de chaque.
je verrai comment ça marche après avoir vider mon cache simap.

merci phil



Hors ligne sebcbien_bzh

  • Boinc'eur Confirmé
  • ***
  • Messages: 445
  •   
Réponse #6 le: 04 February 2014 à 08:57
j'ai moi aussi testé sous mon 2500k : pas encore fini mais au lieu de mettre 2h20 ca devrait mettre 1h30 environ soit 40 % de gain de vitesse effectivement.



Hors ligne Oncle Bob

  • Modérateur
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 5342
  •   
Réponse #7 le: 04 March 2014 à 00:51
Drapal, mes procs (E3-1260L & i7-2600K) gèrent l'AVX.

Boincstat
Projets du moment
Config principale : i7 2600K@4,2 GHz / 32 Go@1333 MHz / GTX 970 (Win 10)
Crunchbox passives : i7-4785T / 8 Go@1600 MHz / Akasa Euler S (Debian) || i3-4130T / 4 Go@1600 MHz / Akasa Euler (Debian)
ARM : 1*S922 + 1*H3
Boinc@Raspberry Pi | Boinc et Linux | Date fin de projets


Hors ligne procrastinator

  • Boinc'eur Junior
  • **
  • Messages: 67
  •   
    • To stupidity, and beyond !
    • E-mail
Réponse #8 le: 04 August 2014 à 17:11
Merci pour ces informations.
J'ai désactivé l'hyperthreading de ma machine de course, ce qui conduit à une diminution de température des coeurs de vingt degrés, soit l'objectif secondaire recherché. Aucun changement dans le temps d'exécution des unités Milkyway (sans rapport avec AVX, mais on ne sait jamais où un effet de bord peut se nicher)
:yaya:
J'ai également configuré le bazar pour qu'il traite uniquement des unités Asteroids AVX, je reviendrai quand j'aurai les résultats.

Toi qui cliques ici, abandonne tout esprit de sérieux.

Crunchbang Linux 64 bits, Intel i3770 (HT désactivé), ATI HD7970



Hors ligne procrastinator

  • Boinc'eur Junior
  • **
  • Messages: 67
  •   
    • To stupidity, and beyond !
    • E-mail
Réponse #9 le: 09 August 2014 à 09:59
Bon, rien de transcendant : en gros je suis passé de 8 threads SSE2 en deux heures à 4 threads AVX en 1h30.
Pas sûr que l'AVX change quoi que ce soit, il faudrait creuser plus.
En tout cas, le processeur chauffe moins, je reste dans cette configuration.

Citer
Sur Asteroids, je ne fais plus tourner que les SSE3 sur i7 4770K et SSE2 sur i7 2670QM
Surtout pour WuProp ;) et car les gains de temps sont relativement limité, c'est vrai.

Par contre, sur PrimeGrid, toutes les UT's CPU sont à présent disponible (automatiquement) en AVX2 !

Et sur ce projet, les gains en terme de points et de temps sont beaucoup plus conséquents en HT OFF

Par contre, ça chauffe assez fort => faut un très bon refroidissement.
« Modifié: 30 May 2015 à 12:07 par LOCTET SetiOne »

Toi qui cliques ici, abandonne tout esprit de sérieux.

Crunchbang Linux 64 bits, Intel i3770 (HT désactivé), ATI HD7970



Hors ligne toTOW

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4518
  •   
    • FAH-Addict.net
    • E-mail
Réponse #10 le: 09 September 2014 à 14:15
Phil1966> y'a moyen de savoir si les applications que l'on a (sur PrimeGrid) font de l'AVX ou non ?

Citer
Je pense que le système détecte automatiquement les capacités CPU.

Mais je peux vérifier.

(Je n'ai jamais essayé d'app_info sur ce projet ...)

Il y a quelques mois, toutes les applications LLR sont passées en AVX2 / FMA3 ou quelque chose du genre =>
Il faut privilégier HT OFF, sinon ça chauffe beaucoup trop et on "perd du temps" (façon de parler)
Si le CPU n'a pas les fonctions AVX, AVX2, FMA etc je suppose que les LLR tournent en SSE3/SSE2.

NB : Une des raisons pour lesquelles nous avons choisi une application CPU SIEVE pour le RAID est qu'elle ne sollicite pas autant les CPU, et qu'elle tourne très bien HT ON.

Voir : http://forum.boinc-af.org/index.php/topic,2184.msg385318.html#msg385318
« Modifié: 30 May 2015 à 12:09 par LOCTET SetiOne »

FAH-Addict, première source d'information francophone sur le projet Folding@Home.


Hors ligne Oncle Bob

  • Modérateur
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 5342
  •   
Réponse #11 le: 12 December 2014 à 10:40
:hello:

On a une liste des applis AVX (et/ou AVX 2.0) ?

Boincstat
Projets du moment
Config principale : i7 2600K@4,2 GHz / 32 Go@1333 MHz / GTX 970 (Win 10)
Crunchbox passives : i7-4785T / 8 Go@1600 MHz / Akasa Euler S (Debian) || i3-4130T / 4 Go@1600 MHz / Akasa Euler (Debian)
ARM : 1*S922 + 1*H3
Boinc@Raspberry Pi | Boinc et Linux | Date fin de projets


Hors ligne Alan St-Pierre

  • Boinc'eur Junior
  • **
  • Messages: 180
  •   
    • E-mail
Réponse #12 le: 09 November 2018 à 05:53
Est-ce que tout cela est encore d'actualité? Est-ce que les contraintes liées à l'utilisation de l'AVX sont toujours vraies (températures, désactivation de l'hyper-threading) ? Pour un i5 6300HQ et un i7 8700.

Ordinateur 1: Intel Xeon 2697-V4, 24 Go DDR4, Nvidia Titan V 12 Go
Ordinateur 2: Levono Legion 5 avec AMD Ryzen 7 4800H, 32 Go DDR4, Nvidia GTX 1660Ti 6 Go
Ordinateur 3: Intel Core i5-6400, 16 Go DDR3, Nvidia GTX 1650 Super 4 Go
Ordinateur 4: Intel Core i3-7100T, 8 Go DDR4, Nvidia T600 4 Go
RIP: Dell Inspiron 7559 avec Intel Core i5-6300HQ, 16 Go DDR3, Nvidia GTX 960M 4 Go


Hors ligne GuL

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2225
  •   
Réponse #13 le: 09 November 2018 à 08:05
Est-ce que tout cela est encore d'actualité? Est-ce que les contraintes liées à l'utilisation de l'AVX sont toujours vraies (températures, désactivation de l'hyper-threading) ? Pour un i5 6300HQ et un i7 8700.
Je n'ai pas lu le topic en entier, mais AVX, AVX2, ou FMA3 sont des instructions matérielles dans le CPU qui accélèrent considérablement les calculs, mais qui chauffent énormément. Pour te donner un exemple, sur des calculs que j'ai réalisé pour mon travail, j'ai gagné un facteur 3-5 en terme de temps de calcul, rien qu'en les activant. Ce sont les successeurs des instructions SSE.

Le principe est de faire le calcul sur l'ensemble d'une série de points d'un coup plutôt que sur chaque point pris séparément, ce qui explique que ça chauffe plus. Les projets de nombre premiers les utilisent beaucoup (Primegrid, SRbase, Citizen science grid...)



Hors ligne Alan St-Pierre

  • Boinc'eur Junior
  • **
  • Messages: 180
  •   
    • E-mail
Réponse #14 le: 09 November 2018 à 17:53
Je voulais dire est-ce que c'est encore préférable de désactiver l'hyperthreading quand on fait de l'AVX?

Ordinateur 1: Intel Xeon 2697-V4, 24 Go DDR4, Nvidia Titan V 12 Go
Ordinateur 2: Levono Legion 5 avec AMD Ryzen 7 4800H, 32 Go DDR4, Nvidia GTX 1660Ti 6 Go
Ordinateur 3: Intel Core i5-6400, 16 Go DDR3, Nvidia GTX 1650 Super 4 Go
Ordinateur 4: Intel Core i3-7100T, 8 Go DDR4, Nvidia T600 4 Go
RIP: Dell Inspiron 7559 avec Intel Core i5-6300HQ, 16 Go DDR3, Nvidia GTX 960M 4 Go


Hors ligne GuL

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2225
  •   
Réponse #15 le: 09 November 2018 à 20:10
Je voulais dire est-ce que c'est encore préférable de désactiver l'hyperthreading quand on fait de l'AVX?
Pour faire court : sur un i7-4770K : Si je fais tourner 8 UT PrimeGrid GFN Short AVX en même temps, il faut > 200 heures.
Par contre, après désactivation du HT, je peux en faire tourner 4 en même temps en environ 60 heures, sans aucun ralentissement du pc.
Gain de temps = environ 40 % :D
Ça reste d'actualité, et à priori encore quelques années. L'hyperthreading n'est pas le doublement du nombre de cœurs, c'est l'utilisation du CPU à d'autres fins, pendant les cycles inactifs, par exemple en attendant des données provenant de la mémoire. Les calculs SSE et surtout AVX font une utilisation intensive de la mémoire cache du processeur, ce qui limite ces temps de latence et rend donc inutile l'hyperthreading.

Dans le meilleur des cas, avoir deux tâches AVX simultanées sur le même cœur doublera le temps de calcul. Dans la pratique, c'est pire : les transferts de mémoire depuis la RAM vers le cache CPU font perdre en efficacité.

Retirer l'hyperthreading est donc une solution pertinente, mais il y en a une autre : limiter le nombre de threads utilisés par le projet avec la ligne <project_max_concurrent>N</project_max_concurrent> dans le fichier app_config, où N est le nombre de cœurs réels. Dans ce cas, les threads supplémentaires seront utilisés par des applications moins gourmandes.  ;)



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #16 le: 09 November 2018 à 23:56
Si ça c'est pas de l'optimisation, je ne m'y connais pas :)

Et un déterrage de topic qui reste pertinent 4 ans après en informatique, c'est une première ! :D

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne DocPhilou1966

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 1869
  •   
    • Mon Job
    • E-mail
Réponse #17 le: 10 November 2018 à 09:08

 
13800346^131072+1   935,840 (decimal)   2019-01-27 Generalized Fermat Prime Search


Hors ligne GuL

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2225
  •   
Réponse #18 le: 11 November 2018 à 20:23
J'ajoute que dans le cas des applications multi-threads, l'utilisation de l'hyperthreading peut être bénéfique
Citer
Some people have observed that when using MultiThreaded LLR, hyperthreading is actually beneficial. We encourage you to experiment and see what works best for you.

Ci-joint une figure extraite de https://www.nrel.gov/docs/fy16osti/64268.pdf qui montre l'influence du nombre de threads sur un CPU avec 72 threads (2 CPU 18 cores Haswell Xeon E5-2699v3 + Hyperthreading). Sur la courbe rouge, le système d'exploitation gère l'adressage des tâches, tandis que sur la courbe bleue, les threads sont attribuées à un cœur particulier. L'OS s'en sort pas trop mal pour répartir les tâches automatiquement.