COMMON LISP JP > Archives > 2009/05/30

2009/05/30 07:04:46 UTCgaraemon
#
もうeuslispいやだ...SBCLへ移行中ですwww
#
そういえば質問があります.
#
gsll http://common-lisp.net/project/gsll/ なんですが
#
SBCLで使っていて、異常に遅い気がします
#
CL-USER> (time (dotimes (i 100100) (make-marray 'single-float :dimensions 3)))
Evaluation took:
  5.782 seconds of real time
  5.450075 seconds of total run time (5.320569 user, 0.129506 system)
  [ Run times consist of 0.272 seconds GC time, and 5.179 seconds non-GC time. ]
  94.26% CPU
  16,109,013,564 processor cycles
  712,726,448 bytes consed
#
ふつうのarrayだと
#
CL-USER> (time (dotimes (i 100100) (make-array 3 :element-type 'single-float)))
Evaluation took:
  0.000 seconds of real time
  0.000040 seconds of total run time (0.000039 user, 0.000001 system)
  100.00% CPU
  101,041 processor cycles
  0 bytes consed
#
なんでこんなに遅いんでしょ?
#
CでGSL使うのはもちろんもっと速いです
#
CL-USER> (disassemble (lambda () (make-marray 'single-float :dimensions 3)))
; disassembly for (LAMBDA ())
; 1227D04E:       8B1518D02712     MOV EDX, [#x1227D018]      ; 'SINGLE-FLOAT
                                                              ; no-arg-parsing entry point
;       54:       8B3D1CD02712     MOV EDI, [#x1227D01C]      ; :DIMENSIONS
;       5A:       BE0C000000       MOV ESI, 12
;       5F:       8B0520D02712     MOV EAX, [#x1227D020]      ; #<FDEFINITION object for MAKE-MARRAY>
;       65:       B90C000000       MOV ECX, 12
;       6A:       FF75F8           PUSH DWORD PTR [EBP-8]
;       6D:       FF6005           JMP DWORD PTR [EAX+5]
;       70:       0F0B0A           BREAK 10                   ; error trap
;       73:       02               BYTE #X02
;       74:       18               BYTE #X18                  ; INVALID-ARG-COUNT-ERROR
;       75:       4D               BYTE #X4D                  ; ECX
2009/05/30 09:36:15 UTCg000001
#
あれー、どこが違うんだろう、と思ったらgsl:make-marrayなんですねw 詳しい人いないかなー
#
とりあえず、Clozureでも同じような感じでした
2009/05/30 10:40:24 UTCzick
#
formatのローマ数字のオプションは「MacLISP時代、学生だったGLSが夏休みにふざけて組み込んだ」説をずっと信じてました。
#
実は違ったりするのか...
#
formatネタ
#
http://blog.bugyo.tk/lyrical/2009/05/clformatbrainfck.html
#
循環リストで ~? を使うと色々できそうな気がしました。
2009/05/30 14:00:25 UTCg000001
#
おお! これは凄い!
#
formatのR指示子とGLSの関係については目下全力で調査しておりますw 噂の出所は私だと思います、すいませんw
#
formatについてしらべていて、古いMacLISPの記録を眺めているのですが、doとdefunが30歳になってました
#
3/1/69 JONL

 THE CURRENT VERSION OF LISP, "LISP 102", HAS
THE FOLLOWING AS-YET UNDOCUMENTED FEATURES:

	1)"DEFUN" IS AN FSUBR USED TO DEFINE
FUNCTIONS. EXAMPLES ARE
	(DEFUN ONECONS (X) (CONS 1 X))
WHICH IS EQUIVALENT TO 
	(DEFPROP ONECONS 
		(LAMBDA (X) (CONS 1 X)
	 EXPR)

AND (DEFUN SMASH FEXPR (L) (RPLACD L NIL))
 IS EQUIVALENT TO
	(DEFPROP SMASH 
		(LAMBDA (L) (RPLACD L NIL))
	 FEXPR)
THE NOVEL FEATURE OF "DEFUN" IS THAT ONE NEED
 NOT BE SO CONCERNED WITH BALANCING
PARENTHESES AT THE VERY END OF THE FUNCTION
DEFINITION, SINCE THE TYPE FLAG MAY BE 
OMITTED IF IT IS "EXPR", AND APPEARS NEAR 
THE FRONT OF THE "DEFUN" LIST IF IT IS SOME 
OTHER.  ALSO, THE "LAMBDA" NEED NOT BE 
DIRECTLY INSERTED.

	2)A FAST "DO" SIMILAR TO THE FORTRAN
DO FEATURE NOW EXISTS.  THE SYNTAX IS
	(DO ATOM INITIALVALUE STEPFUN ENDTEST
		STATEMENT1
		.
		.
		.
		STATEMENTN)
2009/05/30 14:09:50 UTCg000001
#
いや、すいません、40歳だったw