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.