commit a7a70c75b0fb0e1d6832fd65e9590aa83a491fa0
parent b2a4f54514156be7f3690a300b43ee16c50b3431
Author: Andrew Laack <andrew@laack.co>
Date: Wed, 13 May 2026 02:36:30 -0500
Parallel
Diffstat:
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