作者WPC001 (好悶, 迷惘~~)
看板C_and_CPP
標題Re: [問題] 物理的數值模擬適合用C++嗎?
時間Sat Apr 21 00:57:51 2012
※ 引述《famayo (砝碼)》之銘言:
: 因為最近開始想學程式語言
: 但是苦不知該從哪種語言開始下手
: 於是就想到了最耳熟能想的C++
: 但是又聽到有些人說C++ 是比較舊的語言
: (我也不知有什麼是新的= =)
: 因此我想問問 C++能做的事情應該很多吧?
: 譬如說現在有哪些系統是用C++開發的呢
: 臉書 無名小站是嗎?
: 還有就是 假設我要做物理的數值模擬
: 用C++適當嗎? 因為覺得它應該比fortran matlab來得多用途
: 如果C++不是各位最推薦的語言
: 那麼哪總才最推薦呢 (數值模擬為主 搞不好還有其他需求)
: 感謝各位解惑
單純討論到"快"這件事情
1. 最快仍然是核心部分直接寫組合語言 (或是inline asm)
2. C/C++有機會寫出類似組合語言的效能,
但在一般情況下, 其實C/C++有很多效能上的陷阱
為了轉換物理或是數學上的式子, 菜鳥寫出來的程式碼, 通常效能很糟糕
編譯器難以最佳化 (應該說, 要寫的"快", 就不能照翻數學式, 這需要經驗)
而且C++老手有時太過於使用OO後, C++語言的特性反而會導致效能不佳
3. Fortran語言本身非常高階, 且適合將物理/數學式,
很直覺得就用fortran的語言表達出來, 再加上本身語法上直接支援向量運算
編譯器發展了非常久, 基本上如果是物理/數學式照翻, 就算是菜鳥寫的程式碼
經過編譯器最佳化後, 效率可能非常非常的高
如果是新手~ 用fortran寫可能是又快又方便
但如果是為了求快速開發... 或許matlab更是取得一個更佳的平衡點
(有太多函數可以直接呼叫, 呼叫後極有可能是直接對應到效率很高的程式庫
整體的執行效率也可以很高, 開發又輕鬆, 個人非常推薦使用matlab)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.108.22
→ diabloevagto:用matlab就要用矩陣運算,盡量不要用for,效能差很多 04/21 01:00
→ kdjf:現在不是有JIT compiller了? loop也會被最佳化吧 04/21 01:58
推 yayarice:matlab旳for loop是致命傷… 04/21 03:15
推 famayo:感謝 ! 04/21 07:42
推 azureblaze:可是自己寫ASM不見得寫得贏compiler XD 04/21 10:42
→ MOONRAKER:FORTRAN也不是真的「非常」高階啦,不過他的陣列可以 04/21 11:06
→ MOONRAKER:割一條或一塊來計算,威力是很強沒錯。 04/21 11:06
→ MOONRAKER:我很欣賞他在語言階段直接支援**和複數,但是就技術而言 04/21 11:08
→ MOONRAKER:如今這好像也沒啥,很方便是真的。 04/21 11:08
推 tsaith:可以考慮 python+numpy(數學套件)+matplotlib(繪圖套件) 04/21 18:17
→ tsaith:若有必要,底層可用c/c++加速計算 04/21 18:18
→ tsaith:要是計算量真的太大,c/c++的部份可以再進一步平行處理. 04/21 18:20
→ WPC001:matlab請直接用矩陣或向量運算... 不要自己跑for loop 04/22 00:22