X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=benchmarks%2Fallocation.cl;h=6be7bf9a9558b03db6aa2141726ffd1a2e3353d4;hb=4054fe997dbce15071a1d2b96a082b4a4a5a8363;hp=de014f729b706720cdd7aab4b9c1113f2a5f4245;hpb=5709e7e3117996052ca59d6b997f8e73c74d8bb0;p=uffi.git diff --git a/benchmarks/allocation.cl b/benchmarks/allocation.cl index de014f7..6be7bf9 100644 --- a/benchmarks/allocation.cl +++ b/benchmarks/allocation.cl @@ -1,7 +1,26 @@ +;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;;; ************************************************************************* +;;;; FILE IDENTIFICATION +;;;; +;;;; Name: allocation.cl +;;;; Purpose: Benchmark allocation and slot-access speed +;;;; Programmer: Kevin M. Rosenberg +;;;; Date Started: Mar 2002 +;;;; +;;;; $Id: allocation.cl,v 1.2 2002/03/21 14:49:14 kevin Exp $ +;;;; +;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg +;;;; +;;;; UFFI users are granted the rights to distribute and use this software +;;;; as governed by the terms of the Lisp Lesser GNU Public License +;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. +;;;; ************************************************************************* + +(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0))) (in-package :cl-user) -(defun stk () +(defun stk-int () #+allegro (ff:with-stack-fobject (ptr :int) (setf (ff:fslot-value ptr) 0)) @@ -13,7 +32,19 @@ (setf ptr 0)) ) -(defun stat () +(defun stk-vector () + #+allegro + (ff:with-stack-fobject (ptr '(:array :int 10) ) + (setf (ff:fslot-value ptr 5) 0)) + #+lispworks + (fli:with-dynamic-foreign-objects ((ptr (:c-array :int 10))) + (setf (fli:dereference ptr 5) 0)) + #+cmu + (alien:with-alien ((ptr (alien:array alien:signed 10))) + (setf (alien:deref ptr 5) 0)) + ) + +(defun stat-int () #+allegro (let ((ptr (ff:allocate-fobject :int :c))) (declare (dynamic-extent ptr)) @@ -32,17 +63,45 @@ (alien:free-alien ptr)) ) +(defun stat-vector () + #+allegro + (let ((ptr (ff:allocate-fobject '(:array :int 10) :c))) + (declare (dynamic-extent ptr)) + (setf (ff:fslot-value-typed '(:array :int 10) :c ptr 5) 0) + (ff:free-fobject ptr)) + #+lispworks + (let ((ptr (fli:allocate-foreign-object :type '(:c-array :int 10)))) + (declare (dynamic-extent ptr)) + (setf (fli:dereference ptr 5) 0) + (fli:free-foreign-object ptr)) + #+cmu + (let ((ptr (alien:make-alien (alien:array (alien:signed 32) 10)))) + (declare ;;(type (alien (* (alien:unsigned 32))) ptr) + (dynamic-extent ptr)) + (setf (alien:deref ptr 5) 0) + (alien:free-alien ptr)) + ) (defun stk-vs-stat () - (format t "~&Stack allocation") + (format t "~&Stack allocation, Integer") (time (dotimes (i 1000) (dotimes (j 1000) - (stk)))) - (format t "~&Static allocation, open-coded slot access") + (stk-int)))) + (format t "~&Static allocation, Integer") (time (dotimes (i 1000) (dotimes (j 1000) - (stat))))) + (stat-int)))) + (format t "~&Stack allocation, Vector") + (time (dotimes (i 1000) + (dotimes (j 1000) + (stk-int)))) + (format t "~&Static allocation, Vector") + (time (dotimes (i 1000) + (dotimes (j 1000) + (stat-int)))) +) +