J'ai 2 tableaux, l'un est tableau int et l'autre est tableau double, j'ai besoin de créer un tableau struct dans lequel je sauvegarde l'ID de thread, int, double valeurs de tableau. J'ai n éléments et n threads. J'ai écrit le code suivant, mais de toute façon il imprime les résultats dans l'ordre séquentiel, les résultats ne sont pas mélangés, donc je ne suis pas vraiment sûr que cela fonctionne en parallèle du tout. Code:C++ openMP array est séquentiel
#include <iostream>
#include <omp.h>
using namespace std;
struct Data {
int threadNumber;
double doubleNumber;
int intNumber;
};
int main() {
int numbOfThreads = 20;
omp_set_num_threads(numbOfThreads);
double s2[50];
double s1[50];
Data allArray[50];
for (int i = 0; i < numbOfThreads; i++) {
s2[i] = i * 0.15;
s1[i] = i;
}
int threadNumber = 0;
#pragma omp parallel private(threadNumber)
{
threadNumber = omp_get_thread_num();
for (int i = threadNumber; i < 20; i++) {
allArray[i].threadNumber = threadNumber;
allArray[i].intNumber = s1[i];
allArray[i].doubleNumber = s2[i];
}
}
for (int i = 0; i < numbOfThreads; i++) {
cout << allArray[i].threadNumber << " " << allArray[i].intNumber << " " << allArray[i].doubleNumber << endl;
}
return 0;
}
Et résultat console:
0 0 0
1 1 0.15
2 2 0.3
1 3 0.45
1 4 0.6
1 5 0.75
6 6 0.9
7 7 1.05
8 8 1.2
9 9 1.35
10 10 1.5
11 11 1.65
12 12 1.8
13 13 1.95
14 14 2.1
15 15 2.25
16 16 2.4
17 17 2.55
18 18 2.7
19 19 2.85
id fil des valeurs changements, mais les données sont toujours dans l'ordre croissant.