Wie man ein Array in openacc privat machen? Für meine Verwendung habe ich ein Array deklariert, das eine Rekursionsfunktion durchläuft und sich selbst aktualisiert. In C++ Ich habe es auf diese Weise,Private Array, die Rekursion für jede Gruppe in openacc durchläuft
int recursion(int array[],int i)
{
....
return array[i] = recursion(array,i);
}
int main()
{
....
for(int run=0;run<N;++run)
{
....
for(int i=0;i<some N;++i)
int f = recursion(array,i);
}
.....
}
nun das Hauptproblem beginnt, wenn ich versuche, dies parallel zu tun Direktiven OpenACC. Ich möchte dieses Array in die parallele for-Schleife-Region in einer solchen Weise kopieren, dass jede Gruppe eine Kopie dieses Arrays haben wird und in der Lage sein wird, ihre eigene Version von Array [] und nicht die anderen zu ändern, die die Rekursionsfunktion verwenden. Die Art, wie ich versucht, dies zu tun ist
#pragma acc routine seq
int recursion(int array[],int i)
{
....
return array[i] = recursion(array,i);
}
int main()
{
....
#pragma acc data copyin(array[0:N])
#pragma acc parallel loop gang private(array[0:N])
for(int run=0;run<N;++run)
{
....
for(int i=0;i<N;++i)
{
....
int f = recursion(array,i);
}
}
}
Aber es scheint, dass das Array ist nicht auf die Rekursion Funktion übergeben zu werden, wie ich überprüft haben, dass sie sich nicht verändert. Was ist der perfekte Weg, dies zu tun?
p.s. Ich habe auch versucht #pragma acc data pcreate(array[0:N])
mit #pragma acc parallel loop independent private(array[0:N])
aber das Ergebnis ist das gleiche
Sie können den gesamten Code here finden. Es funktioniert perfekt ohne die Direktiven. Sie müssen nur die Zeile mit curand kommentieren und die Zeile mit rand bei 251 268 Zeile auskommentieren. Bitte Hilfe!
können Sie verwenden Samen 3 vertice Nummer 20000 Bestellnummer 2 Ensemble Nummer 25000 Dateinummer 1 Sie den fout Abschnitt am Ende der Datei Kommentar-, wenn Sie die aus auf einer Datei gespeichert sehen wollen –
mit firstprivate half nicht, auch das Löschen von 'random' und 'ptr' aus Datenanweisungen half nicht. –
Sie können auch Vertex Nummer so klein wie 5000, wenn Sie für eine schnellere Ausführung wollen, erstellt es 3 Dateien, müssen Sie die 'cout' direkt vor dem fout im letzten Teil des Codes auskommentieren, um die Daten im Terminal zu sehen, danke Sie für Ihre Hilfe, bedeutet viel –