следующий код написан последовательно.Я хочу реализовать OpenMP, заменив цикл while на цикл for, но понятия не имею, как это сделать.Я знаю синтаксис OpenMP, но не могу его реализовать.
Причиной параллелизма является проверка производительности между последовательной и параллельной техникой.Любая помощь?
void block::mine_block(uint32_t difficulty) noexcept
{
string str(difficulty, '0');
auto start = system_clock::now();
while (_hash.substr(0, difficulty) != str)
{
++_nonce;
_hash = calculate_hash();
}
auto end = system_clock::now();
duration<double> diff = end - start;
cout << "Block mined: " << _hash << " in " << diff.count() << " seconds" << endl;
}
@ Matthieu Brucher - Может ли это быть решением?
#pragma omp parallel // start the parallel region
{
#pragma omp single // let the while loop execute by one thread and generate tasks
while (time < TotalTime){
#pragma omp task
{
// this code will be a task that may be executed immediately on a different core or deferred for later execution
}
} // end of while loop and single region
// at this point we also wait until all tasks that were created have finished
} // end of parallel region
Путем реализации вышеуказанногокод
#pragma omp parallel
{
#pragma omp single
while (_hash.substr(0, difficulty) != str) {
#pragma omp task
{
++_nonce;
_hash = calculate_hash();
}
}
}