推 james732:推,不過這個討論離C++越來越遠了,板主手下留情啊...XD 01/31 15:07
推 jakevin:XD 蠻有趣的 第一篇只是簡單四五行 就釣出一堆高手! 01/31 16:14
推 Favonia:(至少學術界)有那種完美compiler,只是你要改用其他語言... 01/31 16:37
→ Favonia:可惜的是我覺得學術界自從某年代後對於主流語言就沒有什麼 01/31 16:39
推 tropical72:推推!! 另想請教 F 大,學術界那種完美的compiler是哪種 01/31 16:40
→ Favonia:影響力了 xDDD(我是指研究程式語言理論的部份) 01/31 16:40
→ Favonia:tropical72:之前聽到的 www.cs.cmu.edu/~scandal/nesl.htm 01/31 16:53
→ Favonia:不過我不知道他的實作多有效率... 01/31 16:53
感謝Favonia提供的資訊
我沒有深入去研究NESL的機制
其實的確有很多研究和工具正在進行
像MS的PPL、Intel的TBB感覺也是在做類似的事
差別在於這兩個都算是C++的extension,而NESL是創新的語言
不過我指的Compiler並不是這種
其實這些Parallel Programming的工具和傳統OpenMP、MPI差不多
都是將演算法做在基於某些特定的model上
而非像shemale說的完全「無感」移殖原有程式
一方面不同的Parallelism model差很多(Data-independent、Task-based)
一方面硬體的不同也會造成平行化策略的不同(CUDA、OpenMP、 MPI)
很難用程式去分析一個普通的應用該用什麼方式吧
我也不是這方面的專家,不過大概就是這個感覺XD
推 tropical72:好酷,謝謝 Favonia. 01/31 16:58
※ 編輯: hilorrk 來自: 111.249.152.178 (01/31 20:07)
→ Favonia:(1) 「原有程式」如果用C/C++寫本來就不容易,因為C/C++有 01/31 21:20
→ Favonia:很多地方相當複雜;如果你用學術上稍微乾淨漂亮一點的語言 01/31 21:22
→ Favonia:來寫「原有程式」,就可以接近你希望的「幾乎不用改」。 01/31 21:30
→ Favonia:(我覺得目前比較像是暗示編譯器哪裡平行話比較有效率..) 01/31 21:31
→ Favonia: ^^化 01/31 21:32
→ Favonia:(2) 平行(parallel)指的是邏輯上獨立,並行(concurrent 01/31 21:35
→ shemale:雖然我是用C來舉例,但我覺得數學方面像matlab比較適合 01/31 21:35
→ Favonia:)指的是同時間一起跑,其實有點差別。像 MPI 是並行,但 01/31 21:36
→ shemale:C還是用在比較低階的地方比較好 01/31 21:37
→ Favonia:NESL 是平行。你可以用並行的工具讓平行的程式更快跑完。 01/31 21:38
→ Favonia:(3) 那些比較學術的語言(如 NESL)可以讓程式設計師永遠 01/31 21:39
→ Favonia:寫不出錯誤的平行程式(實際上邏輯不獨立卻被當成獨立), 01/31 21:40
→ Favonia:這是很多主流語言再怎麼加上新函式庫也保證不了的事情... 01/31 21:41
→ Favonia:勘誤:上面「哪裡平行化比較有效率」應為「並行」才對... 01/31 21:43
→ shemale:F大,great!! 01/31 21:43
→ Favonia:(4) 反正目前偏理論的學術對於主流語言沒啥影響力,所以我 01/31 21:45
→ Favonia:這邊講的都是看得到用不了的東西 xD 除非你待在奇怪的公司 01/31 21:46
→ Favonia:堅持用奇怪的語言來寫軟體... 01/31 21:48
感謝Favonia的指教,讓我清楚了許多!
第一點這個我也瞭解
intel的compiler對intel cpu有類似基礎的功能
之前有聽講者說CUDA也有在研究相關的議題
不過關於第三點有些好奇
像NESL也是有自己的parallelism model
而一般的「並行」程式工具也都有自己的parallelism model
演算法需要映至這種model才能達成平行化的目標
在對映的過程中NESL應該也無法避免在原有演算法中
邏輯不獨立卻被當成獨立這種使用者的錯誤吧?
重新設計語言是能使parallelism model和程式核心結合
語意及程式邏輯會比較清楚且更容易除錯
其實我還是不太瞭解您的意思,可否舉個例子?
※ 編輯: hilorrk 來自: 111.249.152.178 (01/31 22:51)
推 Favonia:我不太清楚你的意思@@我自己只有證明過NESL的一小部份只要 01/31 23:00
→ Favonia:順利通過編譯器檢查,執行時不可能出現出現race condition 01/31 23:01
→ Favonia:之類的東西;完整的NESL我相信也有同樣的性質... 01/31 23:02
→ Favonia:簡單來說就是編譯器可以保證程式會安全的執行完。 01/31 23:04
拍謝,是我自己想的太複雜了,連基礎的事都忘記XD
一講到race condition就瞭解你說的沒錯,
這的確需要從語言核心、系統架構和compiler來完成
不過像MapReduce這種Model也能避免同樣的問題
只是限制太大了就是...
※ 編輯: hilorrk 來自: 111.249.152.178 (01/31 23:17)