vine-users ML アーカイブ



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

  • From: Hajime Tanaka <BYH01337@xxxxxxxxxxx>
  • Subject: [vine-users:052247] Re: 計測時間が狂うのです
  • Date: Fri, 19 Jul 2002 20:19:52 +0900
 上村さん、応答ありがとうございます。

>
> >         if(sscanf(buf, "passed time /sec = %lu", ppass0     < 1
> >             fprintf(stderr, "can't read pass0 ! \n"), exit(1);
>
> ほんとにこれでgccを通っているのですか? 左右のカッコの数が合ってないと
> 思います。

 なぜかVineLinux上のエディタからmozillaにテキストをコピー&ペーストできま
せんで、リブートしたところできるようになったと思いきや、今度はコピー後に"
) "が消えてしまいます。気づいた箇所は直したのですが一部漏れ落ちました。失
礼を。しかしこのコピー&ペーストのトラブルは頭が痛いです。しかたがないので
いまはMacで作業しております。
 先のメールでpassをキャストする点を加えてあらためてソースの時間計測部分の
みを示します。残念ながら
pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0;
としてキャストを行っても依然、時間がおかしいです。ちなみに同一のソースが
Mac上では異常を見せないことも相変わらずです。どこを疑うべきでしょうか?

ttypedef 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()
{
(中略)
 clock_t t0, t1;
 time_passed pass, pass0;
(中略)
             if ('y' == icon){
  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 = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0;
/*時間計測開始*/
         printf("\n"); printf("***** START ! *****\n");
 for (; ;){
          if (optimizesgl == 0){
   for (; ;){
              for (; ;){
                 for (; ;){
                    /*時間計測*/
      t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0;
      printf("\n"); printf("passed time = %12u sec\n", pass);
printf("\n");
(中略)
     }
    }
    if (i_series_record >= n_series_record){
     /*時間計測*/
     t1 = clock(); pass = (time_passed)((t1-t0)/ CLOCKS_PER_SEC) +pass0;
     printf("\n"); printf("passed time = %12u sec\n", pass); printf("\n");

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

>
>
>     if(sscanf(buf, "passed time /sec = %lu", ppass0)     < 1)
>           fprintf(stderr, "can't read pass0 ! \n"), exit(1);
>
> のつもりではないのでしょうか?
>
> gccでエラーにならなかったとしたら
>
>     if(sscanf(buf, "passed time /sec = %lu", ppass0     < 1))
>           fprintf(stderr, "can't read pass0 ! \n"), exit(1);
>
> になっているのではないかとおもいますが......
> この場合多分実行時にエラー(Segmentation fault ?)になると思いますが。
> 理由は
>
> printf("value = %lu\n",ppass0 < 1);
>
> で表示される値で表されるアドレスにsscanfの結果を書き込むことになると
> 思うからです。
>
> 間違っていたら、識者の方フォローを宜しく...
>
> 尚、変数の定義のあたり、特にppass0の前後も省略しないで書いたほうが
> アドヴァイスを受けやすいと思います。(原因がそのあたりにあるかも...)
>
> --
> ==================================================
> 上村 岳明   Gakumei Kamimura
>    E-Mail:kami@xxxxxxxxxxxxxxxxxxx
>    TEL 03-5445-7059 / FAX 03-5445-7071
>    JALインフォテック(株)ソリューション事業本部

--
田中 元 BYH01337@xxxxxxxxxxx