mit-ocw

Source code for MIT-OCW coursework
git clone git://git.laack.co/mit-ocw.git
Log | Files | Refs

commit a7a70c75b0fb0e1d6832fd65e9590aa83a491fa0
parent b2a4f54514156be7f3690a300b43ee16c50b3431
Author: Andrew Laack <andrew@laack.co>
Date:   Wed, 13 May 2026 02:36:30 -0500

Parallel

Diffstat:
A6.172-perf-engineering/mat-mul/mat_mul_parallel.go | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+), 0 deletions(-)

diff --git a/6.172-perf-engineering/mat-mul/mat_mul_parallel.go b/6.172-perf-engineering/mat-mul/mat_mul_parallel.go @@ -0,0 +1,66 @@ +package main + +import ( + "fmt" + "math/rand" + "sync" + "time" +) + +const n = 400 + +func randInit(arr [n][n]float32) [n][n]float32 { + + for i := range len(arr) { + for j := range len(arr[i]) { + arr[i][j] = rand.Float32() + } + } + + return arr + +} + +func compute(A *[n][n]float32, B *[n][n]float32, C *[n][n]float32, i int, wg *sync.WaitGroup) { + + for k := range B { + for j := range B { + C[i][j] += A[i][k] * B[k][j] + } + } + + wg.Done() +} + +func main(){ + + + A := [n][n]float32{} + B := [n][n]float32{} + C := [n][n]float32{} + + + A = randInit(A) + B = randInit(B) + + start := time.Now() + + var wg sync.WaitGroup + + for i := range A { + wg.Add(1) + go compute(&A, &B, &C, i, &wg) + } + + wg.Wait() + + end := time.Now() + + fmt.Println(end.Sub(start).Seconds()) +} + +// This runs in: + +// 1: 0.013814715 +// 2: 0.015052904 +// 3: 0.013208566