當前位置:編程學習大全網 - 編程語言 - Julia語言如何編寫用戶界面?

Julia語言如何編寫用戶界面?

Julia是壹個剛剛走入大眾視野的科學計算利器!

妳可能會說了,科學計算?不是有matlab了嗎?而且如果做統計,還有R、Python、Stata之類的可以使用,為什麽要用Julia呢?

很簡單,方便+快!

首先,Julia的語法基本上就是Matlab+Python+R的混合,像Matlab壹樣簡單,像Python壹樣嚴謹,像R...算了,還是不要像R了。

此外,作為「腳本語言」以及「科學計算語言」,Julia有個變態的特征:不怕循環!熟悉Matlab、R的人都知道,寫這些程序的時候,通常會被建議「少寫循環」。而實際上,如果妳沒有遵從這些規則,妳會發現寫出來的程序奇慢無比!當然,Matlab中也有壹些設計企圖規避循環,比如bsxfun等函數,但是很多情況下,循環在所難免。

那麽Julia如何做到「不怕循環」這壹點呢?Julia做了這麽壹些工作。首先,在Julia裏面,是有「類型」的,比如學過C的都知道計算機中數字分為整型(int)、浮點型(float)、雙精度(double)等類型,而Julia也對類型做了嚴格區分。不過不要怕,其實沒什麽大不了的,不會比Matlab復雜多少。而有了類型的區分,Julia使用LLVM這個工具引入了JIT,也就是在程序(比如循環體、函數)第壹遍被執行的時候,這個循環體、函數就已經被編譯好了。當這個循環體、函數再次被執行的時候,就不需要重新解釋代碼,只需要執行編譯好的程序就好了。

有了這個黑科技,Julia的執行速度理論上是可以接近C的(理論上能達到的最快速度)。實際上我的工作過程中就有大量的程序因為嫌慢使用C寫,速度的確比Matlab不知道要快到哪裏去(這裏提壹下,根據我的經驗,不可盲目崇拜C,沒有經驗的人寫出的程序,或者沒有復雜到壹定程度的程序,速度可能比Matlab還慢)。

關於Julia的速度與其他語言的比較,可以參考Julia的網站:TheJuliaLanguage,其中有各編程語言的對比。不過這裏要提壹下,裏面的參數不能完全相信,比如Matlab等語言的寫法不是最有效的寫法,所以在裏面Matlab可能比Julia慢很多。而實際上,對於最簡單的程序,Julia的速度比不過Matlab的。至於原因嗎,我想有這麽兩點:首先Matlab不用編譯;其次,Matlab使用了Intel的MKL庫,而MKL庫是經過匯編級別的優化的。當然,Julia也可以使用MKL,下面我會介紹。

所以總體說來,當涉及到大量的循環的時候,C(Fortran)和Julia是非常不錯的選擇,而出於寫程序的方便程度和學習曲線的考慮,Julia顯然優於C(Fortran)。

奧,Julia還有個優點沒有說,這個可以秒殺Matlab,那就是:開源,免費!

此外,Julia還有壹個更大的優點:非常方便的調用C、Python等寫成的程序。Python本來就被成為「膠水語言」,可以調用幾乎所有其他語言,而Julia可以調用Python,這就變相給了Julia這個能力。此外,Julia還可以直接調用C寫成的程序。所以平時工作的時候,非常常用的壹些模塊我都已經寫成C放在壹個庫裏面,這樣就可以用Python調用C,Julia調用C,R調用C,Matlab調用C...順便提壹下,Matlab也可以調用C,但是調用方式別提多蛋疼。

好,下面回到我們學校的問題上來。之前的壹個項目我使用Julia+C壹起寫的,但是前段時間我們學校的超算中心非得給我們換個賬號,這下好了,之前已經有的Julia突然沒了。前面也說了,我是沒有管理員權限的,所以使用yum的方式安裝就走不通了。還好Julia是開源的,意味著我可以拿到Julia的源碼,自己編譯壹個。

可是,真的問題出來了!Redhat出於對「穩定」的變態追求,裏面的程序不會用最新的版本。比如,最坑爹的,gcc(壹個c的編譯器)的版本停留在『RedHat4.4.7-3』這個版本上。而開源社區日新月異,這個版本太老了,以至於不能編譯Julia了!從此,我開始了漫漫的安裝之旅。

在介紹我在沒有管理員權限+沒有新版本gcc的情況下如何安裝Julia之前,可以先介紹壹下普通青年安裝Julia的正確姿勢。

windows用戶,去JuliaDownloads上直接下載安裝。建議安裝Julia+Juno的套裝,後者是壹個Julia的IDE,如果不裝Juno,Julia的界面會非常不友好!

Mac用戶,同樣去JuliaDownloads上直接下載安裝,安裝方法與Mac軟件的壹般安裝方法壹樣,安裝好之後在Applications裏。或者可以參考下面Linux用戶使用源碼安裝,但其實沒這個必要。

Linux用戶,就有多種選擇了。或者選擇源碼安裝,我下面會詳細介紹。或者可以安裝已經編譯好的版本。不過更建議使用apt-get(Debian/Ubuntu)、yum(Fedora/Redhat/Cent)安裝。

安裝好之後,在命令行輸入julia,應該能看到如下界面(win用戶可能需要設置環境變量):

嗯,下面我就要開始介紹作死的源碼安裝方式了!

上面提到了,之所以選擇源碼安裝,最大的原因是我沒有管理員權限。其次,源碼安裝還有個好處就是,可以將Intel的MKL和Julia結合起來,強上加強,至強!

總的來說,我手動安裝Julia的過程是:

gmp/mpc/mpfr=>gcc

Git

cmake

Python2=>LLVM

Julia

是的,妳沒看錯,為了安裝Julia,我安裝了這麽多東西!!!截圖給妳們看:

安裝gcc的原因不用說了,因為編譯Julia需要高版本的gcc,所以必須自己裝壹個gcc。為了安裝gcc。在安裝的過程中,提示我缺少gmp/mpc/mpfr這三個包,這個問題不大,按照提示,去相應的網站,找到這幾個包的最新版本,wget壹下,安裝就好了。至於怎麽安裝,壹般來說安裝的順序是:

./configure--prefix=/home/aragorn/softs/其中--prefix可以理解為安裝路徑

make

makeinstall

經過這三個命令,壹般就可以安裝好。gmp/mpc/mpfr這三個包都是按照這個順序,wget下載,tar-xvf***.xz解壓縮,進去,然後按照上面三個步驟安裝。

至於gcc,可以去InstallingGCC-GNUProject上看看,上面有安裝gcc的詳細步驟。註意如果需要安裝gmp/mpc/mpfr這三個包,在configure的時候,後面需要加『--with-gmp=/home/aragorn/softs』,也就是制定者三個包的安裝位置。

經過大概幾個小時的等待,gcc裝好了。總以為可以編譯Julia了,可是又出錯了!仔細壹看,居然是gitcheckout出錯了!查了壹下,臥槽,git命令也是老掉牙啊!沒辦法,去git官網,找git的源碼下載,gitclonegit/git·GitHub下載下來,安裝!安裝過程可以參考文件夾下面的INSTALL文件,有詳細描述。

後來又提示我cmake沒有。同樣,按照上述過程,安裝cmake。

中間我也不記得是哪壹步了,提示LLVM必須安裝。裝!可是安裝LLVM的時候,又提示我Python的版本太低!Redhat的Python版本居然是2.6的!!!怎麽能忍,裝!去Python官網,幹脆把Python2and3的源碼都下載了下來,裝裝裝!!!

這裏需要註意的是,由於安裝的這些程序都是安裝在自己的目錄下面的,所以需要修改環境變量。修改方法如下:

cd~

vim.bashrc

找到exportPATH=(如果沒有則新建),把安裝的程序的bin目錄添加上去,比如我安裝的gcc的目錄是/home/aragorn/bin/gcc/,那麽就要寫成『exportPATH=\"/home/aragorn/bin/gcc/bin:$PATH\"』,建議每裝壹個程序,都把bin目錄添加進來

同樣,找到exportLD_LIBRARY_PATH=(如果沒有則新建),把安裝的程序的lib/lib64目錄添加上去,比如我的寫成『exportPATH=\"/home/aragorn/bin/gcc/lib64:$LD_LIBRARY_PATH\"』,建議每裝壹個程序,都把lib目錄添加進來

:wq

如此設置,系統找程序或者庫就按照上面的順序開始找。比如雖然系統自帶的gcc版本比較老,但是由於我設置了PATH,所以會先從/home/aragorn/bin/gcc/bin這個目錄找gcc這個命令。修改結束之後,使用source.bashrc使得以上更改生效。

此外,我在瀏覽系統目錄的時候,驚喜的發現原來這臺電腦裏自帶了MKL庫。開心死了。要知道這個庫是付費的,當然對科研工作者是免費的。既然有了,就避免麻煩了,用!怎麽用呢?在編譯Julia之前,要做這麽幾個工作:

source/opt/intel/bin/compilervars.shintel64

source/opt/intel/mkl/bin/mklvars.shintel64ilp64

exportMKL_INTERFACE_LAYER=ILP64

至於這幾步究竟在幹什麽,我也不知道,也懶得去搞清楚,大體是在設置MKL庫的環境變量。

好了,萬事具備,終於可以編譯julia了!分這麽幾步:

gitclonegit:///JuliaLang/julia.git復制源碼到本地

cdjulia

gitcheckoutrelease-0.4這壹步請參考Julia的github主頁,0.4為目前最新的版本號。這壹步壹定要做,否則自動編譯的是正在開發的版本。

vimMake.inc這壹步要做很多修改。首先,在開始加入壹樣『prefix=/home/aragorn/bin/julia』後面是妳要安裝julia的路徑。其次,由於上面已經安裝了最新的LLVM,可以使用最新的LLVM,設置『USE_SYSTEM_LLVM=1』。最後,由於要使用MKL,將『USE_INTEL_MKL?=0』『USE_INTEL_MKL_FFT?=0』『USE_INTEL_LIBM?=0』都改為1。github的網頁上同時建議將『USEICC?=0』『USEIFC?=0』也設為1,但是根據我的經驗,intel的icc編譯器並沒有gcc好用,所以建議仍然保留為0,使用gcc。

make等待壹大段時間

makeinstall

好啦,現在設置好環境變量,就可以優雅的開始使用帶MKL的Julia啦!

最後,我只想吐槽壹句,如果搞科學計算,普通青年用Ubuntu/Debian,文藝青年用Gentoo,二逼青年才他媽的用Redhat!!!

  • 上一篇:李磊編程書籍
  • 下一篇:java面向對象編程問題
  • copyright 2024編程學習大全網