public ParallelRegion(int threadNum, NativeThreadPool<OMPThread> pool) { long start = System.currentTimeMillis(); if (threadNum < 1) { throw new IllegalArgumentException("Thread number must be > 0"); } this.pool = pool; team = new OMPThread[threadNum]; finalBarrier = new CyclicBarrier(threadNum); // Check if already inside a parallel region OMPThread master = OMPEngine.getInstance().tryGetOmpThread(); if (master != null) { parent = master.getActiveRegion(); levelNumber = parent.getLevelNumber() + 1; team[0] = master; team[0].setLevel(new Level(master.getLevel(), 0, this)); } else { team[0] = new OMPThread(new Level(0, this), pool); } for (int i = 1; i < threadNum; i++) { team[i] = new OMPThread(new Level(i, this), pool); } LoggingUtils.debug(log, "Initializing parallel region " + (System.currentTimeMillis() - start)); }