作者livenupday (掛站中..請稍後XD)
看板b96902HW
標題Re: [系程]幾個問題@@
時間Sat May 9 21:21:13 2009
嗨~~
※ 引述《BingJing (京醬)》之銘言:
不知道為啥直接回文你的問題1不見了@@
我想應該可以用setbuffer來做吧!
因為本次作業的目的似乎也不是在這
當然同學要自己implement也是非常歡迎
主要是讓同學瞭解external merge sort的技巧就是了
: 2. 緩衝區的大小的算法是 s=X/(n+1),X是主記憶體允許最大的量,請問這個要怎麼
: 去檢查? 還有範例很模糊的帶過,s = 2MB = 10MB/(4+1),那個X(主記憶體
: 的量是從哪裡弄到的,不會是每個部分暫存的檔案大小吧?)
主記憶體的量..我原本是假設上限是工作站的記憶體大小
不過剛剛看似乎蠻大的XD
而這個部分我的確沒有說明清楚,其實是想讓同學自己設計
原則上,請不要超過
測資數字量大小的1/4
例如十億個數字的話就有將近3814.69MB的記憶體,那就請同學假設X的上限為
3814.69 / 4 = 953.67 MB
暫存檔案的大小也可以,應該還是可以達到external merge sort的功能
總而言之是想讓大家練習multi-processes的external merge sort就是了
而這部分又沒有講很清楚,所以我不會太硬性規定
但請同學一定要用
很多個child processes來作sorting,不要一次塞到memory裡面sort呀QQ
: 3. 說明裡面有一段 "Each child process reads parts of the data set" ,因為助
: 教是用字元的方式來存輸入檔的,所以我們還要去算每個子程序是從哪一點開
: 始讀的(我的實作方法如下a),因為想要知道從哪一點開始讀,不是要用用O(n)
: n是輸入檔案的大小 去算它,為什麼不如母程序讀一讀直接送給子程序就好了?
:
: a. loop fscanf(file,"%d",&tmp) m/n times // m是總共有幾個要排序 n是程序數
: offset = fseek( ...current...之類的 )
: call fork gived offset 再去讀一次 = =
看起來是可以
就是parent process可以先算好各個child process offset的位置,
再交給child process去讀(這樣也是比較好做的做法)
不知道我有沒有會錯意
: 4. 搞不太懂vfork , 是共用記憶體嗎? (單班好像還沒教,可以多凹一個禮拜
: deadline嗎? XD)manual裡面有一句"The parent process is suspended while
: the child is using its resources" 這句話好像就只是說母程序不會讀到很髒
: 的資料而已,有沒有什麼辦法可以綁住資源保證下面幾行給誰用是確定的?
vfork的功用跟fork差不多,
但在call的時候不會像fork一樣複製整個parent process的記憶體等等,
而是跟parent process一起共用resource,
因此parent process必須等child做完才能繼續作
雖然單班進度似乎較慢,但可能無法多凹一個禮拜耶...
(謎之聲:那可以凹幾天嗎QQ)
等你們deadline到的時候,理論上新的作業又會在你們睡了一個晚上好覺以後公佈唷XD
不過這個會再斟酌啦,看到時交的狀況如何,還是努力寫一下吧~~
(不要大家一起擺爛不寫阿= =)
: 5. clock()函數,看起來很好用。她從每個程序開始執行的時候開始算,那算每個子程
: 序執行的時間就很方便,要結束前記一下clock()就好了。可是它的單位好奇怪,
: "determines the amount of processor time"沒有給耶,請問要怎麼換算?
: 輸出最後要是單位十的負六次方秒吧?
超好用XD
他的單位確實很奇怪,如果我理解沒錯的話,他的單位是CPU跳了幾個clock
什麼意思勒,推薦大家參考cplusplus
http://www.cplusplus.com/reference/clibrary/ctime/clock/
裡頭有寫到
Returns the number of clock ticks elapsed since the program was launched.
The macro constant expression CLOCKS_PER_SEC specifies the relation between a
clock tick and a second (clock ticks per second).
反正...就是CPU跳了幾次clock ticks的意思
也就是說如果你要換成秒,你必須要除以一個constant variable叫做
CLOCKS_PER_SEC
記得CLOCK
S 後面有S XD
這個變數就是CPU一秒可以跳幾個ticks
除一除,就會變成正常的秒啦,然後再乘以1000換算成usec就ok了。
: 祝大家母親節愉快:) 感謝助教
哇~~ 祝大家母親節快樂唷!! (餐廳都訂滿了QQ) 不會不會XD
最後,有人可以告訴我大學部帳號可以存input3嗎 @@
還是大家都直接讀我的路徑底下的data XD?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.247.206
※ 編輯: livenupday 來自: 61.228.247.206 (05/09 21:23)
1F:推 jimmycool:大學部的quota是2g的樣子 05/09 23:02
2F:推 godgunman:助教後面的色碼是不是沒用好阿@@ 05/11 17:42
3F:→ livenupday:對 我發現了QQ 05/12 11:51
※ 編輯: livenupday 來自: 140.112.31.157 (05/12 11:52)