Я добавил код openMp к некоторому последовательному коду в приложении симулятора, когда я запускаю программу, которая использует это приложение, программа неожиданно завершает работу с выводом «Поток« Win32 Thread »(0x1828) завершился с кодом 1 (0x1)» "Это происходит в параллельной области, где я добавил код OpenMp,
Вот пример кода:
#pragma omp parallel for private (curr_proc_info, current_writer, method_h) shared (exceptionOccured) schedule(dynamic, 1)
for (i = 0 ; i < method_process_num ; i++)
{
current_writer = 0;
// we need to add protection before we can dequeue a method from the methods queue,
#pragma omp critical(dequeueMethod)
method_h = pop_runnable_method(curr_proc_info, current_writer);
if(method_h !=0 && exceptionOccured == false){
try {
method_h->semantics();
}
catch( const sc_report& ex ) {
::std::cout << "\n" << ex.what() << ::std::endl;
m_error = true;
exceptionOccured = true; // we cannot jump outside the loop, so instead of return we use a flag and return somewhere else
}
}
}
Планирование было статическим до того, как я сделал его динамическим, после того как я добавил динамический с размером фрагмента 1, приложение продолжало работать немного дальше, прежде чем завершилось, может ли это быть показателем того, что происходит внутри параллельной области?
спасибо