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 :

Boucle "Pour" parallèle [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut Boucle "Pour" parallèle
    Bonjour

    J'ai une portion de code à paralléliser. Voici un exemple très simple (la boucle pour de la procédure "DoIt") :

    Code Pascal : 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
    const
     VECTOR_COMPONENTS_COUNT = 150;
     
     DATA_ENTRIES_COUNT = 10000;
     
    type
     TVector = array [0 .. VECTOR_COMPONENTS_COUNT - 1] of Real;
     
     TData = array [0 .. DATA_ENTRIES_COUNT - 1] of TVector;
     
     TDistances = array [0 .. DATA_ENTRIES_COUNT - 1] of Real;
     
    function Distance(var Vector1, Vector2: TVector): Real;
    var
     I: Integer;
    begin
     Result := 0;
     for I := 0 to VECTOR_COMPONENTS_COUNT - 1 do
      Result := Result + Sqr(Vector1[I] - Vector2[I]);
     Result := SqRt(Result)
    end;
     
    procedure DoIt(var Distances: TDistances; var Data: TData; var Vector: TVector);
    var
     I: Integer;
    begin
     for I := 0 to DATA_ENTRIES_COUNT - 1 do
      Distances[I] := Distance(Data[I], Vector)
    end;

    Je veux faire ça avec "ProcThreadPool.DoParallel" mais je ne sais pas comment faire. Par exemple, comment faire pour passer les données via les pointeurs ?

    Toute aide sera la bienvenue.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 439
    Points : 5 858
    Points
    5 858
    Par défaut
    salut

    il faut passer par un pointer
    regarde cette exemple

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 085
    Points : 15 490
    Points
    15 490
    Billets dans le blog
    9
    Par défaut
    Peut-être avec la bibliothèque PasMP ? Elle est livrée avec de nombreux exemples.

    https://github.com/BeRo1985/pasmp

  4. #4
    Membre habitué Avatar de Onimaru
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Turquie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2010
    Messages : 283
    Points : 129
    Points
    129
    Par défaut
    Merci.

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

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