for ( int j = 2; j <= MJ - 1; j++) for ( k = 2; k <= NK - 1; k++) for ( i = 2; i <= *(Radiuses + k) - 1; i++) { //вычисление нескольких локальных переменных и проверок ... *(*(*(p1 + i) + j) + k) = *(*(*(p + i) + j) + k) + /* огромная формула, независящая от p1 */ }
#pragma omp parallel for
QMAKE_CXXFLAGS += -fopenmp
#include <omp.h>
*(*(*(p1 + i) + j) + k) = *(*(*(p + i) + j) + k)
p1[ i ][ j ][ k ] = p[ i ][ j ][ k ] +
pthread_win32_thread_detach_np ();
C++ (Qt)#pragma omp parallel forfor (int i = 0; i < limit; ++i) {// расчеты #pragma omp master // код ниже будет выполняться только главной {// рисуем в UI }}
MainWindow::StartCalculation() { // считывание параметров и т.д. thread->start(); //thread типа MyThread унаследованного от QThread}MyThread::run(){ do { ladle->Iterate(); // итерации последовательны, т.е. нельзя их параллельно // запись результатов в файл, возбуждение сигнала об обновлении прогрессбара... } while (условие выхода);}Ladle::Iterate(){ считать_то(); // каждое считать() - это пробег по 3-д массиву считать_сё(); for ( m = 0; m < iterations; m++) // iterations обычно = 500-5000 считать_еще(); // именно тут я хотел распараллелить, а если получится, то потом в каждом "считать()"}
for ( m = 0; m < iterations; m++) // iterations обычно = 500-5000 считать_еще(); // именно тут я хотел распараллелить, а если получится, то потом в каждом "считать()"}