Bonjour à tous,
J'observe des différences notables de temps d'exécution pour le même code, compilé en 32 bits et 64 bits.
Le code suivant est un extrait d'une application plus complexe.
Si vous l'exécutez, le code en 64 bits prendra toujours plus de temps que celui en 32 bits (parfois 3x plus selon la taille du tableau utilisée). Le code peut être testé en utilisant des tableaux de 1, 2 ou 3 reels (options 1, 2 ou 3 dans le code)
Si on regarde le code assembleur en mode debug, il est différent en 32 et 64 bits.
Quelqu'un aurait des idées pour faire fonctionner le code 64 bits aussi rapidement que le code 32 bits? (avec des options de compilation ou des ajustements dans le code ?)
Merci
Précision : J'utilise Delphi 12.1
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Type {$IF Defined(WIN64)} t_reel = double; {$ELSE} t_reel = single; {$ENDIF} t_vect1 = Array[0..0] OF t_reel; t_vect2 = Array[0..1] OF t_reel; t_vect3 = Array[0..2] OF t_reel; const k_vect1_nul : t_vect1 = (0.0); k_vect2_nul : t_vect2 = (0.0, 0.0); k_vect3_nul : t_vect3 = (0.0, 0.0, 0.0); procedure test(); var iLoop:integer; l_SW1:TStopwatch; l_vec1: t_vect1; l_vec2: t_vect2; l_vec3: t_vect3; begin l_SW1:=TSTopWatch.StartNew; iLoop:=0; while (iLoop<900000000) do begin //l_vec1 := k_vect1_nul; //option 1 //l_vec2 := k_vect2_nul; //option 2 l_vec3 := k_vect3_nul; //option 3 inc(iLoop); end; l_SW1.Stop; Showmessage(intToStr(l_SW1.ElapsedTicks)+' ticks / '+intToStr(l_SW1.ElapsedMilliseconds)+' ms'); end;
Partager