並行N-body模擬

緣由

和專業有關係的第一門有趣的課結束了,覺得有必要記錄些什麼。這篇文章就用來紀念我覺得最有意義的一次作業。

要求

需要分別編寫MPI、Pthreads、OpenMP的並行實作。

層次

我不願意把代碼重複三份,分別爲三種並行庫編寫程式,所以就用 autotools 管理項目,用不同的選項來啓用不同的功能。這樣做的另一個好處是很容易支持MPI+Pthreads或者MPI+OpenMP甚至是MPI+Pthreads+OpenMP,儘管這樣混用不會帶來性能上的提升。

Read More

SVT13117ECS上Gentoo安裝記(含內核配置)

購買

我需要一臺散熱小一點的筆記本,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

Read More

8門編程語言的設計思考

今天參加了SHLUG的月度技術分享會,見到了三個同學的同學(呃~精確描述的話可能得寫成這樣:其中一個是同學A的同學,兩個是同學B的同學)。

我就不同編程編程語言的設計思考爲主題做了一個分享。之前在學校裏做過類似的分享,這次把它搬到SHLUG上來了,對之前的幻燈片又修修補補,增添了一些內容(把之前Prolog、OCaml紙上談兵的部分加了些代碼,豐富了內容……當前,也可以把整張幻燈片看作紙上談兵)。

之前“80分鐘8語言”這個標題感覺有些誤導人,畢竟讀者的第一反應很可能是認爲這是在介紹語法,第二反應是80分鐘甚至無法把一門語言的語法給講清楚,如何能把八門語言交代清楚。而且之前在學校分享時和另一位同學肖騏一共講了兩個半小時的樣子,遠遠超出了80分鐘。題目的用語想了一會兒,決定改爲設計思考(design thinking)。

Read More

80分鐘8語言

今天要做一個關於不同編程語言的演講,我介紹了Scheme, Smalltalk, Lua, Perl, Ruby, Prolog, Erlang, OCaml, Haskell,其中Perl是作爲反例出現的。這些語言大多是這一年用零碎時間學的,像Lua、Prolog、Erlang、OCaml都只是看完了一兩本入門的書,對它們的特點、優點短處、擅長領域有了個比較粗淺的認識;Scheme、Smalltalk則是一本書都沒看完,理解就更爲膚淺了;Haskell雖然看過兩本入門教材,也翻看過不少文章,但它博大精深,廣博之處只能窺見一二,精妙之處也無法領會太多,但還是列出了一些我所知道的。

Read More

Evil--在Emacs中模擬Vim

这篇文章过时了,參見皈依Emacs,现在我對操作方式有較大調整。

Vim模擬

平心而論,Vim的modal editing確實比Emacs強,而Emacs默認的按鍵綁定設計不好,不適合使用,要讓它適合做工作環境往往要改大量按鍵。“一千個讀者心中有一千個哈姆雷特”,Emacs的配置也確實大相徑庭。

Read More

gcc中sqrt實現

對於sqrt(3);Visual Studio會報告有歧義的重載函數調用,而gcc卻能把這個解釋爲對sqrt(double)的調用。研究了一下gcc的實現,發現sqrt其實是《C++ Templates: The Complete Guide》中提到的type function,使用了名爲SFINAE (substitution failure is not an error)的技術。這裏是給出一個使用該技術的sqrt的簡易實現:

Read More

給xbindkeys添加key sequence支持

xbindkeys不支持emacs風格的key sequence,不過由於它可以調用guile來支持scheme的配置文件。xbindkeystarball裏有一個配置文件,支持key sequence的特殊形式:兩個鍵的序列。

最近正好學了些scheme,就好好折騰了一把,寫了一份配置文件,可以支持任意長的key sequence(當然太長的一般用不到)。

Read More