作者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)