-
使用gprof剖析代码解决性能问题 - [LBE]
2007-08-30
原文:Use gprof to check your codes for performance issues
作者:mysurface
译者:gosman(lianmingchang2008#gmail.com)
来自:http://gosman.blogbus.com
版本:V 1.0.0
时间:2007-8-30
通过阅读IBM DevelopWorks上的使用 GNU profiler 来提高代码运行速度,我掌握了使用gprof来分析代码的性能瓶颈,以减轻我工作的技术。下面就来分享一下我的经验。
我们先看看GNU profiler工作的几个简单步骤。
为了使用gprof,只需在用gcc编译C/C++代码时加上-pg选项。假设要编译的源代码是gp-test.c。
gcc -pg -g2 -o gp-test{,.c}-pg是启用gprof,-g2设置调试模式为2,-o指定二进制输出,我使用了大括号扩展来减少我的输入。
接着运行可执行文件,将产生gmon.out。
./gp-test有了gmon.out,我们就可以使用gprof来剖析我们的代码。
gprof gp-test gmon.out > result.txt我倾向于把输出保存为一个文件'result.txt',以利于将来的比较和分析。
让我们举一个C例子代码,试着找到关键点。
#include
int twoD[10000][10000]={0};
int update_d1()
{
int i,k=0;
for (i=0;i<10000;i++)
twoD[i][1]=k++;
}
int update_d2()
{
int i,k=0;
for (i=0;i<10000;i++)
twoD[1][i]=k++;
}
int main(int argc, char * argv[])
{
int i,j,k=0;
if (argc!=2)
return -1;
if (*(argv[1])=='1')
update_d1();
else if (*(argv[1])=='2')
update_d2();
else
printf("\nInvalid value %s\n",argv[1]);
return 1;
}函数update_d1()和update_d2()循环一样的次数来访问二维数组。设这二维数组为twoD[row][column],update_d1()访问行(row),update_d2()访问列(column)。我们发现这两个函数的运行时间差很大。让我们用gprof剖析一下吧。
gcc -pg -g -o gp-test{,.c}
./gp-test 1
gprof gp-test gmon.out > t1
./gp-test 2
gprof gp-test gmon.out > t2观察剖析结果:
using update_d1() :
% cumulative self self total
time seconds seconds calls ms/call ms/call name
100.52 0.06 0.06 1 60.31 60.31 update_d1
using update_d2() :
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1 0.00 0.00 update_d2update_d1()花费0.06秒,update_d2()少于0.01秒,为什么呢?
让我们再看看这个二维数组twoD[row][column]。这个数组在物理上映射为一整块内存,而不是按行列排列。这内存块以0行1列开始,而第一行第一列实际是第10001块。
想象一下update_d1()怎样访问内存?为了访问每行,你需要越过10000块,而update_d2()可以直接访问那10000块。这就是延迟的原因。
-
原文:What is my Public IP Address?
作者:mysurface
译者:gosman(lianmingchang2008#gmail.com)
来自:http://gosman.blogbus.com
版本:V 1.0.0
时间:2007-8-27
我的公共IP地址是多少?很多网站都提供此类信息。如何在我的脚本程序中使用它们呢?我们可以使用curl和grep。
首先,找几个提供查询公共IP地址服务的网站。
http://www.ipchicken.com/--那只鸡很搞笑。
http://whatismyip.com/--一个男孩在玩VR游戏
http://myip.dk/--很简单的一个网站,但也符合我们的要求其次,先下载该网页再检索(grep)IP。
curl -s http://myip.dk/ | egrep -m1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'没有安装curl的话可以使用wget。
wget -qO - http://myip.dk/ | egrep -m1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'最重要的部分是正则表达式。[0-9]匹配0-9之间的数字,{1,3}匹配前面的模式1到3次。-o打印匹配的部分,-m1在第一次匹配后,grep就停止。
http://whatismyip.org--不用grep,只要curl就行了。
curl -s http://whatismyip.org/好像从http://whatismyip.org/获得公共IP地址比较方便,但是该网站在10分钟内只允许访问三次。
毕竟,我喜欢用正则表达式grep。
-
cjkspace v0.1 发布 - [个人作品]
2007-08-26
cjkspace 是编写LaTeX文档辅助工具,在中英文之间插入波纹号(~),也可以是其他符号如空白或问号等。中英文之间空白的讨论可以参考李果正先生的博文:中英文字间空白。虽然这里说的是中英文,但程序中汉字的定义使用的是Unicode的 CJK 字符集,因此应该也支持日文和韩文。程序对中英文的定义都可以重新定义或扩展,如对德文或法文的支持等。cjkspace使用的是Python的内置编码器,支持大部分的文字编码,如gbk、gb18030、big5等,不指明的话,使用utf8,可以使用``cjkspace -l''查询已知编码。
程序在插入间隔符前,将删除中英文之间的所有空格。在多文件输入时,输出文件名由程序自动在原文件名后加.out后缀,若此时使用`-o'指定输出文件名,程序将予以警告,不会出错。更多信息请看下载文件中的 cjkspace.pdf。
下载(注意为.tar.bz2格式,下载后可能要修改):cjkspace.tar.bz2
-
Debian上安装Compiz Fusion - [Debian]
2007-08-18
Compiz Fusion是Compiz和Beryl合并的结果,很让人期待。前几天翻译一篇文章提到compiz,当时安装没成功,总是重启X Server。当时就怀疑是显卡驱动的问题,今天把显卡驱动重装了一下,总算把Compiz Fusion装上了。注意以下安装过程是针对Debian不稳定版(sid)的,stable用户可能装不上。
1、卸载掉以前安装的compiz和beryl。
2、添加安装源到/etc/apt/source.list
deb http://download.tuxfamily.org/osrdebian unstable compiz-fusion-git
3、下载密钥并安装
$ wget http://download.tuxfamily.org/osrdebian/61B8DB62.gpg # apt-key add 61B8DB62.gpg
4、开始安装
# apt-get update # apt-get install compiz compiz-fusion-plugins-main compizconfig-settings-manager compiz-fusion-plugins-extra compiz-gnome emerald fusion-icon
5、修改/etc/X11/xorg.conf
添加
Section "Extensions" Option "Composite" "enable" EndSection
在Device段添加
Option "XAANoOffscreenPixmaps" "true"
6、重启X Server。
Ctrl+Alt+BackSpace
7、运行Compiz Fusion
菜单Applications->System Tools->Compiz Fusion Icon。
8、Compiz Fusion自启动
想让Compiz Fusion自启动,只要把fusion-icon添加到Sessions即可。
看几张截图:
参考:Compiz Fusion & XFCE4/Sid -
六级过了,太令人兴奋了。这一次和上次一样都没有准备,这次怎么就过了呢??这运气来了挡都挡不住,哈哈!
听力:175
阅读:199
综合:39
写作:88
这一次写作最让我满意,上一次就是栽在写作上的,上次好像才考了30多分,一下子就多出了50多分,不过才怪,哈哈。查分网址:http://cet.etang.com
吉林省考生可以通过身份证号查询准考证号:http://league.nedu.edu.cn/cpic/gznedu/060606/







