¤Æ¤­¤È¤¦¤ÊÆü¡¹

¾ì¤ÎÎÌ»ÒÏÀ¤Ë̵ËŤˤâÆÈ³Ø¤Ç(¥³¥Ä¥³¥Ä¤È¡Ë¸ÉÆÈ¤ËÄ©ÀïÃæ¡£

Á´ÂÎɽ¼¨

[ ¥ê¥¹¥È ]

OpenMPÊÂÎó²½(for¥ë¡¼¥×Æâ¤Ëberak¤¬¤¢¤ë¾ì¹ç¡Ë

for¥ë¡¼¥×¤ÎÃæ¤Ëbreak¤¬¤¢¤ë¾ì¹çOpenMP¤ÇÊÂÎ󲽤·¤è¤¦¤È¤·¤Æ¤â¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤È¤Ê¤Ã¤ÆÊÂÎó²½½ÐÍè¤Ê¤¤¡£


 #pragma omp parallel¡¡for
 for ( int i = 0; i < 1000; i++ )
 {
      .........
     if ( xxxx )
     {
        break;
     }
     ......
 }


°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ(Î㤨¤Ð¡ËLoopInBreak¥¯¥é¥¹¤ò»È¤¦¤³¤È¤Çbreak¤¬for¥ë¡¼¥×¤Ë¤¢¤Ã¤Æ¤âÊÂÎó²½½ÐÍè¤ë¡£


int break_flag = false;
#pragma omp parallel
{
   LoopInBreak omp(ÊÂÎ󲽿ô, 1000, &break_flag );
   for ( int i = omp.Begin(); omp.Condition(i); i++ )
   {
       .........
       if ( xxxx )
       {
           MY_LOOP_BREAK(omp);
       }
       ......
   }
}


class Thread_omp_LoopInBreak
{
 int threadNum_;   //¥¹¥ì¥Ã¥É¿ôÀßÄê
 int loopNum_;   //¥ë¡¼¥×¿ô ( 0...loopNum-1)
 int threadId;   //¥¹¥ì¥Ã¥ÉID
 
 //ÊÂÎ󲽤µ¤ì¤Æ¤¤¤ëº£¤Î¥¿¥¹¥¯¤¬¹Ô¤¦¤Ù¤­¥ë¡¼¥×½èÍý¤Î³«»Ï¤È½ªÎ»ÃÍ
 int i_st;
 int i_ed;
 
 int* break_flag_;
 
public:
 Thread_omp_LoopInBreak( int threadNum, int loopNum, int* break_flag):threadNum_(threadNum),loopNum_(loopNum),break_flag_(break_flag)
 {
#ifdef USE_OPENMP 
  threadNum_ = threadNum;
  loopNum_ = loopNum;
  //ÊÂÎ󲽤µ¤ì¤Æ¤¤¤ë¤È¤­¤Îº£¤Î¥¿¥¹¥¯¤Î¥¹¥ì¥Ã¥ÉID
  threadId = omp_get_thread_num();
  
  //ÊÂÎ󲽤Îʬ³ä¥¹¥Æ¥Ã¥×
  int n = (loopNum_  + threadNum_ -1 )/threadNum_;
  //ÊÂÎ󲽤µ¤ì¤Æ¤¤¤ëº£¤Î¥¿¥¹¥¯¤¬¹Ô¤¦¤Ù¤­¥ë¡¼¥×½èÍý¤Î³«»Ï¤È½ªÎ»ÃÍ
  i_st = n*threadId;
  i_ed = ( i_st + n < loopNum_ ) ? i_st + n: loopNum_;
#else
  threadNum_ = 1;
  loopNum_ = loopNum;
  threadId = 0;
  i_st = 0;
  i_ed = loopNum_;
#endif
  //printf("threadNum(%d) loop %d ¡Á %d\n", threadId, i_st, i_ed );
 }
 
 inline int Id()
 {
  //ÊÂÎ󲽤µ¤ì¤Æ¤¤¤ë¤È¤­¤Îº£¤Î¥¿¥¹¥¯¤Î¥¹¥ì¥Ã¥ÉID
  return threadId;
 }
 
 inline int Begin()
 {
  return i_st;
 }
 inline int End()
 {
  return i_ed;
 }
 
 inline bool Condition(int loopCounter)
 {
  return (!(*break_flag_) && loopCounter < i_ed);
 }
 
 inline void LoopBreak()
 {
  *break_flag_ = true;
 }
};
#define MY_LOOP_BREAK( omp ) omp.LoopBreak();continue


ÊĤ¸¤ë ¥³¥á¥ó¥È¡Ê0¡Ë

¥³¥á¥ó¥ÈÅê¹Æ
̾Á°¥Ñ¥¹¥ï¡¼¥É¥Ö¥í¥°
Åê¹Æ

ÊĤ¸¤ë ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¡Ê0¡Ë

¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤µ¤ì¤¿µ­»ö

¥È¥é¥Ã¥¯¥Ð¥Ã¥¯¤µ¤ì¤Æ¤¤¤ëµ­»ö¤¬¤¢¤ê¤Þ¤»¤ó¡£

¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Àè¤Îµ­»ö

  • ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯Àè¤Îµ­»ö¤¬¤¢¤ê¤Þ¤»¤ó¡£

·Ýǽ¿Í¡¦Í­Ì¾¿Í¤Î¿·Ãåµ­»ö

Yahoo Image
Masao.S
TwitterMasao_S: ¥É¥é...
05·î27Æü 02:30

.

¿Íµ¤ÅÙ

¥Ø¥ë¥×

Yahoo Image

¸¡º÷ ¸¡º÷
Æü ·î ²Ð ¿å ÌÚ ¶â ÅÚ
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
  º£Æü Á´ÂÎ
ˬÌä¼Ô 8 129700
¥Ö¥í¥°¥ê¥ó¥¯ 0 34
¥³¥á¥ó¥È 0 1281
¥È¥é¥Ã¥¯¥Ð¥Ã¥¯ 0 29

¥Ö¥í¥°¥Ð¥Ê¡¼

³«À߯ü: 2006/12/28(ÌÚ)


¥×¥é¥¤¥Ð¥·¡¼¥Ý¥ê¥·¡¼ -  ÍøÍѵ¬Ìó -  ¥¬¥¤¥É¥é¥¤¥ó -  ½ç¼é»ö¹à -  ¥Ø¥ë¥×¡¦¤ªÌ䤤¹ç¤ï¤»

Copyright (C) 2012 Yahoo Japan Corporation. All Rights Reserved.