Lorsque je fait des calculs "lourds" d'après le gestionnaire de tâche windows, autoit n'utilise que la moitié du processeur
Par exemple avec ce code qui cherche les premiers nombres premiers puis les écrit sur le dd dans un fichier :
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=0
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
HotKeySet("{ESC}","quite")
;~ max array 2^24 (16777216)
$taille_tableau = 2 ^ 16 ;max 2^24
Dim $liste_premiers[$taille_tableau]
$liste_premiers[0] = 2
$liste_premiers[1] = 3
$nombre_a_tester = 5
$num_premier = 0
$nb_premiers = 1
$taille_tableau -= 1
While $nb_premiers < $taille_tableau
;~ Sleep(10)
;On test si le nombre est premier
$num_premier = 0
$racine = Sqrt($nombre_a_tester)
$test = 0
While ($test == 0)
;~ Sleep(10)
If (Mod($nombre_a_tester, $liste_premiers[$num_premier]) == 0) Then ;Si le nombre est divisible par un premier déja trouvé
$test = 1
ElseIf ($liste_premiers[$num_premier] > $racine) Then ;Si le nombre premier de test est plus grand que la racine carré du nombre a tester
;~ TrayTip("Premier trouvé !","Le nombre : " & $nombre_a_tester & " est le " & $nb_premiers+1 & "ème premier.",5,1)
ToolTip("Le nombre : " & $nombre_a_tester & " est le " & $nb_premiers+1 & "ème premier.",1,1)
$nb_premiers += 1
$liste_premiers[$nb_premiers] = $nombre_a_tester
$test = 1
Else
$num_premier += 1
EndIf
WEnd
; On passe au nombre suivant
$nombre_a_tester += 2
;~ ToolTip("Nombre testé : " & $nombre_a_tester)
WEnd
quite()
Func quite()
$fichier = FileOpen("Liste nombre premiers " & @MDAY & " " & @MON & " " & @YEAR & " " & @HOUR & "h" & @MIN & "min" & @SEC & "s.txt", 1 + 8)
If $fichier == -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir/créer le fichier." & @CRLF & "Les nombre premiers trouvés n'ont pas étés enregistrés.")
Exit
EndIf
FileWrite($fichier, "Liste des nombres premiers trouvés :" & @CRLF)
For $element In $liste_premiers
FileWrite($fichier, $element & @CRLF)
Next
FileClose($fichier)
MsgBox(0, "Trouve premiers", "Exécution terminée")
Exit (1)
EndFunc ;==>quite
Ma question : est-ce que les 50% son du au fait que j'ai un processeur double-cœur (100%/2=50%) ou a autre chose et comment faire pour utiliser 100% du processeur et ainsi finir les calcul 2 fois plus vite ?
Est-ce que quelqu'un avec un processeur possédant 1, 4, 8 ou 16 cœur(s) pourrai tester et dire si ça lui donne bien 100%, 25%, 12.5% et 6.25% en moyenne de l'utilisation du processeur ?
Ps : j'ai ici réduit la valeur de $taille_tableau à 2 ^ 16 au lieu du maximum(2^24) qui prendrai beaucoup de temps pour tester ce code.
Configuration : Windows7-64bits familial premium SP1, Processeur : Pentium T4300 (double cœur), RAM : 4Go
"Seules deux choses sont infinies l'univers et la bêtise humaine, en ce qui concerne l'univers je n'en ai pas encore acquis la certitude absolue" (A. Einstein)