- 博客(28)
- 资源 (8)
- 收藏
- 关注
原创 popcount & google.sparsegroup
ubuntu+gcc4.3 ,尝试修改 google.sparsetable 中的 sparsegroup,修改完成,不启用 -mpopcnt,sparsetable_unittest 和 hashtable_unittest 都通过了。启用-mpopcnt以后,发现硬件不支持,报非法指令错误,公司的电脑太烂了! 换到服务器上,是64位至强,gcc4.1.2,启用 -mpopcnt 再加
2010-02-22 20:35:00 2157
popcount & google.sparsegroup
ubuntu+gcc4.3 ,尝试修改 google.sparsetable 中的 sparsegroup,修改完成,不启用 -mpopcnt,sparsetable_unittest 和 hashtable_unittest 都通过了。启用-mpopcnt以后,发现硬件不支持,报非法指令错误,公司的电脑太烂了!换到服务器上,是64位至强,gcc4.1.2,启用 -mpopcnt 再加 -O1...
2010-02-22 20:35:00 115
原创 google.sparsegroup 可以更好
sparsegroup 是 google.sparseXXXX (sparsehashmap)系列中最底层的一个数据结构,sparseXXX 的互相依赖如下:-sparsegroup - sparsetable - sparsehashtable - sparse_hash_map - sparse_hash_set 因此,
2010-02-22 13:29:00 1583 1
google.sparsegroup 可以更好
sparsegroup 是 google.sparseXXXX (sparsehashmap)系列中最底层的一个数据结构,sparseXXX 的互相依赖如下:-sparsegroup - sparsetable - sparsehashtable - sparse_hash_map- sparse_hash_set因此,sparsegroup 实现的性...
2010-02-22 13:29:00 123
原创 tcmalloc 要点
google.tcmalloc线程缓存(threadcache)加锁(locking)加锁的开销是比较大的(cpu要同步cache),一般要几十个时钟周期,特别是cpu较多的时候,锁冲突概率大大增加。malloc不是在进入malloc就马上加锁,而是在thread cache耗尽后才加锁(用于从全局堆获取内存),加锁的频率被大大降低(通常
2010-02-22 11:33:00 1886
tcmalloc 要点
google.tcmalloc线程缓存(threadcache)加锁(locking)加锁的开销是比较大的(cpu要同步cache),一般要几十个时钟周期,特别是cpu较多的时候,锁冲突概率大大增加。malloc不是在进入malloc就马上加锁,而是在thread cache耗尽后才加锁(用于从全局堆获取内存),加锁...
2010-02-22 11:33:00 80
原创 这样反贪如何?
类似于囚徒困境,立这样一条法律: 行贿者保留自己向受贿者行贿的证据,事后告发该受贿者;对于该告发行为,法律严惩该受贿者,而该行贿者不受任何处罚。 而如果是被查处,则行贿者和受贿者一起受处罚。 因为在大多数情况下,受贿者都是处于强势地位的,因此,受贿者告发行贿者不能免除(受贿者自己)被处罚。 当然,这个前提条件是假定行贿者在心中对受贿者是恨之入骨的!这样
2010-02-20 18:06:00 1148 2
这样反贪如何?
类似于囚徒困境,立这样一条法律: 行贿者保留自己向受贿者行贿的证据,事后告发该受贿者;对于该告发行为,法律严惩该受贿者,而该行贿者不受任何处罚。 而如果是被查处,则行贿者和受贿者一起受处罚。 因为在大多数情况下,受贿者都是处于强势地位的,因此,受贿者告发行贿者不能免除(受贿者自己)被处罚。当然,这个前提条件是假定行贿者在心中对受贿者是恨之入骨的!这样的...
2010-02-20 18:06:00 88
原创 google.sparsetable 实现细节
goolge.sparse*系列容器依赖关系: - sparsetable - sparsehashtable - sparse_hash_map - sparse_hash_set与现有的一些“标准”实现不同,sparsehashtable 使用二次探测法,而不是链接,来解决hash冲突。 sparsetable 就更奇特了
2010-02-08 12:39:00 1111
原创 google.sparsetable 实现细节
goolge.sparse*系列容器依赖关系: - sparsetable - sparsehashtable - sparse_hash_map - sparse_hash_set 与现有的一些“标准”实现不同,sparsehashtable 使用二次探测法,而不是链接,来解决hash冲突。 sparsetable 就更奇特了,...
2010-02-08 12:34:51 208
原创 gcc 4.5
只拣一些有用的: The -fshow-column option is now on by default. This means error messages now have a column associated with them. A new built-in function __builtin_unreachable() has been
2010-02-07 12:07:00 797
原创 终于可以优雅的捕获 shell heredoc 内容了
Shell代码 eval var=`cat` "+EOF" 终于可以用这种方式捕获 heredoc 的内容了 我太高兴了! 原先那种方式: var=`cat "+EOF2" heredoc content EOF2 ` 不光麻烦,而且会出问题,如果正文中出现一个未被引号引起来的`就挂了
2010-02-06 14:29:00 2422
原创 终于可以优雅的捕获 shell heredoc 内容了
eval 'var=`cat`' <<"+EOF" 终于可以用这种方式捕获 heredoc 的内容了 我太高兴了! 原先那种方式:var=`cat << "+EOF2" heredoc contentEOF2` 不光麻烦,而且会出问题,如果正文中出现一个未被引号引起来的`就挂了 用 $(cat ...) 的方式...
2010-02-05 22:09:02 254
原创 shell heredoc 微妙之处
here doc 的一般用法:[cmd] <<word here-documentdelimiter 可以把 heredoc 的内容放进文件,也可以放进 shell 变量,参见以下代码:#!/bin/sh# write heredoc text to filecat > file <<EOFsome te...
2010-02-05 20:03:33 102
原创 shell heredoc 微妙之处
linux firefox 下,这篇文章被csdn排乱了,并且无法修改排版格式,这第一行倒可以修改!排版正确的在 javaeye今天是我两个多月以来第一次使用 csdn 直接写博客,碰到这样的事情,让我太失望了,浪费我如此多的时间! here doc 的一般用法:[cmd] word here-documentdelimiter
2010-02-05 18:34:00 3597
原创 通过管道向 hadoop put 文件
使用 hadoop file shell 可以方便地向 hdfs put 文件,但是,该 shell 不支持从管道读取数据并放到 hdfs 文件中。它仅支持这样的 put 命令:Shell 代码 cd $HADOOP_HOME bin/hadoop fs -put localfile $hdfsFile bin/hadoop fs -
2010-02-05 15:56:00 3848
原创 shell 中验证管道是否正确执行
象这样的 shell 代码:prog1 | prog2 | prog3 | prog4 prog1 | prog2 | prog3 | prog4$? 只能得到最后一个命令的返回值,该 如何检查整个命令是否全部正确执行? 有一个数组变量PIPESTATUS,保存了最近一个管道命令中所有子命令的返回值
2010-02-05 15:53:00 861
原创 my PipelineProcessor
刚看到,intel tbb::pipeline 实现的功能,和我以前实现的一个pipeline : febird::thread::PipelineProcessor ,介绍:1. 多线程的 pipeline 设计模式2. 多线程 Pipeline 的改进 几乎就是同一个东西:多线程流水线执行,按次序,stage划分……可惜啊,它只在我的几个程序中用过,
2010-02-05 15:52:00 650
原创 简单的代码生成器创建领域语言
有一类问题,代码模板相同,但有少部分地方不同,一般可以写一个复杂的程序,使用不同的选项,完成不同的任务。或者,把公共的部分抽象成一个代码库,然后在不同程序中引用。但是,如果公共的部分很少,并且比较“专用”,或者因为其它原因,比较难以部署。怎么办?实际上,有另一种完全不同的编程模式来实现:代码生成器。unix世界中最知名的代码生成器莫过于lex和yacc了。但是,不比每个代码生成器都那么复杂,比
2010-02-05 15:46:00 947
原创 LC_ALL=en_US.UTF-8 让 awk 慢了 40 倍!
无意中发现,在一台服务器上,非常简单的awk程序,比C的等价物要慢40倍,感觉有点不太正常,还以为的确是awk太慢。不得其解,到另一台服务上试了一下,相同的 awk 程序,相同的测试数据,这台服务器的速度与C相当,也就是说,同样是awk,两台机器速度差了 40倍,而两台机器配置基本相当。非常困惑,找了两小时的原因,终于发现gawk手册里面有一段话:For other single-charac
2010-02-05 15:44:00 4374
原创 count, sum, avg by range in log(n) time
考虑一下这样一个查询:select count(*), sum(tax), avg(weight) from pepolewhere id >= ${minid} && id 怎样才能实现更小的时间复杂度? 一般情况下,最简单的方法就是遍历这个区间。但是这需要O(logn +m)的时间复杂度,其中m是区间长度,n是总记录数。 实际上,可以略增一点存储代价
2010-02-05 15:40:00 1447
原创 MapReduce应该做更少的事情
MapReduce 做的事情太多了。相比 unix 思想,它更多的是提供了一种策略(Policy),而非一种机制(Machanism)。对于并行计算,如果我仅仅需要一种机制,暂且把这种机制叫做S,那么S只需要提供:任意切分原始输入 ——split无依赖的计算 ——map按依赖切分中间结果 ——partition有依赖的计算 ——reduce容错
2010-02-05 15:38:00 684
原创 字符串基数排序
对字符串使用基数排序,以前,我一直觉得:因为字符串的长度不一,无法使用基数排序。前两天因为有需要,忽然想通了!即便长短不一,也可以使用链式基数排序! 首先,将字符串长度当作最低有效位,因为基数排序是从最低有效位开始排的,就先用分配-收集算法对长度做一趟。对字符串中的具体某一位字符进行排序相比,算法是一样的,只是写法稍有不同。要将排序结果的lenRadix指针保存起来,后面要用。
2010-02-05 15:36:00 3963 2
原创 MultipleInputs/MultipleOutpus
仔细看了一下 Hadoop.MapReduce 的代码,发现了两个新类:MultipleInputs/MultipleOutpus,再仔细看它们的详细文档,的确实现了我想要的功能:不同的InputPath,可是使用不同的InputFormat 和 Mapper可以将不同类型(可能是多种计算)的结果写入不同的Reduce Output。 再看一下它们的实现代码,让我大失所望,
2010-02-05 15:27:00 2169
原创 通过管道向 hadoop put 文件
使用 hadoop file shell 可以方便地向 hdfs put 文件,但是,该 shell 不支持从管道读取数据并放到 hdfs 文件中。它仅支持这样的 put 命令:cd $HADOOP_HOMEbin/hadoop fs -put localfile $hdfsFilebin/hadoop fs -put localfiles $hdfsDir 幸好,主流的 un...
2010-02-05 14:52:16 161
原创 shell 中验证管道是否正确执行
象这样的 shell 代码:prog1 | prog2 | prog3 | prog4$? 只能得到最后一个命令的返回值,该 如何检查整个命令是否全部正确执行? 有一个数组变量PIPESTATUS,保存了最近一个管道命令中所有子命令的返回值该返回值与 $? 一样,每次命令都会改写它,因此,要保存它就必须马上!以下代码可以检查管道命令:prog1 | prog2 | ...
2010-02-05 14:29:49 311
原创 my PipelineProcessor
刚看到,intel tbb::pipeline 实现的功能,和我以前实现的一个pipeline : febird::thread::PipelineProcessor ,介绍:1. 多线程的 pipeline 设计模式2. 多线程 Pipeline 的改进 几乎就是同一个东西:多线程流水线执行,按次序,stage划分……可惜啊,它只在我的几个程序中用过,现在有了...
2010-02-01 15:43:21 156
原创 简单的代码生成器创建领域语言
有一类问题,代码模板相同,但有少部分地方不同,一般可以写一个复杂的程序,使用不同的选项,完成不同的任务。或者,把公共的部分抽象成一个代码库,然后在不同程序中引用。但是,如果公共的部分很少,并且比较“专用”,或者因为其它原因,比较难以部署。怎么办?实际上,有另一种完全不同的编程模式来实现:代码生成器。unix世界中最知名的代码生成器莫过于lex和yacc了。但是,不比每个代码生成器都那么复杂,比...
2010-02-01 14:30:46 118
febird C++ 库(附带所有源码)
2009-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人