并行N-body模拟
缘由
和专业有关系的第一门有趣的课结束了,觉得有必要记录些什么。这篇文章就用来纪念我觉得最有意义的一次作业。
要求
需要分别编写MPI、Pthreads、OpenMP的并行实作。
层次
我不愿意把代码重复三份,分别为三种并行库编写程式,所以就用 autotools 管理项目,用不同的选项来启用不同的功能。这样做的另一个好处是很容易支持MPI+Pthreads或者MPI+OpenMP甚至是MPI+Pthreads+OpenMP,尽管这样混用不会带来性能上的提升。
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
8门编程语言的设计思考
今天参加了SHLUG的月度技术分享会,见到了三个同学的同学(呃~精确描述的话可能得写成这样:其中一个是同学A的同学,两个是同学B的同学)。
我就不同编程编程语言的设计思考为主题做了一个分享。之前在学校里做过类似的分享,这次把它搬到SHLUG上来了,对之前的幻灯片又修修补补,增添了一些内容(把之前Prolog、OCaml纸上谈兵的部分加了些代码,丰富了内容……当前,也可以把整张幻灯片看作纸上谈兵)。
之前“80分钟8语言”这个标题感觉有些误导人,毕竟读者的第一反应很可能是认为这是在介绍语法,第二反应是80分钟甚至无法把一门语言的语法给讲清楚,如何能把八门语言交代清楚。而且之前在学校分享时和另一位同学肖骐一共讲了两个半小时的样子,远远超出了80分钟。题目的用语想了一会儿,决定改为设计思考(design thinking)。
80分钟8语言
今天要做一个关于不同编程语言的演讲,我介绍了Scheme, Smalltalk, Lua, Perl, Ruby, Prolog, Erlang, OCaml, Haskell,其中Perl是作为反例出现的。这些语言大多是这一年用零碎时间学的,像Lua、Prolog、Erlang、OCaml都只是看完了一两本入门的书,对它们的特点、优点短处、擅长领域有了个比较粗浅的认识;Scheme、Smalltalk则是一本书都没看完,理解就更为肤浅了;Haskell虽然看过两本入门教材,也翻看过不少文章,但它博大精深,广博之处只能窥见一二,精妙之处也无法领会太多,但还是列出了一些我所知道的。
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
的简易实现:
给xbindkeys添加key sequence支持
xbindkeys
不支持emacs
风格的key sequence
,不过由于它可以调用guile
来支持scheme
的配置文件。xbindkeys
的tarball
里有一个配置文件,支持key sequence
的特殊形式:两个键的序列。
最近正好学了些scheme
,就好好折腾了一把,写了一份配置文件,可以支持任意长的key sequence
(当然太长的一般用不到)。
Haskell学习笔记
机缘巧合,写了两个用到Parsec
的Haskell
程序。一个是Untyped
lambda calculus,另一个是 po2db。adam8157
对神器Pandoc
大为赞赏,这也是Parsec
的应用。Parsec
也有不少其他语言的复刻版,不过不少语言都缺乏Haskell
自定义中缀操作符的功能,实现一个parser所写出来的代码可能会冗长很多。