close

difftime最多只精準到sec
所以要到sec以下的時間測量
要用clock,一樣是含入time.h得標頭檔就可以

不過這邊比較特別的是
我在網路上文獻看到MSDN的clock是以微秒計算ms
但是我在Fedora上面測試,實際上是以毫秒計算   { 1/(10^6) }

然後在pthread上,似乎pthread_create後thread去帶進去跑得function argument並不會成回那個pthread的local variable
這部份觀念與MPI不大一樣,像是如下的送argument給function

        for (p = 0; p             rows = rows_per_worker_quot;
            if (p                     ++rows;
            start_msg[0] = first_row;
            start_msg[1] = rows;
            MPI_Send(start_msg, START_LNG, MPI_INT, p+1,START_TAG, MPI_COMM_WORLD);
            first_row += rows;
        }
      
我在同樣傳遞給各個process or thread各自要處理的row值時
MPI可以接收到正確的row值
但是pthread不行,他每個function只會讀到最後的值
所以似乎pthread並不是把值傳給function只是把指標指過去而已
所以之後我改成這樣,只好每個thread各自有各自的值了(不能重複指定省記憶體)

for (t = 0; t         rows = rows_per_worker_quot;
            if (t                     ++rows;
            irow[t].first_row = first_row;
            irow[t].rows = rows;
            irow[t].tid = t;   
          sc = pthread_create(&threads[t], NULL, Mandelbort_Draw, (void*) &irow[t]);
    printf("----main----first_row = %d, rows = %d, thread_id = %d\n",irow[t].first_row, irow[t].rows, irow[t].tid);
          if (sc){
                exit(-1);
            }
            first_row += rows;
        }




還有這次在compile時遇到有趣的現象
就是gcc compile不過但是cc compile卻過得情形
之前再看助教提供的Makefile時就發現
工作站上呼救openmp library的方式有點不一樣
後來發現原來是因為他們用的compiler不一樣的關係
一般像我自己的fedora
usr/bin/cc 會有訊息表示cc_>gcc
但是工作站的solaris電腦
他的cc是cc_>opt/SUNWproc/bin/cc
是有經過最佳化的compiler 所以下參數方式才會不一樣
所以會變成兩種方式
C compilation to create a parallel program (OpenMP directives honored and program linked with the OpenMP runtime library)

cc -xopenmp=parallel -fast -o prog prog.c (SunStudio Ceres compiler 5.10)
or
gcc -fopenmp -O3 -o prog prog.c (Gnu C compiler 4.1)





arrow
arrow
    全站熱搜
    創作者介紹
    創作者 angledark0123 的頭像
    angledark0123

    CONY的世界

    angledark0123 發表在 痞客邦 留言(0) 人氣()