2017-07-09 2 views
0

Ich möchte den folgenden Algorithmus mit OpenMP parallelisieren. A und C sind die Eingangsdaten und B ist der Ausgang. A ist ein Vektor und das Element A [i] zeigt die Anzahl der Elemente in der i-ten Zeile des Arrays C. Ist die Parallelisierung möglich?openmp Abhängigkeit von aufeinanderfolgenden Vektorelementen

bno=0; 
for (j=0; j<A[0]; j++) 
    B[bno++] = C[0][j]; 

for (i=1; i<L; i++) 
    for (j=0; j<A[i]; j++) 
     for (k=0; k<A[i-1]; k++) 
      if (f(C[i][j], C[i-1][k]) == 1) 
       B[bno++]=C[i][j]; 
+0

nicht direkt parallelisiert werden, außer durch Ändern der Speicherorte in B [], möglicherweise danach packen, um das ursprüngliche Layout wiederherzustellen. – tim18

+0

Eine praktische Antwort erfordert eine [mcve] und auch welche Sprache dies. – Zulan

Antwort

0

ich umschreiben eine minimale, vollständig und nachprüfbar Version des Seriencode in C über die Variablen: Die Tabelle A [N] [M] von ganzen Zahlen eingegeben meinen Code, der Vektor B [] von Integern wird ausgegeben und die Ganzzahl bno wird ausgegeben und speichert die Anzahl der ganzen Zahlen, die in Vektor B [] kopiert wurden. Ist diese serielle Seriennummer parallelisierbar? Ich benutze OpenMP.

bno=0; 
for (i=1; i<N; i++) 
    for (j=0; j<M; j++) 
     for (k=0; k<M; k++) 
      if (C[i][j] == C[i-1][k]) 
       B[bno++]=C[i][j]; 

zum Beispiel für die folgende Eingabe: A [4] [3] = [
7, 8, 9,
1, 2, 8
0, 5, 6
6, 6, 5]
der Ausgang sollte sein: B = [8, 6, 6, 5], Bno = 4.

Verwandte Themen