Bonjour,
Je suis chercheur "post-doc" et je développe des programmes de simulation en Pascal. J'utilise maintenant une machine avec un Intel Core2Duo, et je cherche à "multi-threader" mon programme, histoire de gagner du temps.
Pour faire très simple, j'ai par exemple cet algorithme (p et q sont globales):
Et en fait je voudrais avoir cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure boucle; var i: integer; begin p:=0; for i := 1 to 1000 do p:=p+1; end;
Je sais que les deux façons de faire ne donnent pas la même chose, c'est juste pour comprendre comment gérer les threads sur des algorithmes parallélisables et ensuite synthétiser les résultats.
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 {thread 1 sur le premier core} procedure boucle_1; var i: integer; begin p:=0; for i := 1 to 500 do p:=p+1; end; {thread 2 sur le second core} procedure boucle_2; var i: integer; begin q:=0; for i := 501 to 1000 do q:=q+1; end; {synthèse sur le thread 1 qd les 2 boucles sont finies} procedure somme; var s: integer; s:= p+q; end;
Je n'ai pas trouvé de tutoriaux ou d'explications vraiment intuitives pour faire ce genre de truc. Est-ce possible en Pascal ou dois-je utiliser du C ou du C++ ??
Je suis sous Mac OS 10.4, avec FPC, mon CPU est un Intel C2D 2,33. Idéalement à terme j'aimerais mettre plusieurs machines en réseaux et distribuer les calculs, mais je commence en local sur les 2 coeurs! J'avais parlé à un ingenieur Apple lors de l'Apple Expo et il m'avait dit de passer à Objective C....
Votre aide serait super appréciée - merci !!
Guillaume
Partager