什麼系統更適合數值計算?
系統現裝有Windows和Ubuntu,用Mathematica做數值計算。有時候ubuntu表現比較好,有時是Windows。不知道是否有更適合做數值計算的操作系統?Fedora是否更好一些?
- Mathematica的殺手鐧是符號計算,數值計算不是它的強項;
- Ubuntu、Fedora都是Linux,差不多的,主要看使用習慣。當然,不同的Linux發行版,效率是有些差別,比如編譯選項不同。個人感覺Arch Linux的效率比較出眾,但不知道題主能不能適應;
- 我的建議是:你用哪個順手就用哪個,差不多的,沒有必要糾結(PS:我自己用的是Ubuntu)。
我自己是這樣做的:
- matlab寫演算法,因為好寫好調試;
- 自己寫了個矩陣類,用來實現matlab中矩陣基本功能:創造,訪問,修改,排序。效率不錯的;
- matlab演算法無縫移植到C++,別問為什麼不是C,我不想累死;
這些都在Linux下完成,原因很簡單:
- VS現在還不完全支持C++11,而gcc支持了我需要的特性;
- 運行時間大概是這樣:
- Win7 x64 mingw -O3 -g0 1分鐘
- Linux matlab x64 4分半
- fedora x64 gcc -O3 -g0 14秒
- Samsung N7000 ndk -O3 -g0 1分鐘
順便說一句,fortran沒過時,有人用,Intel還為他開發了演算法庫,如果有錢買那個,運行效率會有顯著提升。
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
某人覺得我用mingw測Win7是故意造假,剛好VS2013 Update3基本支持C++11,去掉了變長數組後和noexpect後可以用了。在Thinkpad X240s i7 4500U下:
- Ubuntu x64 gcc 4.8.2 -O3 -g0 7秒
- Win7 x64 VS2013 Update3 Release 20秒
@Zephyr風暴之錘 How about this?
數值計算的根基是矩陣運算,而矩陣運算的最快方法是blas程序包。blas最早是由fortran語言編寫的(沒聽說過fortran?看看20世紀十大演算法就知道了嘿嘿);無奈是的fortran已經沒人用了。目前主流是調用libfortran.a(windows下叫f2c.lib)庫文件將blas和lapack(頂級數值計算包,也是fortran語言編寫)將fortran轉化成c/c++或者matlab、R等等。
有兩點是值得注意的:
1.fortran最早出現在IBM的Unix上,現在的*nix下的gcc具有編譯fortran的功能。雖然windows也有「標準Fortran編譯器」,但諷刺的是微軟開發的XXfortran編譯器在2k年以前就轉讓給別人了。
2.gcc的libgfortran.a庫文件和vc的f2c.lib庫文件在效率上差不多,但是如果你用的是mingw(windows下的gcc),呵呵,不好意思,差距不是一星半點。
PS:Mathematica善於符號計算,數值計算用matlab比較多,如果是商業開發而老闆又不給用matlab,那就只好用c/c++了;效率上c/c++完爆matlab。
PSS:matlab也可以符號計算,it++則賦予c/c++符號計算功能。
因此,我的建議是:
1.珍愛生命,原理windows;操統ubuntu用的人比較多,debian也不錯,freeBSD也十分推薦(據說各種不兼容)。
2.強烈BSmatlab,能用c++就盡量用c++吧。
課題組都用Linux(目前集群上都是Redhat)+fortran(或其他開源程序用的C++)+mpi(openmpi或mvapich),行業內也基本全是這樣,計算規模也很大(單case上百-千核)
其實在pc上沒多大差別…如果有心裡潔癖或許可以試試gentoo,最佳優化的情況下會快那麼一絲,能不能察覺到就看你問題的數量級和你的敏銳度了
不上集群伺服器的話其實差別沒多大……linux在可以把更多資源用在運算上
我本人的經驗,同樣的源代碼在不同的操作系統上用同樣的編譯器(gcc,gfortran)編譯,並且計算同樣的任務,如果計算時間是幾個小時以上,計算速度從大到小分別是linux &> windows &> OS X,當然,差別並不顯著。
我只測試過兩個計算程序,所以樣本不夠多,結論不一定有普遍性。但是,為何這兩個計算程序在不同操作系統下計算速度不同,我猜測可能的原因有:
1)不同的進程管理策略(是這個詞不)
2)不同文件系統和操作系統造成硬碟I/O速度不同(我的程序吞吐大量數據)
3)雖然都是用gcc+gfortran編譯,但是gnu編譯器在不同操作系統下的表現仍有差異
據我自己的經驗,不同的編譯選項和數值計算庫對計算速度影響更為明顯,最佳選擇是使用intel編譯器和MKL庫。在linux上可以安裝non-commercial版的icc,ifort和MKL,而在windows上安裝intel編譯器要複雜得多。
另外,反對 @佟浩功同學說的強烈BSmatlab,能用c++就盡量用c++吧
你自己寫程序,最好先用matlab/mathematica/numpy,如果計算時間在幾十個小時以上並且要反覆使用,那麼再用C++/fortran95重寫,否則你會發現你自己花在寫程序和調試上的時間遠大於用C++/fortran語言節省的計算時間,人生苦短啊
我之前是在求解一個規模很大的優化問題, 目標函數可能有幾百行吧。 比較結果還是Mathematica要強於Matlab。 其他方面兩者比較就不知道了。
再者是在Windows下和Ubuntu下速度也是差不多。
推薦閱讀:
※編寫 Windows 操作系統的工作量有多大?
※VirtualBox 與 VMware 應如何選擇?
※vMotion的實現原理是怎樣的?
※OS X Yosemite 正式版目前有哪些問題(bug)?
※為什麼不同系統不能兼容同一個已編譯的可執行二進位文件?