Exemplo n.º 1
0
  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));
  }