diff TaskManager/Changelog @ 10:7aa4c006e4be

*** empty log message ***
author gongo
date Wed, 06 Feb 2008 18:31:30 +0900
parents
children b658f8ca4408
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Changelog	Wed Feb 06 18:31:30 2008 +0900
@@ -0,0 +1,61 @@
+2008-02-06  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>
+
+	* kernel/spe/*.cpp: new と placement new
+	現在、spe kernel のタスクは、切り替わる毎に
+	new/delete を繰り返しています。今はこれでいいんだけど、
+	速度的にも、いずれは直さないといけないと思うわけで。
+	で、予め allocate された領域を利用した placement new を使えば
+	new よりもそれなりに早くなるっぽい。
+	例題として、与えられた回数分 new/delete を繰り返すプログラムと、
+	同じ回数分、placement new したときの速度の比較
+
+	for (int i = 0; i < num; i++) {
+
+	<   task = new Task;
+	<   task->init(i);
+	<   task->printID();
+	<   delete task;
+	---
+	>   task = new(buff) Task; // buff = malloc(BUFF_SIZE);
+	>   task->init(id);
+	>   task->printID(id);
+	}
+	
+	placement new では、delete の必要は無い。
+	その中で新たに allocate してるなら必要かもしれないが。
+	速度比較は以下。no_new が placement new で、ln_new が new/delete 。
+
+	% ./a.out 10 // 10 回
+	no_new:         time: 0.012135(msec)
+	ln_new:         time: 0.003572(msec)
+
+	% ./a.out 100
+	no_new:         time: 0.022453(msec)
+	ln_new:         time: 0.018989(msec)
+
+	% ./a.out 1000
+	no_new:         time: 0.115277(msec)
+	ln_new:         time: 0.136335(msec)
+
+	% ./a.out 10000
+	no_new:         time: 1.056156(msec)
+	ln_new:         time: 1.322709(msec)
+
+	% ./a.out 100000
+	no_new:         time: 10.622221(msec)
+	ln_new:         time: 13.362414(msec)
+
+	% ./a.out 1000000
+	no_new:         time: 109.436496(msec)
+	ln_new:         time: 136.956872(msec)
+
+	10、100 回だと負けてるが、まあ無視しよう(ぇ
+	回数が多くなるにつれて、ほんの少しだが no_new が勝ってる。
+	どうなんだろうね。ちなみに printID を無くすと
+
+	% ./a.out 1000000
+	no_new:         time: 0.008512(msec)
+	ln_new:         time: 27.100296(msec)
+
+	I/O に左右され過ぎ。まあそんなもんだろうけどさ。
+