Path: titcca!kogwy!fxvax!kiuchi From: kiuchi@s5g.ksp.fujixerox.co.jp (Yasuhiko Kiuchi) Newsgroups: fj.lang.lisp Subject: Re: CLOS performance. (In Japanese/Kanji) Message-ID: Date: 28 Mar 90 04:17:56 GMT References: Sender: news@fxvax.fujixerox.co.jp Distribution: fj Organization: Fuji Xerox Lines: 83 In-reply-to: umerin@tc.Nagasaki.GO.JP's message of 23 Mar 90 02:03:30 GMT ちょっと遅くなりましたが、slot-valueとreaderのパフォーマンスの話しです。 Methodのbodyにででくる、slotの名前が分かっているslot-valueは,かなり速 く実行できるのは確かです。ただ現在のPCLでは、クラスの情報を最適化に利 用していない(もちろんstandard-instance[メタクラスがstandard-classのオ ブジェクトを指す]に対しては、御指摘のように、パーミュテーションベクター を用いたslot-valueの最適化は、行なわれています)ので、readerの方が速く なっているようです。また、standard-instanceのreaderならば、こちらも、 methodのbodyに出てくれば、同じ程度に高速化できると思います。 もちろん自分で、readerのmethodを定義したときなどは、最適化できないわけ ですが、そこは、御指摘のようにCLOSではメソッドは、メタオブジェクトなの で、普通のstandard-methodと区別できるので(standard-instanceのreaderは standard-methodのサブサブクラスのstandard-reader-methodになっている)、 大丈夫なわけです。 現在のPCL(Rainy Day Version)で試しに計ってみました。以下にプログラムと 結果を示します。 計った環境は、Lucid3.0で、Sun4/110です、コンパイラは、以下の設定です。 (proclaim '(optimize (speed 3) (safety 0) (space 0) (compilation-speed 0))) ---------- ;;; -*- Mode:LISP; Package:PCL; Base:10; Syntax:Common-lisp -*- ;;; (in-package 'pcl) (defclass measure () ((a :initform nil :accessor measure-a))) (defvar *measure-objects* (let ((objs (list (make-instance 'measure) (make-instance 'measure) (make-instance 'measure)))) (rplacd (last objs) objs) objs)) (defun reader-test (x) (let ((objs *measure-objects*)) (time (dotimes (i x) (measure-a (pop objs)))))) (defun slot-value-test (x) (let ((objs *measure-objects*)) (time (dotimes (i x) (slot-value (pop objs) 'a))))) (defun reader-tests (x) (reader-test x) (slot-value-test x)) ---------- PCL> (reader-tests 10000) Elapsed Real Time = 0.21 seconds Total Run Time = 0.21 seconds User Run Time = 0.21 seconds System Run Time = 0.00 seconds Process Page Faults = 0 Dynamic Bytes Consed = 0 Elapsed Real Time = 0.95 seconds Total Run Time = 0.93 seconds User Run Time = 0.93 seconds System Run Time = 0.00 seconds Process Page Faults = 0 Dynamic Bytes Consed = 0 NIL PCL> #.+ Elapsed Real Time = 0.43 seconds Total Run Time = 0.23 seconds User Run Time = 0.23 seconds System Run Time = 0.00 seconds Process Page Faults = 0 Dynamic Bytes Consed = 0 Elapsed Real Time = 1.11 seconds Total Run Time = 0.92 seconds User Run Time = 0.92 seconds System Run Time = 0.00 seconds Process Page Faults = 0 Dynamic Bytes Consed = 0 NIL PCL> ---------- Yasuhiko Kiuchi Fuji Xerox STDC kiuchi@s5g.ksp.fujixerox.ac.jp / Kiuchi.pa@Xerox.com ----------