File: matrix-multiplication-serial.lisp

package info (click to toggle)
acl2 8.6%2Bdfsg-2
  • links: PTS
  • area: main
  • in suites: trixie
  • size: 1,111,420 kB
  • sloc: lisp: 17,818,294; java: 125,359; python: 28,122; javascript: 23,458; cpp: 18,851; ansic: 11,569; perl: 7,678; xml: 5,591; sh: 3,976; makefile: 3,833; ruby: 2,633; yacc: 1,126; ml: 763; awk: 295; csh: 233; lex: 197; php: 178; tcl: 49; asm: 23; haskell: 17
file content (46 lines) | stat: -rw-r--r-- 1,452 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(in-package "ACL2")

(include-book "std/testing/assert-bang" :dir :system)
(include-book "make-event/embeddable-event-forms" :dir :system)
(include-book "matrix-multiplication-setup")

; NOTE: See the comment at this same point in
; matrix-multiplication-parallel.lisp about apparently 64-bit GCL issues.

(set-compile-fns t)

(defun multiply-matrices-aux (A B)
  (declare (xargs :mode :program))
  (if (endp A)
      nil
    (cons (multiply-matrices-row (car A) B)
          (multiply-matrices-aux (cdr A) B))))

(defun multiply-matrices (A B)
  (declare (xargs :mode :program))
  (multiply-matrices-aux A B))


(observe$ "Running simple matrix multiplcation test.")
(assert! (let ((mini-matrix '((1 2 3) (4 5 6) (7 8 9))))
           (equal (multiply-matrices mini-matrix mini-matrix)
                  '((14 32 50)
                    (32 77 122)
                    (50 122 194)))))

(observe$ "Generating 32 bit source matrices A and B (serial case).")

(assign$ a (make-matrix *a-rows* *a-cols* nil))
(assign$ b (make-matrix *b-rows* *b-cols* nil))

(observe$ "Testing the time it takes to transpose B.")

(assign$ b-transposed (time$ (transpose-fast (@ b))))

(observe$ "Testing the time it takes to generate the results (serial case).  ~
           It takes approximately 22.6 seconds on our machine.")

(assert-when-parallel
  (time$ (multiply-matrices (@ a) (@ b-transposed))))

(observe$ "Done testing matrix multiplication (serial case).")