Évaluation des cœurs de processeur pour l'optimisation - page 11

 
Aleksey Vyazmikin:

La question qui se pose est la suivante : quel est l'effet - bien sûr, j'ai vu dans le code, qu'en fait ils ont supprimé "si" ? Mais j'aimerais avoir un commentaire, car on ne voit pas clairement quel est le gain en termes de rapidité de la logique.

Solution intuitive - déplacer le gros code dans une fonction (ou mieux encore dans un include séparé), se débarrasser de if, increment et break.

Je suis également très confus quant à l'obtention des valeurs des variables à analyser. Dans l'exemple du test, ce sont des aléas, mais dans la réalité ? Je laisserais déjà les valeurs booléennes pures pour vérifier (bool_a > 10.0) au lieu de (double_a).

 
Igor Zakharov:

Nouvelle construction, nouveau testeur, nouveau compilateur... il manque la colonne "build mt5" dans le tableau récapitulatif

Jusqu'à présent, le résultat est stable - vérifié hier, donc ne vous attendez pas à des sauts de performance d'une version à l'autre.

 
Andrey Khatimlianskii:

La solution intuitive consiste à placer le gros code dans une fonction (ou mieux encore, dans un inlude séparé) et à se débarrasser des if, increment et break.

En fait, c'est déjà une fonction, donc on ne voit pas bien pourquoi il y a un tel gain de performance !

J'utilise inlude dans mon code de travail, mais il s'agit d'une pure migration de code, comment proposez-vous de l'organiser ? Bray ajoute considérablement aux performances - comment puis-je m'en débarrasser pour ne pas perdre de vitesse ?

Andrey Khatimlianskii:

Je suis également très confus pour obtenir les valeurs des variables analysées. Dans l'exemple du test, ce sont des aléas, mais dans la réalité ? Je laisserais déjà les valeurs booléennes pures, de sorte que je pourrais vérifier (bool_a > 10.0) au lieu de (double_a).

En réalité, c'est la même chose que pour le double - les données proviennent d'un fichier externe, qui est lu entièrement dans le tampon pendant l'initialisation. Je n'ai donc pas compris exactement comment en faire un bool.

 
Maxim Romanov:
Le 3800x a presque rattrapé le i7 8700 en termes de performances en streaming. Et ça vient de la 2700.
Cela est probablement dû à la réduction de la latence de la mémoire et à un cache deux fois plus important.
Conclusion : pour le mt5, le facteur décisif est la latence d'accès à la mémoire et la vitesse de lecture de la mémoire.
Cela est également mis en évidence par les faibles performances sur le fil wx 2990. Ils présentent des latences de mémoire élevées malgré le traitement à 4 canaux et le cache spécifique.
La vitesse des cœurs eux-mêmes n'est donc pas si importante.
Peut-être que c'est comme ça que ça marche.

et le 3800X n'est pas censé se démarquer du 2700 ?

 
Aleksey Vyazmikin:

Ensuite, je supposerai que pendant l'optimisation, la fréquence diminue simplement par idéologie. Par souci d'intérêt, faites une course plus longue de n'importe quel EA - pas 16 passages, mais disons 160 - je me demande comment cela change le temps de passage - la différence devrait être minime - moins d'une seconde.

F


PS Peut-être avez-vous un test qui charge la RAM ?

 
Pavel Verveyko:

F


PS Peut-être avez-vous un test où la RAM est chargée ?

Merci, la moyenne était à peu près la même que pour les 16 passages - nous allons supposer que ce sont les bonnes données.

Pour la mémoire, malheureusement, il n'y a rien de convenable dans le domaine public.

 
Pavel Verveyko:

Le 3800X n'aurait-il pas dû se démarquer du 2700 ?

Il aurait dû, j'ai suggéré des raisons sur lesquelles s'appuyer à l'avenir lors du choix du matériel.
 
Maxim Romanov:
J'aurais dû, j'ai supposé les raisons, afin d'avoir quelque chose sur lequel m'appuyer à l'avenir pour choisir un fer à repasser.

Je l'ai, merci.

 
Aleksey Vyazmikin:

Bray augmente considérablement les performances - comment puis-je m'en débarrasser pour ne pas perdre de vitesse ?

Remplacez-la par un retour, comme dans mon exemple.


Aleksey Vyazmikin:

En réalité, c'est également le double : les données sont extraites d'un fichier externe, qui est lu intégralement dans le tampon lors de l'initialisation. C'est pourquoi je n'ai pas compris comment en faire un bool.

Au lieu de

int Povtor_High_M1 = X;

if ( Povtor_High_M1>=0 ) ***

if ( Povtor_High_M1< 0 ) ***

Faire

bool Povtor_High_M1 = (X >= 0);

if ( Povtor_High_M1 ) ***

if ( !Povtor_High_M1 ) ***
 
Andrey Khatimlianskii:

Remplacer par un retourné, comme dans mon exemple.


Au lieu de

Faire

Malheureusement, je ne suis pas intelligent, mais X>=0 peut être plus grand que n'importe quel autre nombre - il existe de nombreuses combinaisons - vous ne pouvez pas tout prévoir dans le code, et le code augmentera de plusieurs ordres de grandeur en raison de diverses combinaisons.

Raison: