這個作業做簡單的box filtering in parallel,根據文件中說,box filter 通常很computationally cheap,不直得做parallel processing,不過本作業只是讓學生知道怎麼做一個簡單的parallel processing。
這作業基本上很簡單,只有一個問題就是怎麼debug?
我就把task印個log,並且把thread名稱印出來,這樣就可以知道是不是有寫錯成seqeuntial program,結果發現一開始還真的寫錯了......
主要原因在於,一個task不能 create出來馬上call join on it,因為這樣就把main thread block住了,所以假設有n個tasks要spawn,剩下n-1個task只能等task 1做完後,main thread才能再spawn下一個task,但是又被block住:
WRONG PRACTICE:
for (0 to 10) task { ... }.join()
正確應該要把tasks放到一個collection中,因為create tasks的時候thread就已經啟動了,所以已經是parallel computation,然後才在collection中對每個task呼叫join()。雖然這樣對mainthread來說也是要等第一個task return後才能在呼叫下一個task.join(),但這無所謂,因為main thread本來就要等所有的tasks都結束computation才能exit,用何種順序等tasks結束結果都是一樣的。
沒有留言:
張貼留言