%  Copyright (C) 1997 Haruhiko Usa  < usa@logos.t.u-tokyo.ac.jp >
%						November 17, 1997


			   ץ 

 γ

  John Horton Conway  life game ®׻⥸塼Ǥ.
Ūʥ롼¤, Ϥ on Υ뤬ĤȤϼǤ on, 
ʬ on Ǥ, Ϥ on Υ뤬 2 ĤȤϼǤ on, Ȥ
֤.  Τˤ, ƤΥ뤬ʬμϤ on 
Υ뤬Ĥ뤫, ƼʬȤ on/off ΤǤ뤫ΤäƤ
褦ˤФ褤.  , off ΥμϤ on Υ뤬ʤϷ׻
ɬפʤΤ, 륻뤬 on->off, off->on ѲȤ˼Ϥ 8 
Υ message , 줾Υ뤬Ϥˤ on ΥθĿ򹹿
褦ˤ, פʷ׻ȤǤ.

  ϤΥο (0-8) , on/off (0/1) ξ碌 4+1 bit = 5 bit 
ǳƥξ֤ɽǤΤ, եȥӥåȤѤ, ʤȤ 5 Ĥ
ξ 1 Ĥ KLIC ˳ǼǤ.  , X  5 ĤΥ
 1 Ĥ pack ˤޤȤ.  pack  pack(X,Y,A) ( A  5*5 bit = 25 bit 
ݻ ) Ȥ 3 ä¤ˤʤ.   pack Ѥ, 
ΰǤǤʤ, 8 äƤ message  4 ٤˺︺
, Ρ®ȤȤ, Ρɴ֤̿︺Ǥ.

   pack  -(2^20) < (X,Y) < 2^20 ʿ̤֤ΤǤñǤ뤬, 
ΰΤ˥˥ϥåԤʤ.  ϥåɽƥΡɤѰդ,

	 pack(X,Y,A) ν @node((X/W) mod P). % W: ʬ, P: Ρɿ

Τ褦, pack  X ɸȤ˳ƥΡɤΥϥåɽ֤褦ˤ
, (KLIC ϰ) ̵¤礭ʿ̤ʬ֤뤳ȤǤ.
  ʬʿ̤Ѥƥ饤ե׻Ԥʤˤ, ܤ
Ρɴ֤Ƕ (message) Ф褤.  ʬ򶹤٥Х
ɤʤ뤬, Ρɴ̿ä뤿, ºݤ׻Ǽ¸Ԥʤ,
W=4 (4x5 = 20 cell ) ʬñ̤ȤΤǤɤȽǤ.  㤨 4
pack  4 Ρɤ pack ʬۤ,

	  Node 0     Node 1     Node 2     Node 3       ( pack  X ɸ )
	| 0... 3|  | 4... 7|  | 8...11|  |12...15|
	|16...19|  |20...23|  |24...27|  |28...31|
	    :          :          :          :
	    :          :          :          :

Τ褦ˤʤ.  ˤȥΡɴ̿Ūʤ, ٥Х󥹤
Ǥ, 10 node ׻ 3.5  4 ٤ι®ã줿.

  η׻λ, ƥΡɤ pack  5x1 ɽ̾ɽ
ᤷ˲, life_sort ⥸塼ΥޡȤˤäԤʤ, 
̤Ϥ.



 ưǧԤʤäƥγ

ȯưǧ˻Ѥƥ:
	 Ultra Enterprise E/4000
		CPU:	UltraSPARC 167MHz * 10
		Memory:	1248M
		Node:	1-10
		OS:	Solaris 2.5.1
		GCC:	2.7.2.1
		KLIC:	3.001



 ƥȥǡνפ¹Ի

  󶡤줿ƥȥǡϤ٤ƿð (15 msec - 2500 msec) Ǽ¹Ԥ
λ.  ޤ, ¹Ի֤ŪĹ r.life, expo.life ǤϰʲΤ褦
ˤ®ٸ夬ǧ줿 (N Ρɿ).

r.life
	Ρɿ:	¹Ի
	N=1:		Response time is 1866 msec
	N=8:		Response time is 1280 msec

expo.life
	Ρɿ:	¹Ի
	N=1:		Response time is 2562 msec
	N=8:		Response time is 2218 msec

ޤ, ˼褦expo.life  300 ¹ԤȤˤ, 10 ¹
Ȥ 3.5 ܤι®ã줿.

expo.life  300 ¹:
	Ρɿ:	¹Ի                     (N=1 Ф®)
	N=1:		Response time is 21672 msec  (1.0)
	N=2:		Response time is 16687 msec  (1.3)
	N=4:		Response time is 10582 msec  (2.0)
	N=8:		Response time is 6483 msec   (3.3)
	N=10:		Response time is 6041 msec   (3.5)

, life-sample-970731/game/examples/blockpusher.l  KL1 ѤѴ,
1000 ¹Ԥ, ʲΤ褦, 10 ¹ԤȤ, 4 ܤ
®ٸ夬줿.

blockpusher.life  1000 ¹:
	Ρɿ:	¹Ի                     (N=1 Ф®)
	N=1:		Response time is 28751 msec  (1.0)
	N=2:		Response time is 20117 msec  (1.4)
	N=4:		Response time is 11806 msec  (2.4)
	N=8:		Response time is 8020 msec   (3.6)
	N=10:		Response time is 7013 msec   (4.1)



 르ꥺ, ץߥ󥰾ä˹פ

  Ϥ, ®Τ 5x1 pack ˤĤ, , Ψɤ󲽤Τ
ʬʿ (ʬ)ˤĤ, Ǹ decode ΤΥޡȤˤ
.


 5x1 pack Ѥǡΰ̤ message κ︺ 

  ϤΥο 0-8 ʤΤ, on/off ξȲ碌 4 + 1 bit = 5 bit 
ǳƥξ֤ɽǤ.  KLIC  28 bit or 60 bit ʤΤ, ӥåȥ
եȤԤʤ, ʤȤ 5 ĤΥξ򣱤Ĥ KLIC ˳ǼǤ.
, X  5 ĤΥ 1 Ĥ pack ˤޤȤ뤳Ȥˤ.   pack 
, X := X_orig/5 (X_orig  pack  X ɸ)ʤ X ɸ Y ɸ, 
 25 bit ξäȤ 3 ǹǤ.
  Ȥ, X_orig < 0 ΤȤ, 㤨, [-5 -4 -3 -2 -1]  pack Ȥ
ñ X_orig/5 , [-1 0 0 0 0] Ȥʤ褦, οФƤñ
ʽ軻ǤбǤʤ.  , -(2^20) < X_orig < 2^20 Ȥ
¤ΤȤ, encode κݤ X_orig + X_SHIFT (X_SHIFT > 2^20) Ȥο
ѴƤ pack ԤʤȤˤ.  encode ʹߤγǤ,

	X := (X_orig + X_SHIFT) / 5

ʤ X (>0) Ѥ.  pack ϰʲΤ褦ʹ¤ˤʤ.

	pack(X,Y,A)
	A  = | A4 A3 A2 A1 A0 |               ( A0...A4 Ϥ줾 5 bit )
	        ( 5*5 bit = 25 bit , ӥåȥեȤѤ A ˳Ǽ )
	Ai = ((on/off (1 bit)) << 4) \/ (Ϥˤ on Υο (4 bit))

㤨, [p(10,1), p(11,1), p(13,1)]  pack ,  (Ϥ on 
ο = 0) ,

	pack(10/5, 1, (16<<(0*5) + 16<<(1*5) + 16<<(3*5)))     % 16=10000
	                                  (life_encode:make_board1/8 )

Ȥʤ.  decode Ǥ, X_out = X*5 + i (0=<i<5) Ȥ X ɸǤ.
  ʲ, pack  X  5 ĤΥ Ĥι¤ pack(X,Y,Z) ˰̳
ǼΤؤȤˤ.

  pack Ѥ, pack  5 , üȱüʳ 3 ĤΥ뤬 
on->off / off->on ѲȤ, ΥκƱ pack ˳Ǽ
ƤΤ, 岼 2 Ĥ pack  message Ǥ褤.  ä, 
ˤ message  2/8 = 1/4 ˺︺Ȥ.
  㤨, 󶡤줿ץ expo.life , ۤƤΥ뤬幹 
on->off, off->on ѲƤ뤬, pack Ѥ,   5700 ĤΥ
  3400 Ĥ pack ˳Ǽ, ʿ 5700/3400  1.7 ĤΥ뤬 1 Ĥ 
pack ˳ǼƤ뤿, pack Ǥϥ뤬ʬۤƤȹͤ,

	ü˥뤬Ψ:  Pa = 2 * 1.7/5
	üʳ˥뤬Ψ:  Pb = 3 * 1.7/5

ä, message Ŀδͤ,

	3 (ؤ message ) * Pa + 2 (岼ؤ message ) * Pb
	= 4.08

Ǥ, pack Ѥ뤳Ȥ, 8 äƤ message  ʿ 4 
ɤʤΤ, ΥȤ 1/2 ٤˺︺.  message 
뤳ȤǥΡ(༡)®ȤȤ, Ρɴ֤̿︺
ǤȤ礭.


 ϥåѤʬʿ (ʬ) 

  -(2^20) ... 2^20 ʿѰդ,  pack 򤳤ʿ̤֤Τ
ǤñǤ뤬, ΰ󤹤뤿˥˥ϥåԤʤ.  ,
X, Y ɸϤȤʤΤ, X, Y ɸβ̥ӥåȤ򤽤ΤޤޥϥåͤȤ
뤳ȤǤ.  η׻ȤϥϥåɽΥ˰¸ʤ
, ϥåɽ礭ϥåͤξͤ뤬, ΡɤΥå
˼ޤ٤礭ȤΤǤΨɤȹͤ.  , 
ɽΥѲƼ¸, ܥץǤϥϥåɽ礭 
2^12 (= 4 K) Ȥ.  , ϥåؿ

	H := ((X/\63)<<6) \/ (Y/\63)

Ȥ.  ޤ, ϥåɽ B[2^12] γ B[H] ϰʲΤ褦ʹ¤ˤʤ.

	B[H] = [pack(X,Y,A), pack(X',Y',A), ...]

ΥϥåɽƥΡɤѰդ,

	 pack(X,Y,A) ν @node((X/W) mod P). % W: ʬ, P: Ρɿ

Τ褦, pack  X ɸȤ˳ƥΡɤ pack ʬۤ, (KLIC 
ϰ) ̵¤礭ʿ̤ʬ֤뤳ȤǤ.  㤨 8 pack 
 4 Ρɤ pack ʬۤ (W=8, P=4),

          Node 0     Node 1     Node 2     Node 3       ( X ɸΤɽ )
	| 0... 7|  | 8...15|  |16...23|  |24...31|
	|32...39|  |40...47|  |48...55|  |56...63|
	    :          :          :          :
	    :          :          :          :

Τ褦ʬ.  ʬʿ̤Ѥƥ饤եԤ
ˤ, ܤΡɴ֤Ƕ (message) Ф褤Τ,

  ΥΡɤȤ̿ʤ
  ̤̿Ūʤ

Ȥä.  ̿, Ρɴ֤ǶͭƤ륹ȥ꡼ؤν񤭹 
(export)ɤ߹ (import) ˤäƹԤʤ.  Ū٤ʬΤ, 
٥Х󥹤ʤǽϤ뤬, ʬʬ٤, Ѿ϶
ʬۤȸʤƤ褤.  ʬ򶹤٥Х󥹤ɤʤ뤬, Ρ
ɴ̿ä뤿, ׻ǹԤʤä¸Ȥ, Ŭʬ
ꤷ.  η, ܥץǤ 4 pack  (4x5 = 20 cell ) ʬ
ñ̤Ȥ.


 ޡȤˤĤ 

ɽ˥ϥåɽѤƤ뤿, νϤԤʤˤǡ
򥽡Ȥɬפ.  ϥå夵줿ǡ, ۤ󤵤Ƥǽ
⤤ΤǥåȤǤ N^2 ΥȤͽۤ.  ϥ
Ȥ¤˺줺, ꤷ NlogN Ӥ󤹤ޡȤ
Ѥ.  ޤ, life_sort ⥸塼 mergesort_init ΥꥹȤ

	[ [ ,  ], [ ,  ], ... ]

Τ褦˽.  mergesort(L,M)  L ϾΤ褦, ꥹȤΥꥹ
Ǥ.  merge_pairs(L,R) ϥꥹ L (ꥹ)ƬˣĤ
ޡƤ.  ʤ, mergesort  merge_pairs Ƥ֤Ӥ, ܥȥॢ
פ󤬿ʹԤƤ.



 ¾(KLIC ƥࡢKL1 ͤ˴ؤ˾ʤ)

  ܥץǤϥΡɴ̿ message ͢С͢ȤΤ˰ռ
뤬, KL1 ץξǤϥΡɴ֤ǶͭƤ륹ȥ꡼ؤν񤭹, 
ɤ߹ߤǼ¸, KL1 λȤ䤹´뤳ȤǤ.  ȿ,
KL1 Ǥ, ФΥޥϤΤ, C #define ޥ
դƤʤΤ, ®٤ͥ褹, 㤨Хϥåؿѥ᡼ 
(ܥץǤ %% hash, %% W ʤ %%  ʬ) भФˤʤäƤ
ޤ, 㴳ɤߤˤץˤʤäƤޤä.


--------------------------------------------------------------------------
    ɧ    رطϸ
                E-Mail: usa@logos.t.u-tokyo.ac.jp

