vine-users ML アーカイブ



[vine-users:052227] 計測時間が狂うのです

  • From: 田中 元 <BYH01337@xxxxxxxxxxx>
  • Subject: [vine-users:052227] 計測時間が狂うのです
  • Date: Fri, 19 Jul 2002 02:53:13 +0900
  MacOS 8.6上CodeWarrior(IDE4.0.4)を用いて作成したC言語によるプログラムがあり
ます。MacからLinuxマシン(VineLinux PPC 2.5)にそのソースをもってきましてgccにて
コンパイルしましたところ、プログラム実行中での計測時間が狂います。具体的にはモ
ニタ上に表示される時間が減少したりします(他の症状もあるかもしれませんが)。
  おおかた型を誤っているのだろうと思ったのですが、いまのところ自分では気づけま
せん。また、Mac上で走らせているぶんにはなんの異常もなさそうです。下に時間計測
に関わる部分のみをソースから抜粋してのせておきます。お気づきの点がありましたら
アドバイスをお願いします。

typedef unsigned long int time_passed; 

void Read_tmp(
    const char *filename, 
    const char *mode, 
    int *pmax_series_set, 
    int *pn_series_set, 
    set **pseries_set, 
    int *pmax_series_record, 
    int *pn_series_record, 
    int *poptimizesgl, 
    record **pseries_record, 
    int *pi_series_record, 
    set *pnd_set, 
    int *pstepmin, 
    double *pratiomin, 
    double *pep, 
    int *pstepsgl, 
    int *pstep, 
    time_passed *ppass0
);  
void Read_tmp(
    const char *filename, 
    const char *mode, 
    int *pmax_series_set, 
    int *pn_series_set, 
    set **pseries_set, 
    int *pmax_series_record, 
    int *pn_series_record, 
    int *poptimizesgl, 
    record **pseries_record, 
    int *pi_series_record, 
    set *pnd_set, 
    int *pstepmin, 
    double *pratiomin, 
    double *pep, 
    int *pstepsgl, 
    int *pstep, 
    time_passed *ppass0
)    
{
(中略)    
        if(NULL == fgets(buf, sizeof(buf), fp)) exit(1);  /*ppass0の読み込み*/
        if(sscanf(buf, "passed time /sec = %lu", ppass0     < 1    
            fprintf(stderr, "can't read pass0 ! \n"), exit(1);  
        printf("pass0 = %12u\n", *ppass0);  
(中略)    
}

int main(    
{
(中略)    
    
    /*各初期値を得る.*/
        if('y' == icon    {/*tmpファイル, tmp.CDsearch130_bからの読み込み.*/
        Read_tmp(
            "tmp.CDsearch130_b", 
            "rb", 
            &max_series_set, 
            &n_series_set, 
            &series_set, 
            &max_series_record, 
            &n_series_record, 
            &optimizesgl, 
            &series_record, 
            &i_series_record, 
            &ndp_set, /*読み捨て*/
            &stepmin, 
            &ratiomin, 
            &ep, 
            &stepsgl, 
            &step, 
            &pass0
    ); 
    else{/*初期値設定*/
(中略)    
        pass0 = 0; 
   }
    t0 = t1 = clock();  pass = (t1-t0) / CLOCKS_PER_SEC + pass0; /*時間計測開
始*/

    for(; ;){ 
    
        if(optimizesgl == 0) {
            for(; ;) { 
                for(; ;) {
(中略)    
                    for(; ;) {     
                        /*時間計測*/
                        t1 = clock();  pass = (t1-t0) / CLOCKS_PER_SEC +pass0;
 
                        printf("\n");  printf("passed time = %12u sec\n", pass
);  printf("\n");  
(中略)    
                    } 
                } 
            } 
        }
        if(optimizesgl == 1) {
            
            for(; ;) { 
(中略)    
                /*時間計測*/
                t1 = clock();  pass = (t1-t0) / CLOCKS_PER_SEC +pass0; 
                printf("\n");  printf("passed time = %12u sec\n", pass);  prin
tf("\n");  
            }
        } 
(中略)    
        /*時間計測*/
        t1 = clock();  pass = (t1-t0) / CLOCKS_PER_SEC +pass0; 
        printf("\n");  printf("passed time = %12u sec\n", pass);  printf("\n")
;  
(中略)    
                
    } /*計算全体を終了*/
        
    return 0;
}
田中 元 BYH01337@xxxxxxxxxxx