No comment yet
July 3rd, 2014

来耶路撒冷之前,大家都告诉我,这是一个多么特别的地方。总归是半信半疑。来了也就打算去Old City照照破石头,特游客地发发Facebook。谁想到雇了一个这么Hippie的导游,见面就拉着我聊,来来来,我们从Ottoman Empire时候的Zionism谈起!喂!见面就聊这么沉重的话题,我们还能不能好好拍照看石头了!

还能不能拍照看石头了!

穿过巴勒斯坦区,路过以色列的旗帜和梵蒂冈的旗帜,被边警拦着非穆斯林勿入。只能远远地望着Haram al-Sharif,竟然没有缘分见到这么一块石头。

周四,在Western Wall边,一群十三岁少年的Synagogues。小摊小贩叫卖的画里,Dome of the Rock被幻想中的the Third Temple给取代了。这时候,望着墙后面的穹顶再拍照是多么的不合适啊!一个巴勒斯坦的老头走过来,向我们诉说自己被关押了两年半的遭遇。

在加州的时候,耶路撒冷印象中拜Yotam Ottolenghi所赐,就是好吃和各种风情的地方。我哪有准备着来理解为什么亚当出生地的那块石头又凑巧是穆罕默德升天的地方。而这条窄窄的巷子里,为什么耶稣又背着十字架走过,牺牲,死去和重生呢。这么多的故事,都发生在不足一平方公里大的地方。

去特拉维夫的火车上,遇到了一个从挪威到海法朝圣的老人。老人做了一辈子的金匠,却告诉我说现代人的脑子越来越大,心越来越小。

他们说,这都不是宗教的问题,这都是政治。可是那些人,是真的想在死去之前,修好the Third Temple吧。他们靠着墙许愿,明明是那么的认真。

No comment yet
May 16th, 2014

看舌尖才觉得,回家的时候,火锅完全没吃到饱啊。不止是火锅,连早餐的红烧牛肉面都没吃到!有的,是妈妈存的甜柚,冬天风干的香肠和桦树木熏的腊肉。所以就算再节制,不跑步不锻炼的呆一周半,也狠长了几磅的。

十几年前第一次离开故乡的时候,还是十四五岁的小孩,有着青春期的叛逆和心比天高。当时也不会想到,十几年后自己也没什么进步,还在挣扎和学着走路说话。即使自己没进展,也有着奇怪的断层。当朋友们都天各一方,也会有时候分不清家乡的方向。陌生地陪着父母散步几个小时,模糊地记得这里,又不记得那里。找个餐馆都要打开手机地图。

即使这样,当能听着淅淅沥沥的雨声睡觉的时候,故乡始终是心中一块柔软的地方。有小雨,有霜雪,有阴天,也有晴天才是真正的人间啊。在加州的小孩哪能看云识天气知冷暖!但是就算再骄傲,这些儿时习得的小技巧总归长大了都派不上用场,比如泡盒装方便面的时候用里面的叉子把口子给插上,扔纸飞机前先哈口气才飞得远,用注射器吹最大的肥皂泡泡,还有往喜欢的姑娘课桌里使劲地塞苹果。

讽刺的是,对于有些人来说,只有离开故乡,才能找到自己的故乡。

No comment yet
March 31st, 2014

莫名烦躁,书也读不进去的时候,干脆就坐在一旁自己发呆。又到了人生的十字路口,就想起了大学的时候。

大学的时候十分拮据,有时候一天只能吃一个Burrito,看着好的硬件只能眼馋发呆,房租常常上个月接不上下个月。没钱订杂志,也没钱买GPU。

但是大学的时候又很自由,可以自己写自己爱写的东西,成天也没有更多的人生追求。看到一段不为人知的故事,听到一个聪明的解法,就能高兴半天。周四早上买杯咖啡吃个Donut也可以在草坪上坐着看半天书。就连上课也都是好玩的东西。听教授讲各种故事,和大家聊天讨论。无趣的课全都逃掉,把集群上分配的时间全都用光光,还被教授笑眯眯地教训。

自己现在会的三脚猫功夫,动不动就提的two-phase commit,Byzantine failure,全都是那时候试出来的学会的。现在掌握的那些iOS的小技巧,哪有这些名字听起来酷,还有Paxos!

或许清醒的时候我都想不明白自己是有多想回学校整天读书,和土著人一起画画,没事用OpenCL写个比ffmpeg快20倍的Encoder啊。

No comment yet
February 19th, 2014

I was not a fan of low-level parallelism exploitation. The level of parallelism that OpenMP tries is too easy to get wrong. On the other hand, I'd prefer dispatch_apply in any cases for the precise reason to disfavor OpenMP: it is restrictive enough to be only useful for embarrassing parallel problems.

The belief I subscribed to as stated above comes from Amdahl's law; and in my simplified world, the more points you have dispatch / join, the more sequential execution portion you will end up with. Therefore, further limits what you can gain from parallel executions. In the same spirit, I'd prefer long-running processes with limited message-passing at any given time.

It's not just talking points. In past versions of ccv, I never exploited thread-level parallelism to speed up ccv's core functions (SIMD is not in the discussion, it is total awesomeness.) for the simple belief that as long as a given function can finish under a reasonable time, thread-level parallelism should be left for the upper layer of your application stack. When you are running ccv on iOS or Android, even though there are multiple cores, you probably don't want ccv_icf_detect_objects to occupy all of them while executing. On the other hand, if you deploy ccv to a server environment, you probably want to pin process per core, and don't have ccv to over-reaching other cores for parallelism (as hopping could be expensive).

At least that was what I believed until very recently.

Now looking back, the idea of that there exists a right level of parallelism is probably wrong. Until past three or four years, we have a very coarse parallelism levels (I am discounting SIMD again as it is for me a processor hack). We have processes, which can live in remote or local, but any communication between them are done explicitly via messaging. We have threads, which lives locally (or for most of threads), and probably no formal messaging channel; the communications are done implicitly via shared memory and synchronization. Most of the time, register, L1/L2 cache, and memory access latencies are the separated concerns and left for specific optimization. In that pretty coarse world, communications done with shared memory access, which assumes uniform latency, or with messaging, which holds to be expensive (high latency, and the cost of memory copy). The de-facto way to do parallelism in that world, as I previously said, is to go with embarrassing parallelism (avoid communication at all cost, and prefer high throughput / high latency alternatives over low throughput / low latency alternatives) and see how far you can get away with it.

But during the past few years, we have had a much finer-grain parallelism model, which specifies access latency with regards to different parallelism options. Even discounting the rising tide of GPGPU programming, we have much more CPU cores on a single machine (thread + shared memory) and the performance penalty of not aware of the non-uniform memory access pattern will be unforgivable.

I don't have a good plan in mind about how to adapt to this as reality is still very messy. However, there are some interesting observations: 1). in heterogeneous computing environment, we are still playing the old game of balancing out communication cost with computation cost, but in very different ways for different platforms; 2). thus, it is unlikely one well-crafted kernel will perform universally well; include a set of tunable kernels, as the case in libatlas or fftw3 should be the common practice when delivering performance centric software; 3). because it is impossible to have the right level of parallelism, exploit parallelism structure at every level, and let tuners / schedulers to figure out how to adapt to a specific computing environment is the better bet.

It would be quite some fun to experiment how to exploit parallelism at thread-level for functions like ccv_icf_detect_objects / ccv_dpm_detect_objects without exhaust CPU resources on mobile devices with ccv in the future.

No comment yet
December 23rd, 2013

年底的时候,也想找个有高山悬崖大海的地方坐着边喝茶边写年终总结啊。所以坐在这里,其他人都在边喝酒边聊天,只有我打开笔记本开始劈劈啪啪敲起来。

有高山悬崖大海的地方!

年初心里打的小算盘,只有自己知道。但是还好完成了不多一些,要不望着这样的景色,就该羞愧地跳下去了。去年十二月底的时候,突然觉得如果只做重要的事情,而自己活得一塌糊涂总有些不对,才想起来,从二十一岁到现在,我是什么成色一点都没变。那个胖胖的自负的不知检点的毫无自制力的放纵的小男孩从来没死去过,他在这具基因不良的肉体里面活得可欢实了。

就算从来没想过长大,但是没有自制力也挺糟糕的,就跟那些从我的餐篮里偷薯条的小喜鹊似的,早早地肝硬化是说定的事。

那么,今年最大的进步,或许就是用这具基因不良的肉体和仅仅比平常人好一点的智力管住了他。

所以,其他的也就顺理成章了。

11700,是今年跑的英里数。

去了CVPR,和好多人整夜整夜的聊天。

发布了ccv的0.5。

还有Facebook的1234567。

终于能把每个月订的杂志和Email给看完了。

读完了7、8本书。

第一次跑完了马拉松,然后是50K。

管住了冬天的季节性抑郁。

把烤Fred's练到了炉火纯青。

重新拾起了GPGPU Programming。

认识了一些好有趣的新朋友和导师。

三年前的时候,我最喜欢的一个教授跟我说,你或许现在觉得大学里要做的事情千头百绪,以为等到工作就好了;可是到工作之后,才发现每天要完成的事情更多,只能安慰自己说等到公司被收购了就好了;可是到公司被收购了之后,又会有更多的事情等着你去完成。从现在开始,需要你去完成的事只会越来越多,不过幸好你也会发现,原来再多的事情,都能处理得过来。

想到这些话和Grimshaw,突然觉得惭愧了起来,原来我也并没有做太多的事,瓶子里的那个小人,他没有多努力啊。就在这样的遗憾中,开始期待明年。

When I told Paul that I was way over-paid, I meant it. No matter how genetically-defected my physical is, or mere above average intelligence I have, everything I possessed is derived from public common. I need to do whatever I can to contribute back, and anything I got as extra, are the display of how serendipitous I am. There is no God in my world, but I am thankful before every meal.

No comment yet
December 4th, 2013

总说要抽时间写身边的人,但是时间总在作对。或是太懒,或是写到一半就分了神,结果到现在,一篇也没有交出来。

今早父亲发邮件说舅公去世了,反而觉得意外,以至于再发邮件去确认的确是舅公。知道之后一整天都是恍恍惚惚的。

从小其实是挺闹腾不听话,所以也没少挨过打。92年姥爷去世是第一次见到死人,僵僵地就在那不动了。伸手过去抓,下午还握着暖暖的大手,变得冰凉。那时候极度恐慌,不是对死亡害怕,而是对未知恐惧。后来也见多了断胳膊断腿的事故和血,但是那双冷冰冰的手一直在记忆中,让人心慌。

可是舅公不一样,他是那种一直让我安心觉得不会死去的静止坐标。小时候父母嫌我太吵闹,就扔到舅公家学写字。舅公写得一手漂亮的柳体,我们都不临字帖,而是临舅公写的字。开始临三字经,后来又临增广、千字文。现在看来都是些无甚营养的糟粕,当时却临得、背得、崇拜得很起劲。而舅公那秀气的字体,也跟着印在了脑海里。一横一竖,一撇一捺,仍然能记得个四五八七六。

和他的字相比,舅公实在是长得太不相称了。又高又壮,一副大嗓门,说话直接了当。七八十岁了夏天还光着个膀子坐在院子里乘凉,露出一身的壮膘。别看我是一干这干那不安分的胖子,站在舅公身边,就是一弱不禁风的文弱书生。但是就是这么一个高壮的汉子,在舅婆生病起不来之后,细致地照顾了她五六年直到去世。或许两个人一起生活太久了,什么也都不算什么了,总之对于一直都一个人生活的我来说,复杂得难以想象。

父亲最后告诉我,舅公去世得很安然,因为肺癌来得很快,有症状已经是晚期,没受什么痛苦。可是我想,舅公也应该是安然地面对死亡的,因为七十年前,当他弟弟在战乱中无意义地被打死之后,是十几岁的他兀自找了一块地挖坑把弟弟的尸体埋上,然后继续上路的。

从92年到现在,二十一年了,原来我还是没办法面对死亡。

No comment yet
November 12nd, 2013

一开头就是竖Flag的节奏啊!虽然没人分享,不过生活真的很好!

能够读书,能够吃好吃的,能够周末去跑跑步,安定得难以形容。也只有这样才会能静下心来做些有意义的事情吧。

昨天早上突然开始在想Charles S. Peirce,想到他晚年的穷困潦倒。晚上睡觉的时候突然喘不过气,很担心自己心一紧,就这么无聊地死去。

美好的时光总有结束的时候吧,所以才觉得最近真需要抓紧时间做有意义的事,年底也不想回家了。

No comment yet
October 23rd, 2013

过了焦躁不安的春天和夏天之后,秋天来得格外安静和准时。我也变得特别安静和不想说话。本来在10月初的时候还准备写篇鸿文,结果拖来拖去换来了又一篇流水帐。大概因为调了三周CIFAR-10的参数,没调通之前都懒得和朋友们聊天和吃饭。还好每周末的跑步成了唯一自己和自己身体沟通的方式,还好还有唯一坚持的习惯。

很习惯这样呢。周中白天努力地工作,晚上调参。周末花大把的时间跑步和吃东西,还有调参。买许多的书不停地看,让自己思维没时间到处乱飞乱撞。就算尽量买Kindle版的,也积攒了不少的纸质书呢。我的「Think Higher, Feel Deeper」的书签却不知道扔哪找不到了!

十年前的那个秋天,我刚刚从家到上海,未来就像一张白纸从面前展开。

被偷拍到了!

最近还在知乎上胡侃,大家一起来写吧!http://zhuanlan.zhihu.com/ultrarunning

No comment yet
September 12nd, 2013

上周六跑了二十英里之后被晒到差点昏死在Shoreline Park,结果今晚打球的时候已经凉到接二连三打喷嚏了。太阳公公啊,身材练好了之后还没时间去海边就到了九月,是不是辜负了整个夏天!

夏天过得这么快,就让人感叹人生。前两天和一哥们聊起人生迷惘,虽然说常拿此开玩笑,姑娘什么的都是再小不过的小事。脑子里整天想的,不过是为什么ICF训练要这么久怎么对齐convnet和调试CUDA为什么mosh不支持X11 Forward第二季度的经济复苏什么叫失业Fed的主席以及伊朗的核弹头和原来企业家都是有信仰这件事是真的为什么ultrarunner能够每周都有30多个小时的时间去跑步不能原谅。

现在才知道,Sigona's的最后一批樱桃卖光的时候,夏天就已经结束了。爸爸生日快乐,再过四年,就一个甲子啦。

「喂,冲浪的时候,就是要把小腹的线条露出来给大家看的啊!」

No comment yet
July 28th, 2013

最近疯狂地迷上了跑步。

刚开始是4英里,6英里,8英里。跑完Tough Mudder之后就想跑更多。跑完half marathon之后又想跑更远。于是10英里,14英里,20英里,24英里,中间又去跑了一个30k。虽然明明知道跑多远都没有意义,也知道Scott Jurek说的素食菜谱不符合营养学,可是大脑控制不住身体的反应,那些多巴胺把身体骗得一愣一愣的,每周六的早上六点钟,身体就从床上自己蹦下来。直到洗漱完毕,穿好衣服出门,大脑才清醒过来,嚷嚷道:「S**t, why did I sign up for this?!」

可是一上路,就只注意到自己的pace了,大脑开始嚷嚷着,「快了!快了!」或「慢了!慢了!」,试图让身体调节。到两英里的时候,是身体首先不干了,跟大脑抗议:「股四头肌好酸!」。右脑开始找理由:「大概是周四的jump squat,早就告诉你今天不要出来,拖到周日养好身体再来!」可是自己继续跑着,跑着跑着,身体就不说话了,忙着调节各个器官做好准备呢。下一次它抗议,要等到10英里的时候,再下一次,要到19英里的时候,然后是22英里的时候。

有说过我喜欢做一些自己也不太知道怎么回事的事情么?这事完全体现了那点。于是直到跑10英里磨破了脚,才知道应该带点创可贴。直到跑16英里没办法移动腿了,才知道应该带点吃的。直到跑到21英里体竭,才知道应该买点盐片和带水。

可是我是有多喜欢那些分泌的多巴胺带来的快感啊。做一件事情,能够投入多少,就看到另一个数字往上跳多少,开心极了。这大概就是Yaniv说的上瘾型人格,应该离大麻,神奇小蘑菇之类的远点。

或许没有这么直接,或许只是大脑和身体玩一个小游戏,想看看在身体完全崩溃的情况下,靠意志力能让它继续行多远。我也好想看看。

‹ Newer