The attached patch should fix it.

Tobias


On Sun, 20 Jan 2013 15:09:42 +0100, Jens Axel Søgaard <jensa...@soegaard.net> wrote:

Hi Berthold,

2013/1/20 Berthold Bäuml <berthold.bae...@dlr.de>:
I tried a little test with mildly large Flonum matrices using math/matrix in Typed Racket. Two 1000x1000 dimensional matrices should be multiplied with (array- strictness #t). Running this in DrRacket results in an "out of memory" error (also having set the memory limit to 1GB) and running it with racket on the command
line makes the computer start to heavily swap.

Where is this high memory consumption coming from?

I consider this a bug in matrix*.

The culprit is inline-matrix-multiply in "untyped-matrix-arithmetic.rkt".
When multiplying an mxp matrix with an pxn  matrix, it builds a
temporary array of size n*p*m with all products needed, then
it computes sums of these products.

Replacing this algorithm with the standard O(n^3) ought to be easy.

Numpy (and Mathematica, I believe) uses BLAS and LAPACK, which use
Strassen's algorithm (or better?) for matrices this large, so there will
still be a performance gap.

If this performance gaps turns out to be too large, we must figure
out a way to integrate BLAS and LAPACK bindings into math/matrix.

For the time being, I have attached an implementation of math/matrix
using supporting matrices over doubles (math/matrix supports
matrices over Racket numbers). The implementation uses Racket
bindings  to BLAS and LAPACK.   All names ought to the same,
just replace "matrix" with "flmatrix".

Your example becomes:

#lang racket
(require "flmatrix.rkt")
(define dim 1000)
(define big1 (build-flmatrix dim dim (lambda (i j) (random))))
(define big2 (build-flmatrix dim dim (lambda (i j) (random))))
(define res (time (flmatrix* big1 big2)))

Note: Disable "Populate "compiled" directories (for faster loading)"
          to run it in DrRacket. To disable: Choose the language menu.
          Choose the menu item "Choose language". Click the button
          "advanced". Then disable.

If it is enabled, I currently get this curious error from the compiler:

../collects/compiler/cm.rkt:438:6: write: cannot marshal value that is
embedded in compiled code
  value: #<ctype:float>

I unsure whether it is a bug in my code, or in cm.rkt.



--
---------------------------------------------------------
Tobias Hammer
DLR / Institute of Robotics and Mechatronics
Muenchner Str. 20, D-82234 Wessling
Tel.: 08153/28-1487
Mail: tobias.ham...@dlr.de

Attachment: flmatrix.patch
Description: Binary data

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to