First, thank you everyone for the many answers to my last question. Here I've got a new issue that I'd like to discuss. It is about speeding up bit-vector operation using the iset extension. Consider the program given below. It creates two large bit-vectors, initializes them with random entries, and then performs and, ior, and nand operations (corresponding to intersection, union, and difference of the sets defined by the vectors) a number of 10 times.
I compile this with: csc mini.scm -O5 -o mini -C '-O3 -fomit-frame-pointer -fno-strict-aliasing' The time spent in computation is approx. 333 seconds on a 2.7 GHz AMD. I chose the declarations according to the FAQ (if I understand correctly, then standard-bindings and extended-bindings are enabled by default via usual-integrations anyway). All those optimization settings do not seem to have a big effect. If I remove those declarations and also the compiler command line switches, computation time only increases to approx. 350 seconds. Are there further possibilities to speed this up? ---------------------------------------------------------------- (declare (standard-bindings) (extended-bindings) (disable-interrupts) (unsafe)) (use iset) (define n 67108864) ; 2^26 (define (randomize-bit-vector! bv) (do ((i 0 (+ i 1))) ((= i n)) (if (= 1 (random 2)) (bit-vector-set! bv i #t)))) (define s1 (make-bit-vector n)) (define s2 (make-bit-vector n)) (randomize-bit-vector! s1) (randomize-bit-vector! s2) (print "starting computation") (define mark (current-seconds)) (do ((i 0 (+ 1 i))) ((= i 10)) (bit-vector-and s1 s2) (bit-vector-ior s1 s2) (bit-vector-and s1 (bit-vector-nand s2))) (print "time spent in computation: " (- (current-seconds) mark)) ----------------------------------------------------------------
pgpjzIeigSQdB.pgp
Description: PGP signature
_______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users