緣由
和專業有關係的第一門有趣的課結束了,覺得有必要記錄些什麼。這篇文章就用來紀念我覺得最有意義的一次作業。
要求
需要分別編寫MPI、Pthreads、OpenMP的並行實作。
層次
我不願意把代碼重複三份,分別爲三種並行庫編寫程式,所以就用 autotools 管理項目,用不同的選項來啓用不同的功能。這樣做的另一個好處是很容易支持MPI+Pthreads或者MPI+OpenMP甚至是MPI+Pthreads+OpenMP,儘管這樣混用不會帶來性能上的提升。
和專業有關係的第一門有趣的課結束了,覺得有必要記錄些什麼。這篇文章就用來紀念我覺得最有意義的一次作業。
需要分別編寫MPI、Pthreads、OpenMP的並行實作。
我不願意把代碼重複三份,分別爲三種並行庫編寫程式,所以就用 autotools 管理項目,用不同的選項來啓用不同的功能。這樣做的另一個好處是很容易支持MPI+Pthreads或者MPI+OpenMP甚至是MPI+Pthreads+OpenMP,儘管這樣混用不會帶來性能上的提升。
我需要一臺散熱小一點的筆記本,i5 ivy bridge,4G RAM,13.3/14 英寸,madper 推薦了款 HP 的 ultrabook,那東西賣得很暢銷,早已沒了,我就選了這個 SVT13117ECS。回家後第二次用附帶的 Windows,也是最後一次使用,把硬盤驅動等信息截圖用 nc 傳給了我的 Gentoo 臺式機。還是要吐槽一下 OEM Windows 7,500G 的硬盤只設置了三個分區,兩個是還原什麼的作用,隱藏的,留下一個400多GB的C盤。假使我使用 Windows 也免不了要重裝呢。
Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz MemTotal: 3952624 kB
今天參加了SHLUG的月度技術分享會,見到了三個同學的同學(呃~精確描述的話可能得寫成這樣:其中一個是同學A的同學,兩個是同學B的同學)。
我就不同編程編程語言的設計思考爲主題做了一個分享。之前在學校裏做過類似的分享,這次把它搬到SHLUG上來了,對之前的幻燈片又修修補補,增添了一些內容(把之前Prolog、OCaml紙上談兵的部分加了些代碼,豐富了內容……當前,也可以把整張幻燈片看作紙上談兵)。
之前“80分鐘8語言”這個標題感覺有些誤導人,畢竟讀者的第一反應很可能是認爲這是在介紹語法,第二反應是80分鐘甚至無法把一門語言的語法給講清楚,如何能把八門語言交代清楚。而且之前在學校分享時和另一位同學肖騏一共講了兩個半小時的樣子,遠遠超出了80分鐘。題目的用語想了一會兒,決定改爲設計思考(design thinking)。
今天要做一個關於不同編程語言的演講,我介紹了Scheme, Smalltalk, Lua, Perl, Ruby, Prolog, Erlang, OCaml, Haskell,其中Perl是作爲反例出現的。這些語言大多是這一年用零碎時間學的,像Lua、Prolog、Erlang、OCaml都只是看完了一兩本入門的書,對它們的特點、優點短處、擅長領域有了個比較粗淺的認識;Scheme、Smalltalk則是一本書都沒看完,理解就更爲膚淺了;Haskell雖然看過兩本入門教材,也翻看過不少文章,但它博大精深,廣博之處只能窺見一二,精妙之處也無法領會太多,但還是列出了一些我所知道的。
對於sqrt(3);,Visual Studio會報告有歧義的重載函數調用,而gcc卻能把這個解釋爲對sqrt(double)的調用。研究了一下gcc的實現,發現sqrt其實是《C++
Templates: The Complete
Guide》中提到的type function,使用了名爲SFINAE (substitution failure is not an error)的技術。這裏是給出一個使用該技術的sqrt的簡易實現:
xbindkeys不支持emacs風格的key sequence,不過由於它可以調用guile來支持scheme的配置文件。xbindkeys的tarball裏有一個配置文件,支持key sequence的特殊形式:兩個鍵的序列。
最近正好學了些scheme,就好好折騰了一把,寫了一份配置文件,可以支持任意長的key sequence(當然太長的一般用不到)。
機緣巧合,寫了兩個用到Parsec的Haskell程序。一個是Untyped
lambda calculus,另一個是 po2db。adam8157對神器Pandoc大爲讚賞,這也是Parsec的應用。Parsec
也有不少其他語言的復刻版,不過不少語言都缺乏Haskell自定義中綴操作符的功能,實現一個parser所寫出來的代碼可能會冗長很多。