存档

‘study’ 分类的存档

【整理】李开复-如何制作好的ppt

2011年10月30日 sigma 8 条评论 9,405 views

今天在李开复先生微博看到的,在这里整理下,供自己和大家以后查阅。

如何写PPT标题
原文:http://weibo.com/1197161814/xv8FTCsYn

  1. 每页标题尽量不超过10字,涵盖该页主旨。
  2. 标题一行写完,绝对不可换行回车,这样听众眼睛要回车,增加认知负荷。
  3. 让你的题目讲你的故事,就是当你把所有的题目连串起来,只读题目,就可以大致了解你的演讲。这样那些专注的听众用标题辅助听你演讲就可,不专注的也会看进去一些。

阅读全文…

整理了下ISCA2000-2011所有论文的摘要

2011年8月20日 sigma 1 条评论 9,225 views

这周四,为了解近些年来的研究,需要看大量的论文,而在大量论文中找出最有价值的,我感兴趣的文章,除了标题外,就是摘要了。由于一篇一篇的看摘要很累(其实我有体系结构方面近些年来所有文章的全文,但一篇一篇打开看还是比较郁闷),于是突然想到可以先把摘要整理出来,这样以后过文章也方便一些。于是花了一天多差不多两天把ISCA2000-2011的所有文章的摘要整理出来个doc,后来突然想到这东西也许对别人有点用,于是又把他转化html,放到了网上。链接地址如下:

http://www.sigma.me/isca/

另外,在整理中,用到了几个工具和网站,在这里推荐下:

  1. 由于我是在linux下整理的,所以没用word,也不想用openoffice,用的是google docs,其实这段时间用google docs挺多的,发现还是挺不错的,基本的功能都有,多余的功能也没有。并且协作也很方便,存在互联网上,想看直接打开,不用再本地找来找去。
  2. 第二个,这个是强力推荐的,不过烟酒僧应该都知道的,那就是DBLP,上面搜文章还是挺方便的,虽然不能搜到全文,但按作者,按会议都有排列,非常方便找某一领域或者某一个会议的文章(这个工具我是大三从师兄那里知道的,但是还是不觉得咋的,现在越觉得好用)。我上面这个的文章的摘要列表就是通过DBLP那里得到标题,并且得到doi链接,从而手动把摘要搞出来的(本来想写个简单的爬虫的,但是发现doi上的摘要是通过js抓取的,貌似还不能直接通过fetch-url实现),没有doi的,就直接google。
  3. 最后一个,就是我把doc转化成html所用的工具Doc2html。本来想把这些文档直接用google docs转成HTML,但是每次转出来的html都很笨重,不简洁,很不爽。之后尝试用word的另存为功能将doc转化成html,可是,转出来还是不理想。于是就只好放狗搜,很快找到一个不错的工具,doc2html,试用了一下,转出来的html很干净,没有多余的东西,感觉很不错。Doc2html的链接是:http://ginstrom.com/software/doc2html/

这篇日记就写到这了,算是这周的任务,还得赶紧把这些整理出来的摘要扫一遍,从而找出想看的文章。现在感觉越来越难每周坚持写一篇日志了。不过无论如何,我还是会坚持的。

分类: study 标签: , ,

Scanf通过%x(%d)读入char出现栈溢出的诡异问题

2011年7月11日 sigma 4 条评论 8,232 views

昨天使用scanf(fscanf)碰到一个很诡异的问题,问题抽象出来是这样的:

有如下代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	FILE *fin;
	int i;
	unsigned char a[8];
	fin=fopen("test_file","r");

	for(i = 7; i >= 0 ; i--)
//	for(i = 0; i <= 7 ; i++)
	  {
		  fscanf(fin,"%x",a+i);
		  printf("%2x ",a[i]);
	  }
	printf("\n");
	for(i = 7; i >= 0 ; i--)
	  {
		  printf("%2x ",a[i]);
	  }
	printf("\n");
	fclose(fin);
	return 0;
}

其中test_file的内容是:11 22 33 44 55 66 77 88 99 阅读全文…

分类: study 标签: , ,

CMP读书笔记四:降低单任务的延时(Improve Latency)

2011年3月31日 sigma 4 条评论 7,138 views

上一篇关于提高处理器吞吐量的文章讲到,CMP以及SMT技术可以大大提高处理器的吞吐量,提高处理器的并发处理器能力,从而分别提高处理器的峰值和效率。

但是,现在的很多串行程序,还不能直接从CMP以及SMT技术中获利。并且,这些程序中有很多都又对延时很敏感,比如说各类实时应用。对于这些程序,提高单个任务的性能,降低延时就很有必要。在CMP出现之前,各类的复杂的处理器结构的基本目标都是这个,包括超标量,提高主频等,其基本思想都是提高单处理器核心的性能。但是,当多核时代来临后,出现了一些新的方法,最常见的有:辅助线程(Helper thread),猜测多线程(thread-level speculation,TLS),核融合(core fusion)等技术,下面对这些技术进行简要的介绍。

辅助线程技术是通过在任务主线程外的加一个辅助线程(helper thread),辅助线程要比主线程跑地快一点,但是可以跳过一些代码,功能主要是为主线程完成一些预取操作,比如将数据从主存搬到cache上,从而降低主线程的cache miss等,提高主线程(也即任务)的执行速度。

猜测多线程技术是通过在执行过程中将一些原来的串行比较容易并行化的代码(如循环,分支,不同函数等)的动态地分配给几个线程执行,从而提高程序的执行速度,但是猜测多线程会带来额外的消耗,一是线程分配的消耗,另外就是猜测失败重新执行的消耗。一个好的猜测多线程机制必须解决以下几个问题:

  • 线程间通信:如何拆解程序,使不同线程之间的通信尽可能少,同时如何通信,使得线程间通信效率尽可能高。
  • 检测处理各种相关:为了保证程序执行的正确性,必须检测线程间的各种相关并进行处理,包括读后写(RAW),写后读(WAR),写后写(WAW)相关。不合适的线程分配会导致大量相关,从而导致线程间大量依赖导致堵塞。不明智的相关处理器机制会导致堵塞的时间很长,从而程序效率低下。
  • 猜测失败的处理:既然是猜测,难免就会失败。失败后的恢复或者重新执行的机制需要保证系统的所有相关状态要回到猜测执行之前的状态,这样才能保证安全和正确。
  • 猜测线程机制:猜测线程需要考虑各种因素:由于每个线程的buffer size有限(在每个线程提交之前,为了保证正确性,所有执行都需要buffer下来),导致每个线程的长度不能太长。必须减少线程间的真依赖,减少堵塞。多长的时间进行check,何时进行重新执行等等。

核融合是指硬件将多个核的各个功能部件,如取值,执行等融合成一个核,就像superscale那样,从而提高串行程序的执行速度。这东西貌似比较新,wikipedia都还没有相关内容,想了解的话,可以自己google scholar “Core fusion”。

最后,附上一张TLS的示意图,图来自《Chip Multiprocessor Architecture:Techniques to Improve Throughput and Latency》一书:
猜测多线程TLS示意图

CMP读书笔记三:提高吞吐量(IMPROVING THROUGHPUT)

2011年3月31日 sigma 没有评论 9,126 views

随着互联网的发展,web服务器成为了一个很大的应用。和传统的科学计算以及桌面应用不同,web服务器对延时并不是很敏感,因为网络传输延时往往大于服务器端的计算延时。相反的,对于web服务器,提高并发处理能力倒显得极端重要,因为现在的web站点动辄就是几万人,甚至上千万人在线(当然,对于这种系统,往往不是一个服务器,而是服务器分布在各地,导出都是CDN),因此,提高web服务器的处理器吞吐量就显得极端重要(记得计算所所长李国杰院士去年提过高通量计算,不知道是不是这个意思)。

提高处理器的吞吐量的基本思路很简单,那就是提高处理器的并发线程数,而提高处理器的并发线程数,方法又有两类,同步多线程(Simultaneous MultiThreading,SMT)以及多核(Multicore)。

传统的处理器核心只能并发执行一个线程,而一个线程内部往往会由于相关(数据相关,控制相关)导致流水线堵塞,从而导致处理器的部件不能充分利用(包括取值部件,功能部件等)。为了减少由于线程内的依赖所造成的堵塞,提高单个处理器核心的吞吐量,出现了在一个处理器核心同时执行几个线程的技术(因为线程间的依赖比线程内要少很多),即同步多线程技术,Intel又叫超线程技术(Hyper-Threading Technology,HT)。

同步多线程(SMT)是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)的方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(CPI)计数较高的工作负载创造性能优势。 同步多线程使您可在同一处理器上同时调度多个线程,从而充分利用处理器的各个部件,提高性能功耗比。下面是一副不同粒度的多线程技术的比较,同时从图中也可以基本看出同步多线程的基本原理。
同步多线程示意图

很多厂商,包括IBM,Sun,Intel的处理器都应用了同步多线程技术,MIPS昨天也发布了代号为神童(Prodigy)的64位同步多线程处理器

另外一方面,多核也是提高并发线程数的好方法,但是多核会增加大量的面积及功耗,从而大大降低性能功耗比,而性能功耗比对于24小时在线的web服务器是至关重要的,因此,不能简单的在超标量核心上堆积现有的复杂的超标量(Superscale)处理器核心。

考虑到web应用对延时不敏感的特点,可以将每个处理器核心设计的尽量简单(但可以保持其同步多线程的能力),从而提高处理器核心数目同时,对面积和功耗并不会提高,同时可以大大的提高处理器处理并发线程数(等于处理器核心数X每个核心的多线程数)的能力,提高处理器的吞吐量,并且提高性能功耗比。下面这幅图比较了超标量的多核处理器和简单的多核处理器的吞吐量和功耗的比较,可以看到,简单的核心优势极其明显。
标量的多核处理器和简单的多核处理器的吞吐量和功耗的比较

在设计web服务器处理器方面,Sun做到了极致,其Niagara系列处理器绝对是这个领域的巅峰之作(可惜一心做技术的sun却被一心赚钱的oracle收购了!)。

无觅相关文章插件,快速提升流量