Parallel-Matrix-Multiplication

Run Settings
LanguageRaku
Language Version
Run Command
#!/usr/bin/env raku #| dot product of two vectors sub infix:<·>( @a, @b where @a.elems == @b.elems ) { [+] @a >>*<< @b } #| generic matrix multiplication - cols of @a must equal rows of @b sub infix:<dot>( @a, @b where @a[0].elems == @b>>.[0].elems) { my @b-transposed = [Z] @b; my UInt $degree = %*ENV<RAKU_PARALLEL_COMPUTATION_DEGREE> // 2; my UInt $batch = %*ENV<RAKU_PARALLEL_COMPUTATION_BATCH_SIZE> // 2 ** 15; note "Parallel computation using $degree cores and a batch size of $batch elements" if %*ENV<RAKU_PARALLEL_COMPUTATION_DEBUG>; @a.hyper(:$degree, :$batch).map( -> @r { @b-transposed.map( -> @c { @r · @c } ) }) } use Test; plan 1; my @a = [1, 0, 1], [2, 1, 1], [0, 1, 1], [1, 1, 2], ; my @b = [1, 2, 1], [2, 3, 1], [4, 2, 2], ; my @c = [ 5, 4, 3], [ 8, 9, 5], [ 6, 5, 3], [11, 9, 6], ; #%*ENV<RAKU_PARALLEL_COMPUTATION_DEBUG> = 1; #%*ENV<RAKU_PARALLEL_COMPUTATION_DEGREE> = 4; #%*ENV<RAKU_PARALLEL_COMPUTATION_BATCH> = 2 ** 21; is @a dot @b, @c, "Matrix multiplication example from Wikipedia"; done-testing;
Editor Settings
Theme
Key bindings
Full width
Lines