« 2007年02月 | メイン | 2007年04月 »

2007年03月 アーカイブ

2007年03月12日

ミスキャッシュのペナルティ

現在のプロセッサ(CPU)はメモリ(DRAM)よりも高速に動作できるため、プロセッサ内部のキャッシュ(cache)にメモリの内容の一部をコピーすることで、メモリの速度の限界よりも速く動作できるようになっています。しかし、アクセスの仕方によってはキャッシュが有効に機能せず、性能を大きく落としてしまいます。

以下は、後述するプログラムを実行した例です。「a」をつけるとキャッシュに有利なアクセス方法になり、結果として速度が5倍弱になっています(環境によっては10倍近くになるものもありました)。

[kimoto@localhost test]$ time ./cachetest

real    0m15.528s
user    0m15.457s
sys     0m0.008s
[kimoto@localhost test]$ time ./cachetest a

real    0m3.669s
user    0m3.644s
sys     0m0.008s
[kimoto@localhost test]$

この違いは、メモリのアドレスによってキャッシュできない組み合わせがあることにより生じます。つまり、キャッシュの全容量が有効に利用できるわけではないということです。一般のプログラミングで考慮することはまず不可能ですが、プロセッサにはいろいろなタイプの限界があることを体験することができます。

cachetest.c


typedef	int	W;
typedef	unsigned int	UW;
typedef	short	H;
typedef	unsigned short	UH;
typedef	char	B;
typedef	unsigned int	UB;


#define	ARRAYSIZE	256
static	struct	{
	UW	a;
	UW	b;
	UW	c;
	UW	d;	/* 16 bytes = 1 cache-line */
} array[ARRAYSIZE * ARRAYSIZE] = {{1}};

int	main(int ac, char **av)
{
	W	i, j, mul;
	
	mul = (ac > 1)? (ARRAYSIZE + 1) : ARRAYSIZE;
	for (i=0; i<1000000; i++)
		for (j=0; j<ARRAYSIZE; j++)
			array[mul * j].a++;
}

/* end of file */

CygwinまたはLinuxで「gcc -o cachetest cachetest.c」を実行すると、cachetestというプログラムができます。これを、「./cachetest」または「./cachetest a」として実行します(aをつけないとキャッシュに不利な処理になります)。実行時間を計りたい場合は、「time ./cachetest」または「time ./cachetest a」としてください。

2007年03月20日

日本語のWeb page には多種多様の charset が使われている

文字コードを判定して処理するのは大変だ。 実際に get したページから調べてみたら、 次のような charset が使われていることが分かる。 () 内は、調査対象内の、出現回数である。

Shift_JIS (1088235)
shift_jis (301276)
x-sjis (97742)
SHIFT_JIS (64097)
EUC-JP (64089)
utf-8 (48552)
UTF-8 (30398)
euc-jp (28628)
iso-2022-jp (5697)
x-euc-jp (2485)
Shift-JIS (2441)
shift-jis (2210)
ISO-2022-JP (1567)
Shift_jis (1292)
Shift-jis (1223)
shift_JIS (1104)
EUC-JP' (1066)
Shift_Jis (694)
EUC_JP (548)
"Shift_JIS (484)
SHIFT-JIS (465)
SHIFT_JIS' (463)
sjis (245)
Shift_JIS' (243)
Shift-Jis (222)
EUC-jp (218)
"shift_jis (176)
SJIS (171)
"x-sjis (123)
euc-jp' (117)
euc (115)
EUC (113)
"EUC-JP (95)
s-jis (83)
shift-JIS (75)
euc_jp (74)
Sift_JIS (68)
shift-sjis (66)
shift_jis' (66)
x_sjis (63)
ShiftJIS (63)
"euc-jp (57)
X-SJIS (53)
x-euc (46)
utf8 (44)
X-EUC-JP (44)
csShiftJIS (40)
utf-8' (40)
MS932 (39)
SJIS-JP (38)
Shift (37)
x-sjis' (34)
Sift-JIS (33)
X-MAC-JAPANESE (30)
x_JIS (29)
"iso-2022-jp (29)
"UTF-8 (28)
windows-932 (28)
"shift_js (27)
UTF-8' (26)
Shit_JIS (25)
S-JIS (24)
"shift-JIS (23)
"SHIFT_JIS (23)
JIS (22)
Shift_JIS/ (22)
x-sjis-jp (22)
x-jis (21)
"Shift-JIS (19)
"EUC_JP (18)
"x-euc-jp (18)
iso-2022-JP (18)
"utf-8 (16)
s-sjis (15)
sift_jis (15)
"shift_JIS (15)
x-SJIS (14)
Shift-sjis (14)
shift-jp (13)
EUC-JIS (13)
"S-JIS (12)
x-2022-jp (12)
shift_js (11)
x-EUC-JP (11)
sift_Jis (11)
Shift_JTS (11)
x-xjis (11)
"shift-jis (10)
shift-JS (10)
Shft_JIS (10)
x_jis (9)
ECU-JP (9)
Sift-jis (9)
UTF8 (9)
s_jis (9)
Shift_JIS&quot (8)
xsjis (8)
x-Shift-JIS (8)
UNICODE-1-1-UTF-8 (8)
Shifm_JIS (8)
'shift-jis' (8)
"EUC (7)
EUC-J (7)
Shift_JiS (7)
Shif (7)
shift_is (7)
"Shift_Jis (7)
shift_jis,Unicode (7)
UTF_8 (6)
euc-jis (6)
euc.jp (6)
shift_Jis (6)
euc-j (6)
shift--jis (6)
x_sJIS (6)
iso-2022-ip (6)
x-euc-jp' (5)
'x-sjis (5)
windows-31J (5)
"Windows-31J (5)
Shift_ (5)
charset=Shift_JIS (5)
MS_Kanji (5)
x-sjis,shift_jis (5)
shift?Qjis (4)
x-sjij (4)
shft-jis (4)
eur-jp (4)
'x-euc-jp' (4)
x-eucjis (4)
ISO2022-JP (4)
SJis (4)
"SHIFT-JIS (4)
Shift JIS (4)
X-sjis (4)
iso-2020-jp (4)
IS0-2022-JP (4)
charset=shift_jis (3)
shft-jis' (3)
Shift_JIs (3)
Shft-JIS (3)
Shift_SJIS (3)
Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS (3)
Shif-JIS (3)
euc=jp (3)
shift_sjis (3)
Euc-jp (3)
x_euc_jp (3)
Shift_JIF (3)
sift-jis (3)
iso-2202-jp (3)
shiftjis (3)
SHIT_JIS (3)
x=sjis (2)
Shift_JP (2)
S_JIS (2)
shigt_jis (2)
ecu-jp (2)
shif_jis (2)
iso2022-jp (2)
ISO (2)
SHIFT_JS (2)
shift_JIs (2)
Shift_JIS/x-sjis (2)
Shit-JIS (2)
"ISO-2022-JIS (2)
Arial (2)
ShIFt_JIS (2)
charset=EUC-JP (2)
EUC_JIS (2)
eShift_JIS (2)
EUC-Jp (2)
EUS-JP (2)
euc-JP (2)
shift_jis,x-sjis (2)
=Shift_JIS (2)
"shfit_JIS (1)
charset=ISO-2022-JP (1)
JIS-JP (1)
iso-2022 (1)
X-EUC (1)
Shoft-jis (1)
SHIFT-JIS' (1)
ishift_jis (1)
x-SjiS (1)
Shift/JIS (1)
SHIFT_jis (1)
csISO2022JP (1)
shif-jis (1)
UFT8 (1)
EUc-JP (1)
shift_jif (1)
shift (1)
shift_jis\ (1)
jis (1)
x-Shift_JIS (1)
SHIFT-JP (1)
X-SjIS (1)
sjis' (1)
shift_jIS (1)
charset=euc-jp (1)
Sshift_JIS (1)
Shit_-JIS (1)
x-euc-j (1)
'Shift_JIS (1)
UTS-8 (1)
Shift_JISTrue (1)
'shift_jis (1)
shift_iis (1)
shift_JIS' (1)
shiftJIS (1)
shift-JP (1)
jis_shift (1)
iso-UTF-8 (1)
SIFT_JIS (1)
Shift_sjis (1)
Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS (1)
x-sJIS (1)
Shift_JIS'/ (1)
euc_JIS (1)
'EUC-JP (1)
shift-ji (1)
iso-2022-jpp (1)
ISO-2022-jp (1)
Shift_eIS (1)
ShiftIS (1)
shift-_JIS (1)
x-shift-jis (1)
SGIFT_JIS (1)
x-euc-jis (1)
euc-jp\ (1)
EUC-JP\ (1)
EUCJP (1)
Sift-Jis (1)
Shif_JIS (1)
shist-jis (1)
Shift_JIS\ (1)
windows-31j (1)
Shift_jIS (1)
Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS (1)
Shift_EUC (1)
Utf-8 (1)
Chift_JIS (1)
EuC-JP (1)
Shift_JIS?h (1)
Shiht-JIS (1)
IS0-2022-JIS (1)
ShifT_JIS (1)
Shift_JIS8 (1)
x-euc.jp (1)
shift-jis/x-sjis (1)
Shift_JIS=Shift_JIS=Shift_JIS (1)
EUP-JP (1)
Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS=Shift_JIS (1)
iso2022-JP (1)
-UTF-8 (1)
x-s-jis (1)
Shift_JIS=Shift_JIS (1)
Shift2_JIS (1)
x-sjis\ (1)
euc-jt (1)
STHft_JIS (1)
"Shift-JIS&quot (1)
"shift_sjis (1)
"x-jis (1)
SWhift_jis (1)

2007年03月27日

Googleブログ検索の特許


Googleブログ検索の特許で明らかになったブログの評価を決定する12の要因
http://blog.fkoji.com/2007/03270011.html

開発製品

jirologos.gif

About 2007年03月

2007年03月にブログ「三田ブログ」に投稿されたすべてのエントリです。新しい順に並んでいます。

前のアーカイブは2007年02月です。

次のアーカイブは2007年04月です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type