這是我第一個並行編程的一週,我似乎無法弄清楚這一點。當我調試程序時,它停留在「生成號碼...」。我認爲解決這個問題的唯一方法是爲自己創建另一個循環,並在並行線程中運行它。你能幫我麼?創建另一個循環並以並行線程運行
#include <iostream>
#include <cstdlib>
#include <climits>
#include <ctime>
#include <time.h>
#include <Windows.h>
using namespace std;
const int NSIZE = INT_MAX/5;
void gen_numbers (float numbers[], int how_many);
float gen_rand(int min, int max);
float sum(float array[], int num_elements);
float numbers[NSIZE];
int main()
{
unsigned int seed = time(0);
srand(seed);
__int64 start1 = GetTickCount();
cout << "Generating numbers..." << flush;
gen_numbers(numbers, NSIZE);
cout << "done." << endl;
cout << "Summing the numbers..." << flush;
float answer = sum(numbers, NSIZE);
cout << "done" << endl;
__int64 end1 = GetTickCount();
cout << "Total time: " << end1 - start1 << endl;
cout << "Answer: " << answer << endl;
system("pause");
return 0;
}
float sum(float array[], int num_elements)
{
float nsum = 0.0;
#pragma omp parallel for reduction(+:nsum)
for (int i = 0; i < num_elements; i++)
{
nsum += array[i];
}
return nsum;
}
void gen_numbers(float numbers[], int how_many)
{
#pragma omp parallel for
for (int i = 0; i < how_many; i++)
{
numbers[i] = gen_rand(0, 10);
}
}
float gen_rand(int min, int max)
{
return(min + static_cast <float> (rand())/
(static_cast <float> (RAND_MAX/(max - min))));
}
'蘭特()'不是線程安全的,我認爲你應該使用'rand_r()' –