IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Exécution lente pour Lazarus 2.2.0 Vs Delphi DX 3.3.2 [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut Exécution lente pour Lazarus 2.2.0 Vs Delphi DX 3.3.2
    Bonjour à tous!
    En somme j'ai converti mon jeu d'échec compilé avec Delphi en Lazarus, et j'ai testé le calcul d'une position
    me servant à voir l'amélioration de l'exécution.
    Alors Delphi la calcule en 40 secondes et Lazarus en 61 secondes, ce qui est beaucoup comme différence pour les
    mêmes calcules et la même solution de retour.
    Je me suis assuré des points suivants:
    - Compiler en mode(release) avec l'optimisation -03.
    - Que la case de plus petit plutôt que plus rapide n'est pas coché.
    - Tester l'évaluation boolean incomplète si elle est bien par défaut.
    - Rechercher sur le forum et wiki si quelqu'un à discuter de ce fait(aucun).

    Une chose que je ne peut pas faire c'est de compiler pour la cible X86_64 car FPC 3.2.2 i386 WIN32 ne la prend pas en charge.
    J'ai WIN10 32 bits avec INTEL R double core 64 bits.
    J'espère que quelqu'un saura m'apporter une réponse. Salut!

    Nom : Capture d’écran 2022-06-13 103825.png
Affichages : 670
Taille : 5,3 Ko

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 672
    Par défaut Il y a un OS
    Bonjour Fernet,
    Citation Envoyé par fernet Voir le message
    ...Tester l'évaluation boolean complète si elle est bien par défaut.
    Je présume que c'est l'évaluation booléenne optimisée donc a priori incomplète qui est activée. L'évaluation complète est plus lente et peut être dangereuse comme par exemple :
    Code PASCAL : Sélectionner tout - Visualiser dans une fenêtre à part
    if (i in [imin..imax]) and (a[i] <> 0) then ...
    Lequel plantera en évaluation complète si i n'est pas dans la plage requise.

    La portabilité de Lazarus ne le rend pas rapide. Pour standardiser les accès systèmes, ils sont très souvent dotés de fonctions intermédiaires d'adaptation à l'OS.

    Pour la cible 32/64, il faut avoir la bonne version de Lazarus (donc FP) donc au moins une version 64 bit ou mieux 32/64.

    Salutations

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 261
    Par défaut
    Bonjour,

    Si Windows est une version 32 bits, je ne pense pas qu'il soit possible de compiler en 64b, même si le processeur est un 64b.
    Par contre sur win10 64b, FPCUPdeluxe permet d'installer la version 32b ou 64b de FPC/Lazarus et le cross-compilateur pour l'autre version.
    J'ai commencé avec FPC/Lazarus 64b et le cross-compilateur 32b, mais il y a un problème de conversion des Datetime en Timestamp dont j'ai parlé ici.
    J'ai donc refait l'installation inverse, qui fonctionne bien et qui permet de compiler en 32b ou en 64b. Il faut juste passer au debugger GNU pour compiler en 64b.

    André

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    Je suis d'accord avec toi Guesset et j'ai changé (complète pour incomplète) car si l'évaluation complète était active
    mon programme planterait a coup sûre.
    Dans un programme d'échec on utilise beaucoup le type Uint64(Qword) pour représenter les 64 cases de l'échiquier.
    Si je pointe un tableau de Uint64 sous Delphi on voit plusieurs variables négatives, mais sous Lazarus on en voit aucune.
    Ce qui me laisse supposer que FPC reconnait mieux les Uint64 que Delphi. Et dans un code comme celui ci, Delhi va s'arrêter
    au (then) tant disque Lazarus me renvoi un avertissement disant que cette condition sera toujours (false) a cause de L'étendu
    de la variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure tesUint64;
     var neg:Uint64;
    begin
      if neg < 0
      then neg := 0;
    end;
    Alors je crois (alanglet) que les deux EDI utilise (EAX + EDX) deux registres 32b pour composer le 64b, mais çà c'est pareille pour les
    deux et ne devrait pas causer cette différence de temps d'exécution puisqu'il s'exécute sur le même système.
    Fernand salut!

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 672
    Par défaut
    Bonjour,

    Alanglet à raison, un système 32 bits n'exécute pas du code 64 bits. Mais il m'étonnerait que la version de Windows soit en 32 bits sur une machine 64 bits (ce n'est pas impossible mais peu probable). Il y a peut être une mauvaise interprétation de Win32 qui ne désigne pas l'OS mais l'API Windows (toute la logique d'appels des fonctions système).

    A l'opposé un système 64 bits peut faire tourner des applications 32 bits. Par exemple, une version 32 bits de Lazarus/FPC et une version 64 bits de Delphi. C'est pourquoi je conseillais éventuellement de charger une version mixte de Lazarus.

    Les version 32 bits utilisent effectivement des combinaisons de deux registres 32 bits pour simuler un registre 64 bits mais aussi des registres des jeux d'instruction SIMD (MMX, SSE etc.).

    Il est intéressant de travailler en 64 bits, pas tant pour la taille des registres (souvent 32 bits sont largement suffisants) mais surtout pour le plus grand nombre de registres qui permet au compilateur de mieux optimiser son code (et en l'occurrence 16 est plus que le double de 8 à cause des registres réservés).

    Salutations

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 942
    Billets dans le blog
    6
    Par défaut
    Si je pointe un tableau de Uint64 sous Delphi on voit plusieurs variables négatives, mais sous Lazarus on en voit aucune.
    Est-ce le débogueur qui montre des valeurs négatives ? Ou bien le code trouve-t-il ces valeurs négatives ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2006
    Messages : 59
    Par défaut
    Bonjour!
    Il est bien sûre que si Delphi code en 64 bits il sera beaucoup plus vite que Lazarus en 32 bits.

    J'ai lu dans ce wiki qu'il est possible d'installer un deuxième compilateur, mais je ne sait pas si je peut le faire.
    Va falloir que j'étudie sérieusement la question.

    https://wiki.lazarus.freepascal.org/...rsion_Switcher

    P.S. Guesset, mon OS était Win7 32 bits, et c'est pour çà que j'ai du le convertir en Win10 32 bits.

    Fernand salut!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. temps d'exécution très lent pour les boucles for
    Par NELLLY dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/01/2013, 11h00
  2. outlook lent pour excuter!
    Par starsat4200 dans le forum Outlook
    Réponses: 1
    Dernier message: 08/06/2007, 09h05
  3. Exécuter procédure pour chaque ligne d'un Select
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2006, 08h58
  4. [VBA-E]exécution lente de la macro après aperçu
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2006, 17h49
  5. OpenGL trop lent pour la 2D !!!
    Par kagemusha dans le forum OpenGL
    Réponses: 17
    Dernier message: 14/12/2005, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo