Example #1
0
void uninit()
{
    for (TaskVector::iterator it = tasks.begin(); it != tasks.end(); it++)
    {
        delete *it;
    }
    tasks.clear();
}
Example #2
0
//Called after the window and OpenGL are initialized. Called exactly once, before the main loop.
void init()
{
    tasks.push_back(new TaskOne());
    tasks.push_back(new TaskTwo());
    tasks.push_back(new TaskThree());
    tasks.push_back(new TaskFour());
    tasks.push_back(new BonusTask());

    // initialize all our new tasks
    for (TaskVector::iterator it = tasks.begin(); it != tasks.end(); it++)
    {
        ITask* task = (*it);
        task->InitializeProgram();
        task->Initialize();
    }

    currentTaskNumber = 0;
    ITask* currentTask = tasks[currentTaskNumber];
    if (currentTask != NULL)
    {
        currentTask->InitializeProgram();
    }

    glCullFace(GL_BACK);  // only back faces will be culled, if enabled
    glClearColor(0.3f, 0.3f, 0.3f, 1.0f); // color for cleaning the screen
}
void test_parallel(int nested, int outerThreadNum, int middleThreadNum, int innerThreadNum, int singleThreadNum){
  std::cout << std::endl << "nested: " << nested 
            << "; outer Threads: " << outerThreadNum 
            << "; middle Threads: " << middleThreadNum 
            << "; inner Threads: " << innerThreadNum
            << "; single (non-nested) Threads: " << singleThreadNum << std::endl; 
  
  ompt_task_id_t serial_taskID = ompt_get_task_id(0); 
  #ifdef OMPT_DEBUG
    std::cout << "(before first region) serial_thread_task_id=" << serial_taskID << std::endl; 
  #endif
  int threadNums[3];
  threadNums[0]=outerThreadNum; threadNums[1]=middleThreadNum; threadNums[2]=innerThreadNum;
  TaskVector parents;
  parents.push_back(serial_taskID);
  test_region(1, (innerThreadNum)?3:2, threadNums, parents);
  
#ifdef OMPT_DEBUG
  std::cout << std::endl << "(before second region) serial_thread_task_id=" << ompt_get_task_id(0) << std::endl; 
#endif
  assertEqual(ompt_get_task_id(0), serial_taskID, "Serial task id changed after region 1");
  test_region(1, 1, &singleThreadNum, parents);
}
void test_region(int level, int maxLevel, int* threadNums, TaskVector parents){
  #pragma omp parallel num_threads(threadNums[level-1]) 
  {
    TaskVector taskIDs;
    #ifdef OMPT_DEBUG
      // Critical section around get_task_id for easier debugging
      #pragma omp critical
    #endif
    for(int i=0; i<=level; i++){
        taskIDs.push_back(ompt_get_task_id(i));
    }
    #pragma omp critical
    {
      #ifdef OMPT_DEBUG
        std::cout <<"(Level " << level << ") implicit_task=" << taskIDs[0] << " enclosing_task=" << taskIDs[1] << std::endl;
      #endif
      is_task_unique( map_taskID, taskIDs[0], taskIDs[1]);
      for(int i=1; i<=level; i++){
        std::stringstream sMsg;
        sMsg << "Parent task ID level " << level << " -> " << level - i << " mismatch";
        assertEqual(taskIDs[i], parents[parents.size()-i], sMsg.str().c_str());
      }
    }
    if(level<maxLevel){
      // Do not modify outer vector as it is used by other threads!
      TaskVector newParents = parents;
      newParents.push_back(taskIDs[0]);
      test_region(level+1, maxLevel, threadNums, newParents);
      // Make sure the task ids did not change
      for(int i=0; i<=level; i++){
        std::stringstream sMsg;
        sMsg << "Task ID level " << level << " -> " << level - i << " changed after nested region";
        assertEqual(ompt_get_task_id(i), taskIDs[i], sMsg.str().c_str());
      }
    }
  }
}
Example #5
0
//Called whenever a key on the keyboard was pressed.
//The key is given by the ''key'' parameter, which is in ASCII.
//It's often a good idea to have the escape key (ASCII value 27) call glutLeaveMainLoop() to
//exit the program.
void myKeyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27:
            exit(0);
            break;
        case ' ':
            currentTaskNumber = (currentTaskNumber + 1) % tasks.size();
            ITask* currentTask = tasks[currentTaskNumber];
            if (currentTask != NULL)
            {
                currentTask->InitializeProgram();
                printf("Current Task = %s\n", currentTask->ToString());
            }
            break;
    }
    glutPostRedisplay();  // Nutno, kdybychom nevolali prekresleni casovacem ci Idle
}