Source favicon22:40 社会性网络中的Group(组群) » 刻录事
基本上每个社会性网络都会有Group(组群)的功能。这是人的社会活动本能在互联网社区上的一个映射。 但是,在如何发展Group上,却又很大的不同。就我目前所接触的来看,存在三种不同的类型: 第一种,是Flickr的Group,我觉得最成功,我个人也非常的喜欢。 Flickr是对“物”的社会性网络(有人称之为SocialObject) 。整个社区是围绕着图片创建起来。Group也不例外。 在Group中,唱主角的是被分享到Group中的图片,相比之下,Group下的Discuss内容少的可怜,很多Group的讨论帖子更是凤毛麟角。 尽管文字的东西稀少,绝不妨碍人们分享图片的热情,比如在我加入的红衣服的Group中,只有1个帖子,195成员,却有524张图片,在2比1好组中,只有15个帖子,图片有2886张。 因此呢,对于以“物”为中心的社会性网络,应该也以物为中心来使用Group功能。 很遗憾豆瓣没有这么做,尽管她的小组一点都不冷清,但是怎么看都觉得变成了普通的论坛了。比如在创业与投资小组中,我期待看到这个主题下的图书资料,同时看到图书对应的书评,但实际上,在那里,是以此主题为话题在讨论了。在小组收藏中,出现的是组员收藏的图书,而很多图书实际上与这个主题没有什么关系的。 或许豆瓣是从聚人气上考虑,但却失去了通过Group/小组来实现社会性过滤得功能,就像flickr的group过滤出好些同主题的美妙图片那样的功能。想想看,如果人们能在豆瓣小组中分享某个主题的图书,并对此批评讨论,不是很好的事情么,小组+人际关系,对书友来说,简直就是天堂了。 第二种,orkut中的社区。这是一个以人的关系为中心的社会性网络。因此呢,组群的功能也就是围绕某个主题把人凑在一块儿。大家在一起没啥事,只好谈天说地了。这是典型的论坛。 总体上而言,这些论坛的活跃性远不如google groups或者yahoo groups。但很奇怪,人们还是很乐意点击join/参加。或许正是一个表明自己兴趣的姿态。 是否对orkut类似的sns而言,论坛帖子的多少其实不重要,重要的是有多少成员。透过这个主题的参与人,可以将他们联系在一起,在需要的时候,可以浏览到。可以看成是一个以兴趣为中心的黄页系统。 前两种都是针对名词性的物事为中心,最后一种,是以动词为中心来组织Group。 我在想meetup算不算。
Source favicon22:31 精神奕奕 » Apache2 使用 mod_deflate 增進傳輸效能 » del.icio.us/chedong
成功的配置文件
Source favicon20:13 Invalid command 'Order' » del.icio.us/chedong
// in Apache 2.0/1.3 it's mod_access // in Apache 2.2 it's mod_authz_host
Source favicon19:49 LinuxDevCenter.com -- Cache-Friendly Web Pages » del.icio.us/chedong
“在HTTP/1.1种的缓存的目的是为了在很多情况下消除发送请求的需要,同时在其他一些情况下消除发送完整的响应的需要。” RFC 2616
Source favicon19:41 所谓 PR » DBA notes
近来 IT 江湖刀光剑影, 口水横飞, 此类事情, 大多是 PR 公司的 PR 所为. IT 人士口中的所谓 PR , 不是 Google 的 PageRank, 亦非 Permanent Resident (详情请用 "什么是 PR" 搜一下), 而是 Public Relations , "公关"是也. 我有个同学曾经短期从事 PR, 告诉我: 你就认为是 骗(P)人(R)就成了.我个人感觉 PR 人 与 IT 记者其实差不多, 如果是凑成了一小伙, 那就成了 PR 公司了. Donews 算得上 IT 江湖 PR 的公共场所. 经常有各路神仙上来报告什么同时在线人数"过百万","过千万", 融资"过百万","过千万" 之类的"新闻". 大小卫星不绝, 大型 PR 小型 PR 频繁登场. 当然, 也有 陷入 "PR 丑闻"的, 比如 这则不知真假的 PR 内幕 , 让人感慨, PR 赚点钱也不那么容易.
Source favicon18:50 熬夜 » DBA notes
又整整熬了一夜。今天下午起来, 头还是昏昏的。搞 IT 的朋友大多有通宵熬夜的经验,其中的苦处不说也罢. 在网上看到一段话: 熬夜会对身体造成多种损害:经常疲劳,免疫力下降。人若经常熬夜,所造成的后遗症,最严重的就是疲劳、精神不振;人体的免疫力也会跟着下降。自然的,感冒、胃肠感染、过敏原等等的自律神经失调症状都会找上你。而更糟糕的是……专家提醒:长期熬夜免疫力下降 其实如果是简单的熬夜倒也罢了, 最难受的是要在机房里受罪,且不说机器辐射对人体的危害, 光是工业空调冻得人半死(机器怕热,比人娇贵多了:D), 加上机器的噪音, 普通的机器问题不大, 小型机的嗡嗡声那叫一个恶心, 每次在离开机房之后耳朵里都会嗡嗡响. 啥时候劳动保障法能有专门针对 IT 从业者的条规呢 ? 我们的健康只能交给自己与上帝了.
Source favicon17:05 鸡生蛋,还是蛋生鸡 » 桑林志
© 桑葚,来自桑林志 | 固定链接鸡生蛋,还是蛋生鸡?这个古老的问题,现在有了科学解释啦。(是否有点失落。)英国诺丁汉大学的遗传学教授得出的结论:先有蛋。 简单的说,...
Source favicon12:30 转贴:如何做好一个垂直搜索引擎 » 酷讯黑板报
本文先引用几句话: 1.“确解用户之意,切返用户之需。” 2.“门户网站都想着是怎样省钱,而不是怎样花钱来买技术。” 3.“搜索引擎不是人人都能做的领域,进入的门槛比较高。” 4.“只是优秀还不够,最好的方式是将一件事情做到极致。”(google十大真理) 5.“做搜索引擎需要专注” “对于一项排到第四的业务,门户很难做到专注。” 6.“用户无法描述道他要找什么,除非让他看到想找的东西。” 7. “所谓楔形,其实就是个倒三角,倒三角的尖端部分代表搜索技术,中部是基于技术的产品应用平台,最上端是对整个搜索引擎用户人群文化的认识和理解,以及现代公司竞争最关键也最捉摸不定的所谓品牌。” “楔形”蕴涵的另一个意义是:楔子要打到墙里,尖端是否锐利很重要,但楔子的破坏性有多强,究竟能在墙面挤压出多大的空间,其中端、后端的沉稳与厚重才是关键。 搜索引擎的技术和理念都是需要时间和经验的积累的,更是需要长期不断的完善进步的,绝对不要认为可以一蹴而就,要达到一个相对成熟领先的搜索引擎从开始到领先的周期一般需要是四年。着急不得。原因是因为搜索引擎太复杂,而且“用户无法描述他要找什么,除非让他看到想找的东西。” 一切都需要摸索,尝试,问题需要一个一个解决,用户的需要得一点点的挖掘。 搜索引擎是一个产品,给用户提供服务的产品,需要长期的不断的改进升级调整才能持续不断的提用户体验,需要满足用户不断增长并且变化的需求、需要不断适应网络的变化。这是因为网络环境是不断变化的、网民的需求也是不断变化的。千万不要把搜索当成项目来做,做完了撂那让用户去用那你肯定没戏。在搜索引擎领域是讲体验的、新的引擎如果用户体验一旦整体上有领先一年以上的差距并且持续2年,那前期的领先者的优势就荡然无存,因为搜索引擎的用户转移成本相对而言是比较低的而且口碑是最佳的传播方式。如果一个搜索引擎不能持续不断的技术创新理念创新,那对于这个搜索引擎来说就等于死亡。我们一般形容搜索引擎的领先是以时间计算的。比如:中搜离百度整体差距×年,百度离google的整体差距×年,……只要你能在用户体验上保持一年的领先优势持续2年,不需要炒作,一切纷至沓来。在用户体验面前,任何的炒作都显得很渺小。 作垂直搜索引擎,麻雀虽小,但是五脏俱全。无论理念文化、产品管理、应用、技术都和搜索引擎的楔形理论没有什么区别。所以要做好一垂直搜索必须解决这几个方面。 楔形的尖:垂直搜索技术。 垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据,对网页的采集也是针对性的采集,适合规模比较小、信息源少且稳定的需求,优点是快速实施、成本低、灵活性强,缺点是后期维护成本高,信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可靠性上都是网页库搜索引擎级别的要求,和模板方式最大的区别是对具体网页不依赖,可针对任意正常的网页进信息采集信息抽取……。这就导致这种方式数据容量上和模板方式有质的区别,但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的,这两者对于垂直搜索引擎来说是相互补充的,因为技术只是手段,目的是切反用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。 搜索引擎的确是一项对技术要求比较高的应用,几年前相关的人才也比较少。现在搜索技术人才多了,相关的技术和技术的应用得相对以前而言更加成熟,但是竞争也更加激烈了。垂直搜索大致需要以下技术: 1. 信息采集技术 2. 网页信息抽取技术 3. 信息的处理技术,包括:重复识别、重复识别、聚类、比较、分析、语料分析等 4. 语意相关性分析 5. 分词 6. 索引 信息采集技术 垂直搜索引擎spider和网页库的spider相比应该是更加专业,可定制化。可定向性的采集和垂直搜索范围相关的网页忽略不相关的网页和不必要的网页,选择内容相关的以及适合做进一步处理的网页深度优先采集、对页面有选择的调整更新频率……,采集可通过人工设定网址和网页分析url方式共同进行。垂直搜索对信息的更新有着特别的要求,根据这些特点可以从以下几点考虑 1.信息源的稳定性(不能让信息源网站感觉到spider的压力) 2.抓取的成本问题 3.对用户体验改善程度。 根据以上几点制定一种比较好的策略,要做到恰到好处。策略上可以评估网站/网页更新的系数、网站/网页的重要系数、用户点击系数(或曝光系数)、网站稳定系数……,根据这些系数来确定对这些网站/网页更新的频率。再由于新信息和更新了的信息list页面前面或者首页,所以对网页进行很好的分级可以以低成本很好的解决更新问题,系数比较低的网页一月update一次,稍微高点的一周update一次、中等的几天到一天一次、高的几小时到几分钟一次。类似搜索引擎的大库、周库、日库,小时库…… 基于视觉网页块分析技术 模拟IE浏览器的显示方式,对网页进行解析。根据人类视觉原理,把网页解析处理的结果,进行分块,再根据需要,对这些块进行处理,如:采集定向、介绍抽取和一些必要的内容的抽取正文抽取…… 结构化信息抽取技术 将网页中的非结构化数据按照一定的需求抽取成结构化数据。有两种方式,简单的就是模板方式,另外就是对网页不依赖web结构化信息抽取方式,这两种方式可以互取长处,以最简单最有效的办法满足需求。垂直搜索引擎和通用搜索引擎最大的区别就是对网页信息结构化抽取后再结构化数据进行深度的处理,提供专业的搜索服务。所以web结构化信息抽取的技术水平是决定垂直搜索引擎质量的重要技术指标。其实web结构化信息抽取在百度、google早已经广泛应用了,如:MP3、图片搜索、google的本地搜索就是从网页库抽取出企业信息,添加到其地图搜索中的,google通过这种技术正在颠覆做内容的方式。同样的技术应用还在qihoo、sogou购物、shopping等各种应用中体现。 简单的语法分析 简单的语法分析在搜索引擎中非常重要,可以通过简单的语法分析来改善数据的质量,低成本的获得某类信息,改善排序,寻找需要的内容…… 信息处理技术 信息处理包括的范围比较广,主要包括去重、聚类、分析……,这根据需要相关的技术就非常多。 数据挖掘 找出您的信息的关联性对于垂直搜索来说非常重要,有效,可以在这些相关性上为用户提供更细致的服务。 分词技术,面向搜索的分词技术,建立和您的行业相关的词库。注意这是面向搜索的分词,不是面向识别和准确的分词。就这个工作安排十几个人不停的维护也不会嫌多。 索引技术 索引技术对于垂直搜索非常关键,一个网页库级的搜索引擎必须要支持分布索引、分层建库、分布检索、灵活的更新、灵活的权值调整、灵活的索引和灵活的升级扩展、高可靠性稳定性冗余性。还需要支持各种技术的扩展,如偏移量计算等。 其它技术 略。 垂直搜索引擎的技术评估应从以下几点来判断 1. 全面性 2. 更新性 3. 准确性 4. 功能性 锲形的中和尾:产品应用平台和对搜索引擎文化理念的理解 对于任何一个产品来说,产品的模式是最重要的,技术只是手段、工具、途径。用户不会关心你的技术是如何实现的、更不会关心你的技术水平是什么样的,只要用户感觉:这就是我需要的东西,很好用,而且是最好用的。那么你的产品就OK了。 考虑一个产品的模式需要考虑的东西很多,如:用户需要什么?需求有多大?能不能完整的实现用户的需求?需要什么资源?怎么做到?竞争分析?差异化?根据自身情况能做到什么程度?怎么样保持领先优势?能否收到钱?怎么样收钱?怎么样推广?需要多少时间?如何保证在时间窗口期内有效完成进度?如何分步分期优先完成用户最需要的需求?如何建立有效的反馈机制让我可以了解用户的需求变化和挖掘用户自己也无法表达的需求?如何进一步改善?分期需要多大的投入?如何降低整体成本和前期成本?如何分期投入?投资回报比?周期?…… 1. 确解用户之意 任何应用最难的就是了解用户的需求,甚至是用户自己都不知道的需求。 建立完善的、快速的用户意见反馈机制和用户需求调查机制,所有人都应倾听用户的牢骚、建议。不断的分析、修改。 2. 切返用户之需 满足用户的需求,一切纷至沓来。不需要炒作,请把您的资源多多花费在为用户提供良好的体验上来。 3. 不要干扰用户的意图,培养用户的使用习惯和技巧 有一个故事是这样的:还在yahoo使用google的搜索的时候,华尔街的几个分析师来评估这两个搜索哪个好用,去掉logo。结果一致评价yahoo的检索效果好。因为yahoo是使用的google检索结果,并且对热点关键词进行了人工调整。但是一转身这些分析师回到自己的电脑边查询东西,不约而同的打开了google。 4. 细节决定成败 信息不是越多越好,在海量的信息时代,如果不能妥善的整理信息,那就等于没有信息。每个页面的每个字,每个像素、图片的放置都值得花费时间去琢磨。把用户最需要的放在最显眼的位置,次需要的放置到更多页面,不需要的扔掉。 5. 将一件事情做到极致 不仅仅要关注80%的用户的80%的需求,20%的用户的20%的需求是您成败关键所在。 6. 专注 这么多需要你解决的问题,你还能干其它事情?对于一个排在第四的业务你是没有机会的。所以垂直搜索引擎的成功肯定不是具备良好资源的行业门户、也不会是大搜索的公司,必然是专注于某一行业的搜索引擎公司。因为只有专注,才能将一件事情做到极致。 7. 创新 失败不要紧,但是如果搜索引擎公司没有创新,那这个搜索引擎公司必然面向的就是死亡。 8. 需要完全掌握主要技术。 一个核心业务不可能通过外包手段来解决技术问题。虽然找个大公司外包技术看起来很美丽,很快速,甚至成本比较低。但是这是在毁灭你的将来。因为这是产品,不是项目。产品是需要不断完善调整的,用户的需求也是变化的需要挖掘的,互联网也是变化的,你外包技术绝对不可能做到灵活、及时满足各种变化。在和竞争对手竞争的时候您如何保持您的领先优势?(前文说了,如果被对手保持领先一段时间,那么你之前的领先优势就荡然无存)。这里还没有考虑竞争问题,购买其它搜索引擎公司的技术,对方会不会把真正的技术毫不保留的卖给你。再说,卖你你你能搞懂吗?技术再困难也要自行解决。否则你注定失败。最好的办法就是购买核心技术缩短研发周期、成本、风险,再在这个核心技术进行自主研发。 这是垂直搜索的技术门槛,看似不高,其实很高。 对于技术问题可以迂回解决,用最简单的技术满足用户最迫切的需求。用户是不会关心技术实现的。 模板方式可以是网页结构化信息抽取技术的补充。对于可行的应用早期采用模板技术也是不错的选择。比如chinabbs就做的很好,用户的主要需求是要浏览到好的帖子,所以加强内容的建设,找高水平的编辑做推荐,而且在界面和易用性上也很不错。领先qihoo。技术方面他们初期采用的应该是模板自动生成方式采集论坛信息,比qihoo技术水平差,但是这目前不是用户需求的关键,而且qihoo技术水平层次虽然高但是如果不成熟,体现给用户的东西未必就强。Chinabbs接下来再解决技术难点,在技术上有提升,那么他就能持续保持领先优势了。(但是话又说回来,招聘好的编辑很容易,技术要提升一个层次并且成熟很难,而且很耗费时间,当然用户习惯和知名度也是需要很长时间培养的) 9. 用最简单的技术实现用户最迫切的需要 技术重要,但是技术的使用得当更重要,技术是为用户体验服务的。只要能满足用户需要,什么技术都可以,简单不代表不行,用最简单的技术实现用户最迫切的需要。百度的整体技术我认为离google中文至少有1年以上差距,很多方面差距更大,但是百度的效果比google好,原因就是将简单的技术用于实现用户迫切的需求。 举个我身边的例子来描述简单的技术实现需求:我把我们的基于视觉的网页块分析的正文抽取技术演示给一好友看,好友看后说:我们也实现了。我大惊,他们不是做搜索的,居然也实现了! 他告诉我他们实现的方法后,我再次吃惊,深感简单的技术也可以很好的解决问题,虽然不完全解决,但是能满足自己的需求就好。他们的解决方法是:对网页的html进行分析,将整段文字中没有html代码的文字提取出来,这就是正文。(惊叹!!如此简单!!注:他们的信息源都是这样的格式) 10. 根据中国本土互联网特点,强力的antispam,对信息进行清洗。 11. 很多人误解垂直搜索就是把相关的行业网页做一个采集,进行正文抽取,实现搜索,完成信息册查询。其实并非如此。如果这样无法和网页搜索竞争,网页搜索很容易就可以将网页库按行业分类、按地区分类。     垂直搜索应该是对垂直行业信息进行深度的加工,有效的整合,为用户提供网页搜索无法做到的专业性、功能性,为用户提供深一步的服务和完整的体验,而且不仅仅是提供信息的检索。垂直搜索是和信息搜索有本质的差异化的。 12.专注用户体验的改善,任何的宣传炒作都是空乏无意义的,搜索引擎的核心在于用户体验,你只要改善用户体验,比别人强一点点,那么其它人的炒作和宣传都在为你打工
Source favicon12:16 Gapminder Foundation » Googling Google
Philipp Lenssen blogs about a tool called Gapminder that can be used as a subscribed link or by interacting with the graph directly.  This tool helps you "make sense of the world by having fun with statistics".  From the tutorial page:What you see is a scatterplot where each bubble represents a country. The position of [...]
Source favicon12:05 FeedTools: a simple Ruby library for handling rss, atom, and cdf » del.icio.us/chedong
FeedTools is a simple Ruby library for handling rss, atom, and cdf parsing, generation, and translation as well as caching. 从服务器的日志看到的另外一个RSS解析器
Source favicon11:02 Linux版Google Earth也即将出现? » Blog on 27th Floor
LinuxToday报道的消息,来源还是相当地可靠。并且据说Earth不会再用Wine,而将使用QT和GL,好消息。

正好想起Google的语言工具,它对这个报道的翻译还是相当地有趣,统计模型还是有问题的

Linux用户和搜索鸟星期四晚间接受治疗,突然宣布观山,晚上八时解除了公司的Linux版Picasa图片管理工具.
软件被悄悄释放于五月二十五日上午十一时,(但是)即使公布网路搜索.
星期五早上,不少有兴趣的美国以外的用户报告说他们不能进入Linux的网页Picasa--至少没有利用美国的傀儡服务器.

……

这样做的理由,DiBona解释,就是让Picasa版本的Linux开发小组著名酒依赖工程仿真技术. 具体地说,Picasa将利用国内葡萄酒以Linux运作. 在这样做的时候,他说:“我们取得了一些相当大的增加酒” 这样一来会增加工程马上回到酒. 著名的225个大棚,可从酒的新酒在Code.google.com版网站.
DiBona解释引擎工作得以广泛实施CodeWeaversPicasa港口与酒. 这些新的葡萄酒法规,DiBona说:“我们应该有很多其他项目更容易得到应用Linux携来”
Source favicon10:17 garfield » Blog Archive » 谷歌的最强解释: google - olo + u = guge » del.icio.us/chedong
今天看了一个网友的解释,马上快笑晕过去了,他是这样想的:把google阉了之后就是guge即谷歌
Source favicon09:06 Weather Report: Yahoo! Search Index Update » Yahoo! Search blog
We rolled out another index update late last week. You’ll see some changes in ranking along with what is in the index. For feedback, we are moving away from the email address "ystfeedback at yahoo.com" to a simple form available...
Source favicon09:01 AI以及终极搜索 » Blog on 27th Floor
终极搜索,是Google创始人经常被报道的一句话,他们(或其中某一人)认为现在的搜索引擎还有极大的进步空间,而Google的目标就是终极搜索,起码要达到问什么问题都有答案的境界吧。

如果没有问题,是不是要达到没有问题创造问题也要问的境界呢?那就是人工智能了,估计他们很有可能考虑了这个问题。比如这个贴子就说,Google确实雇用了一些AI方面的专家。比如他们搜索质量方面的指导就是一位,而大量数据的搜索也算是AI的一个重要方面。

AI这东西,虽然我对CS所知甚少,但也听到过说这东西没前途,或者一直没有进展,多少年了,也还是那么点东西,在CS领域内似乎地位也不高了等等。通常说起AI的时候,大家都认为如果计算机足够快,就有希望,这个贴子也举了很多例子,比如到2018年,地球上所有计算机的计算能力将可以等于一个人脑;像蓝色基因这样的大系统,有可能在下一个10年就达到这个水平(前面说的是PC?);还有人预测到2019年一台1000美元的笔记本就有一个人脑的计算力。

可是这种计算力有什么用呢?如果他们还只是用来统计、模仿、按指定规则办事的话。正如作者说的,这不是AI,而是IA,也就是智力放大器。它们算得再快,也只能增强人已有的智力,扩展它的范围和深度,而不能发展出新的智力。

这其间必有一个大大的障碍没有突破,甚至看不到突破的可能,因为对人的意识的研究还很初步,更谈不到如何去创造一种意识。也许这是老天才能做的事?

阿西莫夫的作品中,他大量地写到机器人,它们都已经比人还聪明,高级的已经能调整人的意识,但它们仍然缺乏人的直觉。当然它们已经先进得大大超过我们现在的理性思考了。它们的秘诀在于一种线圈(不知道记得对不对了),一种模拟线路,状态不定,其中的电流有很强的自我创新的能力,这就是它们的意识的来源了。当然,最初这个线圈也是某科学家无意中的发现。在这没有重大科学突破的时代里(炸药奖年年发,就是记不住),不如期待一下阿西莫夫的机器人吧
Source favicon08:43 推荐超星图书馆 » 变态家族
以前身边有图书馆的时候根本就没有想过超星, 但是现在的图书馆里面没有中文书, 总是不那么方便。  于是想到了超星图书馆, 很便宜, 我买了一个两年的卡, 一百八十块钱。在日本随便买一本不太厚的英文书(他们称之为洋书,与和书相对应) 都要比这个能看两年的卡贵。 而且网上用信用卡交费三十秒就搞定可以看书了。 主要想找一些经典的教材的翻译, 里面这类东西收的确实很全。 这两天要找的书 都能在上面找到, 还是挺不错的。 一个月可以打印壹千页, 我觉得看是怎么也看不完这个配额的。

Bug是不支持ie7, 需要将其卸载, 再重新装ie6。 而且没有Linux版本。

想到了上次看的 NY Times 上的Scan This Book, 说到虽然美国人有强大精细的机器来OCR, 但是google在斯坦福扫描一本书比起超星, 书生之家在中国扫描一本书还是要贵多了。 东方红, 太阳升, 中国出了个Super Star…… 支持中文数字图书馆!
08:00 2006/05/30 08:00:00TQ洽谈通搜索力指数排行榜 » TQ洽谈通搜索力指数
 搜索引擎  搜索力指数  排名升降  份额
1. Baidu  230035586     43.66%
2. Sogou  180166038     34.20%
3. Google  38327466     7.27%
4. Yahoo  34768318     6.60%
5. 3721  26483794     5.03%
6. QQ  12513382     2.38%
7. iAsk  1553146     0.29%
8. 163  1235726     0.23%
9. China  811106     0.15%
10. Zhongsou  690934     0.13%
11. Tom  262026     0.05%
Source favicon07:51 笔记本: 善用cache让程序跑得更快 » 变态家族
为了完成羞涩教授猛哥的将Multigrid算法的速度发挥到极致的目标, 顺着这些专门研究利用cache数据的德国人们(DiME)的脚步, 作了一些笔记, 虽然自己不姓后藤…… 中文毕竟比英文好看一些, 要我看我也愿意看中文的。


什么是内存壁垒(Memory Wall) ?

用70年代后期的Multigrid方法解决泊松问题, 一个未知数需要三十个操作, 对于更一般的椭圆方程问题, 一个未知需要一百个左右的操作, 对于一个现在的CPU,一秒钟可以有1Gflop, 如果一切完美, 只考虑CPU频率, 我们可以在一秒钟内解决1000万个未知, 需要O(100)Mbyte的内存。 但是实际上只要多于一万到十万个未知, 你的代码就会崩溃, 需要一个小时左右, 需要不可计数的内存。

问题不在于处理数据, 而在于转移数据。  访问数据有两个指标, 延迟和带宽。 延迟--读写内存的时间太长, CPU内的数据访问需要0.5ns, 而内存需要50ns。 带宽--每秒可以读写的byte数, 对于1GFLOP的CPU需要24Gbyte/秒的带宽。 而现在CPU所拥有的峰值带宽是5Gbyte/s, 而实际应用上远远达不到这个数字。 解决的办法除了可以提高带宽无法提高延迟的Interleaving以外, 就是两方面都可以提高的cache, 通常现在会有两到三层的cache, 但是只有在数据在本地的cache的时候才能用。 载入cache的原则有根据时间的还有根据空间的, 每次载入的是一个cache line, 通常是32-128byte, 现在最长时1kbyte。  这里需要了解的是替换的策略, 关联, cache line的大小, hit ratio和miss ratio的概念。 这是一些现在电脑的cache数据。 Lx指的是x级的cache, 比如说L1就是一级的cache。

IBM Power 3:
    • L1 = 64 KB, 128-way set associative
     L2 = 4 MB, direct mapped, line size = 128, write back
Compaq EV6 (Alpha 21264):
    • L1 = 64 KB, 2-way associative, line size= 32
    • L2 = 4 MB (or larger), direct mapped, line size = 64
HP PA: no L2
    • PA8500, PA8600: L1 = 1.5 MB, PA8700: L1 = 2.25 MB
AMD Athlon: L1 = 64 KB, L2 = 256 KB
Intel Pentium 4: L1 = 8 KB, L2 = 256 KB
Intel Itanium:
    • L1 = 16 KB, 4-way associative
    • L2 = 96 KB
        6-way associative, L3 = off chip, size varies


让程序更快的原则
-on
-fast
-unroll
-arch
   阅读编译器的man,w ww.specbench.org特定平台的选项, 试验和比较
  • 使用合适的数据布局    按顺序访问数据。例子:访问三个向量 double a[n],b[n],c[n]。 这样的效率通常更高 doubel abc[n][3]


评估
  •  Data cache misses (for different levels)
  •  Instruction cache misses
  •  TLB misses
  •  Branch mispredictions
  •  Floating-point and/or integer operations
  •  Load/store instructions
  •  Etc.  
工具
PCL =Performance Counter Library, 跨平台,在代码内或代码外使用。
PAPI =Peformance API,跨平台, 高级和低级的接口。
DCPI :基于Alpha的Compaq Tru64 Unix

例子: 代码外
 PCL Hardware performance monitor: hpm
% hpm –-events PCL_CYCLES, PCL_MFLOPS ./mg
hpm: elapsed time: 5.172 s
hpm: counter 0 : 2564941490 PCL_CYCLES
hpm: counter 1 : 19.635955 PCL_MFLOPS

或者是代码内 ……

可见要查看cache的miss ratio, 就必须要用第三种方法了。


浮点数计算的优化
• if statements
• Loop overhead
• Subroutine calling overhead

Loop unrolling
更少的判断/跳转指令, (loop更大, 代价就越小)
更少的load指令

--让loop更大,比如i:n步进为1的循环,改成i:n步进为4的循环。
--flop-to-load-ration
--重命名, Fortran不允许, c可以。 F更快。c可以使用编译选项 -noalias或c的关键字restrict
--特别的函数,比如除, 开根号, 指数,对数, 三角运算代价更高, 会用掉几个周期。
--避免在最内层的循环使用if, 但是不存在这样的技术。 不要在判断时用到上面说的那些代价高的函数。
--循环的代价:cpu需要释放一定的寄存器, 比如说循环寄存器,地址寄存器来开始循环, 所以短的循环相对代价更高。 如果n>m, 这样的循环
    do i=1,n
    do j=1,m
    就没有下面这个循环有效率
    do i=1,m
    do j=1,n
-- call子函数的代价。子函数对程序的良好结构很重要, 但是呼叫的代价很高, 大概是100个cycles。 传递值参数需要复制数据, 如果使用不当代价会非常高。 但是使用指针可能会不安全, 可以在使用时用const的声明。 通常, 在很小的循环中, 不应该呼叫子函数。 在c中使用incline声明, 使用宏。



针对内存的数据布局优化

stride-1内存访问
用合并数组的方式创造基于cache优化的数据结构。
数组填充(padding)
   
4*3数组A[i][j]
内存地址
8 A[][] A[][] A[][] A[][]
4 A[][] A[][] A[][] A[][]
0 A[][] A[][] A[][] A[][]
stride-1(一步数组访问):数组变换, 和上面的循环优化一样, 一般由编译器完成。 重用cache line的内容。

cache-aware的数据结构
将需要的数据放在一起, 提高数据在内存空间的集中性, 将其写到一个struct中

数组填充
建立比需要更大的数组, 改变相对的内存距离, 避免严重的cache匹配失败问题。 例如将(FORTRAN中以列为顺序)double precision u(1024, 1024)改为double precision u(1024+pad, 1024)
如何padding
C-W Tseng(UMD) 数组内的intra-variable pad和数组间的inter-variable pad.
cache 的映射规则有直接映射, 部分关联映射和全关联映射, 对于前两者, 两块不同的内存位置是可能会竞争同一块cache行的。 从而会引起匹配cache失败。 通过在数组之间或者数组里面增加pad, 可以让竞争的内存分配到cache中不同的地方。 但是, 这个padding的计算是非常困难的。



数据访问的优化。
-loop unrolling
-loop interchange
-loop fusion
-loop split
-loop skewing
-loop blocking

循环合并:将几个循环合并为一个,减少cache miss, 增加了时间上的集中性。 当数据集合被重复使用的时候可以使用, 比如说叠代运算。
do i= 1,N
    a(i)= a(i)+b(i)
enddo
do i= 1,N
    a(i)= a(i)*c(i)
enddo
do i= 1,N
    a(i)= (a(i)+b(i))*c(i)
enddo
改为
a(i)= a(i)+b(i)
    do i= 1,N
a(i)= (a(i)+b(i))*c(i)
a就从load到cache两次变为load到cache一次。

例子:红黑GS叠代
传统的方法--先松弛全部的红点, 再松弛全部的黑点。

但 是实际上只要黑点上面一行的红点更新后, 更新这个黑点所需要的四个红点就都已经都更新了, 所以可以在更新上密集按那一行红点的同时 , 更新黑点。 这样比传统的方法将矩阵两次载入cache变为之需要一次! 当然, 第一行的红点和倒数第二行的黑点需要特殊的处理。 可以看到这个gif图片上的动态显示, 点外围的圈数代表松弛的次数。


















循环分割
: 循环合并的逆操作。 提升编译器的优化, 提升指令cache的利用率。 (尽量的利用一次移入cache的数据集合)

分块循环(loop blocking, loop tiling): 将数据集合分割成适合cache尺寸大小的小块子集。 在转移到下一块数据子集的时候尽可能的进行更多的运算。 因为数据的相互依赖关系的存在, 这有时并不是那么容易实现。

应用一维分块技术后的代码
B 是GS叠代分的块数
for it= 1 to numIter/B do
// Special handling: rows 1, …, 2B-1
// Not shown here …
// Inner part of the 2D grid
for k= 2*B to n- 1 do
for i= k to k- 2*B+1 by ?2 do
for j= 1+(k+1)%2 to n- 1 by 2 do
relax(u(j,i))
relax(u(j,i- 1))
end for
end for
end for
// Special handling: rows n-2B+1, …, n-1
// Not shown here …
end for

数据被B次载入cache, 如果2*B+2正好合适cache的大小。
数据如果过大, 可以采用2D的分块。 或者更复杂的分块。




介绍了根据cache优化的Multigrid方法的一个包, DiMEPACK。 用的是C++的接口, F77的子程序, 接下来看看这个包。 不过里面子程序用FORTRAN写的, 用M4宏处理器, 有大量的宏, 跟以前看的程序还不一样。

有些事情其实本应该是编译器去做的, 但是编译器做得还没有那么好, 自己写的时候注意一下, 考虑到内部的结构, 就可以很方便的提高速度。



Source favicon03:59 What's new in Movable Type 3.3? » ProNet
As we mentioned yesterday, we're putting the finishing touches on Movable Type 3.3 in advance of the beta test starting next week. We're very excited about this release and look forward to showing you what we've got in store. Our...
Source favicon02:26 离开香港,想起莎莎 » 大学小容

本来想在离开香港之前发个照片贴到Blog上来,谁料想这点时间都不够......昨天上午香港下大雨,和两个同事,在雨中拖着行李箱,走过西港城,去附近的上环地铁站……在往罗湖的列车上,将同事购买的三个装满化妆品的莎莎手提袋摆在列车椅上,拍了几张照片来记录莎莎SaSa的那个头发丝一样的辅助造形:)访问www.sasa.com也应该可以看到这个造形……

小容在很多年前看《世界经理人文摘》,有一期封面人物就是莎莎控股的CEO,标题是“面对艰难时世,更要坚守远景。”,那时候看了以后印象非常深刻,还特别写了一篇文章,发表在本地的晚报上,现在大家在这里还可以看到:《给“热门产业”泼点冷水》。

《世界经理人文摘》98年9月发表莎莎国际控股有限公司主席兼行政总裁郭少明先生的心得,“过去的一年对亚州来说,是不同寻常的一年。亚洲金融危机给香港的经济带来了极大的冲击。随着市场环境的变化,零售业受到越来越大的压力……尽管面临这样一个经济环境,莎莎仍然稳步成长,并且向全球市场扩张……我们在疲软的市场环境下所取得的诱人成就,得益于以下三个重要因素:一贯坚持我们的业务使命;致力于高品质的顾客服务;重视人力资源的投资。无论时世的好坏,坚守自已的使命,面对艰难时世,唯有坚守远景”。

这张照片是在国际金融中心39层的Sidley律师行的会议室里拍摄的。

“一贯坚持我们的业务使命;致力于高品质的顾客服务;重视人力资源的投资。无论时世的好坏,坚守自已的使命,面对艰难时世,唯有坚守远景。”看起来好像是香港整个城市的心声。

Source favicon02:11 YPNBlog Guest Columnist & YPN on Click This! » JenSense - Making Sense of Contextual Advertising
My guest blog on YPN & YPN's interview on Click This!
Source favicon02:01 AdSense Injection WordPress plugin prevents banner blindness » JenSense - Making Sense of Contextual Advertising
New Wordpress plugin allows bloggers to automatically rotate ad size and positioning...
Source favicon00:45 迅雷–下一个百度正在走近 » 酷讯黑板报
今天好友程浩在MSN上面告诉我,迅雷获得了今年“未来之星”评比的第二名,并且他本人也上了《中国企业家》的封面。真的由衷为他和迅雷感到高兴!“未来之星”的评选一向相当有分量,候选者都是未来的商业巨人。而且不由得让人想起的是,去年正是百度获得了“未来之星”的第一名。 在我看来,迅雷和百度其实真的十分相像: 都是由无任何“资源”背景的海龟创立; 都是瞄准互联网用户的基本需求,搜索和下载都有着巨大的市场空间; 都属于技术型公司,价值观都是致力于为用户提供最好的产品; 都极为专注,几年时间只做一件事情; 都成长极快,一年找方向,一年完善产品,一年爆发式增长; 都是在风险资金的支持下发展,但却都没有“烧”过钱; 都在初期遇到貌似强大的竞争对手,百度遇到Google、Sina, 迅雷遇到Flashget、Dudu,但最后证明竞争对手不过是磨刀石。 …… 太多相像点了,无法一一列举。我想,在迅雷加强其门户www.xunlei.com 以及把收入做起来以后,去NASDAQ上市的道路就将铺满鲜花了,创造下一个百度的奇迹也不远了。 所有的成功都不是偶然的。程浩在一次朋友聚会中说起他做迅雷的心得,“无它,远见,坚持,执行力,再加一点点运气”。 远见,就是能比别人看得更远一些。在2001年开始做搜索是一种远见,在2003年做下载软件,能预见用户如此巨大的下载量并把它做成一种商业模式,也是一种远见。 坚持,不仅在成功的时候坚持,更重要的是在逆境中坚持。在顺境中坚持需要的是抵制诱惑以及专注,逆境中坚持则需要信心,我知道,2003年时的迅雷条件相当艰苦,公司上上下下十几个人,每人只开2000元的生活费,且整整坚持了一年。 执行力,来自于执行团队计划与管理的能力,来自于团队的凝聚力,来自于团队中每个人激发自身的所有潜力。 祝福迅雷!祝贺程浩! 说了这么多,真的希望酷讯能够学习百度和迅雷,为中国互联网创造另一桩成功故事。 Shichun

^==Back Home: www.chedong.com

<== 2006-05-29

==> 2006-05-31