diff options
author | Daniel Llorens <daniel.llorens@bluewin.ch> | 2015-02-13 18:42:27 +0100 |
---|---|---|
committer | Daniel Llorens <daniel.llorens@bluewin.ch> | 2016-11-23 11:49:35 +0100 |
commit | 31e9f8b974073e690f1ba6c60e18ed474de004a1 (patch) | |
tree | 1e136c9399c93c591dec6bf161d9b8fa102c46ad /libguile/array-map.h | |
parent | fa40c288caca1b1fe7630621bd5c55574514588a (diff) | |
download | guile-31e9f8b974073e690f1ba6c60e18ed474de004a1.tar.gz |
Speed up for multi-arg cases of scm_ramap functions
This patch results in a 20%-40% speedup in the > 1 argument cases of
the following microbenchmarks:
(define A (make-shared-array #0(1) (const '()) #e1e7))
; 1, 2, 3 arguments.
(define a 0) ,time (array-for-each (lambda (b) (set! a (+ a b))) A)
(define a 0) ,time (array-for-each (lambda (b c) (set! a (+ a b c))) A A)
(define a 0) ,time (array-for-each (lambda (b c d) (set! a (+ a b c d))) A A A)
(define A (make-shared-array (make-array 1) (const '()) #e1e7))
(define B (make-shared-array #0(1) (const '()) #e1e7))
; 1, 2, 3 arguments.
,time (array-map! A + B)
,time (array-map! A + B B)
,time (array-map! A + B B B)
* libguile/array-map.c (scm_ramap): Note on cproc arguments.
(rafill): Assume that dst's lbnd is 0.
(racp): Assume that src's lbnd is 0.
(ramap): Assume that ra0's lbnd is 0. When there're more than two
arguments, compute the array handles before the loop. Allocate the arg
list once and reuse it in the loop.
(rafe): Do as in ramap(), when there's more than one argument.
(AREF, ASET): Remove.
Diffstat (limited to 'libguile/array-map.h')
-rw-r--r-- | libguile/array-map.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libguile/array-map.h b/libguile/array-map.h index e7431b176..cb18a628a 100644 --- a/libguile/array-map.h +++ b/libguile/array-map.h @@ -4,7 +4,7 @@ #define SCM_ARRAY_MAP_H /* Copyright (C) 1995, 1996, 1997, 2000, 2006, 2008, 2009, 2010, - * 2011, 2013 Free Software Foundation, Inc. + * 2011, 2013, 2015 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License |