c/c++代写:多线程编程
完成一个多线程变成,c/c++代写
CS305 作業系統概論 Homework #2 Multithreading
2018.04.18
一、 作業目的
熟悉如何使用Pthreads的API,撰寫multithreaded program。
二、 作業內容
【大數據中的關鍵文件】為了要在許多文件中找出關鍵文件,L公司想要來利用電腦科技來達成目標。
對L公司而言,在一個有M個文件的文件集合D={d 1 ,d 2 ,…,d M }中,關鍵文件d k 就是與其他文件的相似度總
和最高的文件。但對於如何快速計算文件的相似度,L公司卻毫無頭緒。
於是L公司來到風之塔學院尋求幫助。對於這個大數據問題,風之塔學院的C教授帶著他的高徒開發這個
程式。C教授決定先使用傑卡德相似係數(Jaccard similarity coefficient)的方法來計算,找出關鍵文件。傑
卡德相似係數的公式如下,在兩個集合 A 與 B 中,兩個集合A和B的交集元素個數在A,B的聯集元素個
數中所佔的比例,就是它們的傑卡德相似係數:
J ( A , B ) = | A ∩ B |/ | A ∪ B |
因此如果對下面兩個文件1
2
3d 1 = “this is a book”
d 2 = “this is a pen”
J(d 1, d 2 )=3/5=0.6
C教授同時要用multithreaded programming 的方式來設計程式。每一份文件對其他M-1份文件的平均傑卡
德相似係數(Average J(d 1, d 2 ))是由一個單獨的thread 來計算出來。所有文件會放在一個檔案中,程式須由
命令列讀入檔名。檔案中最多會有50個文件。每個文件會有兩行資料,第一行是文件的ID,第二行是文
件內容。文件ID會是一個字串,文件內容中的字詞會由一個或多個空白隔開。傑卡德相似係數如果有多
位小數,需要至少精準到小數點後5位。在處理文件時,依照下面規則處理:
- 只考慮純字母組成的詞。
- 如果有重複出現的詞,只計算一次。例如: “a good book is a book” 中, “book”只算出現一次。
在程式執行時, - 主執行緒針對文件數量產生對應的子執行緒。例如有4份文件,就產生4個子執行緒。主執行緒並負
責印出來下列事項,印出內容時,每一行需要印出 “[Main thread]”:
a. 每一個子執行緒的 tid,以及所負責計算的主文件ID。
b. 具有最高平均傑卡德相似係數的文件ID及文件內容。
c. 整個程式會用多少CPU時間 (以ms為單位)。 - 子執行緒則負責計算傑卡德相似係數。執行過程中,要列印出本身的動作,並且每一行都要印出自
己的thread id 。以下是需要印出的項目:
a. 負責計算的主文件ID編號。
b. 子執行緒計算傑卡德相似係數時,要印出是哪兩個文件在計算,以及它們Jaccard similarity。
c. 最後的平均傑卡德相似係數。
d. 子執行緒執行會用多少CPU時間 (以ms為單位)。
以下是一個可能的執行過程:prog2 data.txt
1
2
3
4
5
6
7
8
9
10[Main thread]: create TID:123, DocID:0001
[TID=123] DocID:0001
[TID=123] J(0001,0002)=0.6
[TID=123] J(0001,0003)=0.6
...
[TID=123] AvgJ:0.511
[TID=123] CPU time: 20ms
...
[Main thread] KeyDocID:0003 HighestJ:0.9999
[Main thread] CPU time: 2000ms
二、 作業要點
- 請注意,本作業使用的程式語言是C/C++,測試平台的作業系統: Ubuntu 17.10 LTS 64-bit。使用的
編譯程式為gcc/g++ 編譯器:7.2。其他平台或程式語言不在本次作業考慮範圍之內。如在測試平台上
無法編譯與執行,都不予給分。 - 請注意,本作業一定要用Pthread API來進行。任何不用Pthread API的程式,都不予給分。
- 本作業的評分方式如下:
a. 每一個項目能正確執行時,最多可得的分數如下
i. 從命令列讀入檔名參數,20分。
ii. 能產生 pthread,10分。
iii. 子執行緒可以印出本身的tid,20分。
iv. 傑卡德相似係數計算。不可以使用任何套件或函式庫,需自己完成。20分。
v.
印出執行所用的CPU時間,20分。
vi. 主執行緒找出關鍵文件並印出它的平均傑卡德相似係數,20分。 - 本作業需繳交檔案:
a. 說明報告:檔案為docx或pdf格式。
i. 報告中必須說明程式的設計理念、程式如何編譯,以及如何操作。
ii. 報告中同時必須詳細說明你完成哪些部份。如有用到特殊程式庫,請務必說明。
iii. 請務必讓助教明白如何編譯及測試你的程式。助教如果無法編譯或測試,會寄信(最多兩
次)通知你來說明,但每說明一次,助教會少給你10分。
b. 完整原始程式碼檔案。程式碼檔案必須是可直接編譯的檔案。不可含執行檔。助教會重新編譯你
們的程式。 - 所有相關檔案,例如報告檔、程式檔、參考資料等,請壓縮成一個壓縮檔(不可超過2MB)後上傳
至portal。請注意,不可抄襲。助教不會區分何者為原始版本,被判定抄襲者,一律0分。 - 如果傑卡德相似係數計算有使用網路範例,務必在作業中說明。該部份將不會計分,但不會判定為
抄襲。
三、 繳交方式:
- 最終繳交時間:
a. 電子檔在 2018.05.11 以前,上傳至個人portal。如有多個檔案,將所有檔案壓縮成zip(rar 亦可)格
式,然後上傳。
b. 上傳檔名格式:「學號作業號碼.docx」或「學號作業號碼.rar」。例如:912233_01.doc 或
912233_01.rar。 - 如有違規事項者,依照課程規定處理。
- 如需請假,請上portal請假,並持相關證明文件,在請假結束後的第一次上課時完成請假手續,並在
一週內完成補交。補交作業將以8折計算。 - 老師不接受「門縫」方式繳交,助教也不接受任何作業。
四、 如有未盡事宜,將在學校portal板面公告通知。
五、 If you need any assistance in English, please contact Prof. Yang.
六、 參考資料
- 參考課本圖 4.9。
- PThread: https://computing.llnl.gov/tutorials/pthreads/
- POSIX 線 程 (pthread) 入 門 文 章 分 享 : http://dragonspring.pixnet.net/blog/post/32963482-
posix%E7%B7%9A%E7%A8%8B%28pthread%29%E5%85%A5%E9%96%80%E6%96%87%E7%AB%A
0%E5%88%86%E4%BA%AB - Jaccard index wiki: https://en.wikipedia.org/wiki/Jaccard_index