看板 b96902HW 關於我們 聯絡資訊
嗨~~ ※ 引述《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 記得CLOCKS 後面有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)
jimmycool:大學部的quota是2g的樣子 05/09 23:02
godgunman:助教後面的色碼是不是沒用好阿@@ 05/11 17:42
livenupday:對 我發現了QQ 05/12 11:51
※ 編輯: livenupday 來自: 140.112.31.157 (05/12 11:52)