2016-10-19 5 views
0

Это моя первая неделя для параллельного программирования, и я не могу понять это. Когда я отлаживаю программу, она застревает в «Generating numbers ...». Я думаю, что единственный способ решить эту проблему - создать еще один цикл для себя и запустить его в параллельных потоках. Не могли бы вы мне помочь?Создание еще одного цикла и запуск его в параллельных потоках

#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)))); 
} 
+0

'rand()' не является потокобезопасным, я думаю, вы должны использовать 'rand_r()' –

ответ

-1

Для отладки программы вы можете использовать cout после каждого выражения. Итак, вы узнаете, где остановиться и какие данные на каждом шагу.

+0

Или просто используйте отладчик, который делает все это для вас ... – csmckelvey

+0

@takendarkk Он уже использует его, и это не помощь из-за параллельных потоков. Внимательно прочитайте вопрос: «Когда я отлаживаю программу, она застревает ...» –

Смежные вопросы