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)
- Dec 04 Sat 2010 14:10
Parallel program HW3 notes
close
全站熱搜
留言列表
發表留言