MessageBar クラスと OpenMP

投稿日 by Iwao

新しい Message クラスを使用して,OpenMP 対応の動作のテスト.
void CTSttBView::OnTestDrawBar2()
{
  Message tmp ;
  ElapseTick et ;
  #define BAR_COUNT_2 1000000
  #ifdef _OPENMP
    #pragma omp parallel for
  #endif
  for (int i=0 ; i<100 ; i++) {
    Message bar ;
    bar.SetBar (_T(“Test Message 1 M * 100”),BAR_COUNT_2,RGB(0,255,0)) ;
    for (int index=0 ; index<BAR_COUNT_2 ; index++) {
      bar.SetBarInc() ;
      }
    }
  DWORD elapseT = et.GetElapse() ;
  CString str ; str.Format(_T(“%.2f 秒”),elapseT/1000.) ;
  AfxMessageBox(str) ;
  }
1 億回 SetBarInc を呼出していて,10 秒程度だったのが,#pragma omp parallel for で 20 秒程度になってしまった.


inline bool MessageBase::SetBarInc (void)
{
  if (GetBarMax() == 0) { return false ; }
  if (GetBarCount() < GetBarMax()) { B_Counter++ ; }
  else { B_Counter = 0 ; } // reset
  IncCounterR() ;
  {
    long lastPos = long(100*(GetBarCount()-1)/GetBarMax()) ;
    long new_Pos = long(100*(GetBarCount()-0)/GetBarMax()) ;
    if (lastPos == new_Pos) { return true ; }
    }
  #ifdef _WINDOWS
  #ifdef _MFC_VER
  #ifdef _OPENMP
    if (AfxGetMainWnd() == NULL) { return false ; }
  #endif
  #endif
  #endif
  return SetBarCount(B_Counter) ;
  }
AfxGetMainWnd() を呼出す回数を減らすことにより,3 秒程度に.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください