thanks for explanation, well, how can I change that code, so it will take count of Threads (or gorutines) instead size of matrix for one gorutine?
Dátum: štvrtok 25. marca 2021, čas: 19:21:02 UTC+1, odosielateľ: jas...@gmail.com > Blast from the past so it's hard to be sure, but I think that was how many > rows or columns to pick for parallel sub matrices to multiply. > > On Thu, Mar 25, 2021, 1:17 PM Gabriel Pcklub <gabriel...@gmail.com> wrote: > >> Hello, what is Threshold constant in code for? I wanted to try your code, >> but with Threshold 1 it take all of 16GB RAM I have and crash on sigkill. >> When I use Threshold 8 it seems ok, but when I use 64, it again take a lot >> of RAM... I thought it's count of Threads that program will use, while >> running on CPU. But it does give unexpected or strange results. >> >> Dátum: štvrtok 14. apríla 2011, čas: 14:55:09 UTC+2, odosielateľ: Dmitry >> Vyukov >> >>> Hi, >>> >>> I want to create a parallel matrix multiplication benchmark for Go. I >>> used to fork-join style parallelism, so I implemented it as follows: >>> >>> type Matrix [][]float64 >>> >>> func matrix_make(n int) Matrix { >>> M := make([][]float64, n); >>> for i := 0; i != n; i += 1 { >>> M[i] = make([]float64, n) >>> } >>> return M >>> } >>> >>> const (Threshold = 8) >>> >>> func matmult_pimpl (sync chan int, A Matrix, B Matrix, C Matrix, i0 int, >>> i1 int, j0 int, j1 int, k0 int, k1 int) { >>> di := i1 - i0 >>> dj := j1 - j0 >>> dk := k1 - k0 >>> if (di >= dj && di >= dk && di >= Threshold) { >>> mi := i0 + di / 2 >>> sync0 := make(chan int, 1) >>> go matmult_pimpl(sync0, A, B, C, i0, mi, j0, j1, k0, k1) >>> matmult_pimpl(nil, A, B, C, mi, i1, j0, j1, k0, k1) >>> <- sync0 >>> } else if (dj >= dk && dj >= Threshold) { >>> mj := j0 + dj / 2 >>> sync0 := make(chan int, 1) >>> go matmult_pimpl(sync0, A, B, C, i0, i1, j0, mj, k0, k1) >>> matmult_pimpl(nil, A, B, C, i0, i1, mj, j1, k0, k1) >>> <- sync0 >>> } else if (dk >= Threshold) { >>> mk := k0 + dk / 2 >>> matmult_pimpl(nil, A, B, C, i0, i1, j0, j1, k0, mk) >>> matmult_pimpl(nil, A, B, C, i0, i1, j0, j1, mk, k1) >>> } else { >>> for i := i0; i < i1; i += 1 { >>> for j := j0; j < j1; j += 1 { >>> for k := k0; k < k1; k += 1 { >>> C[i][j] += A[i][k] * B[k][j]; >>> } >>> } >>> } >>> } >>> if sync != nil { >>> sync <- 0 >>> } >>> } >>> >>> func matmult_parallel(A Matrix, B Matrix) Matrix { >>> n := len(A) >>> C := matrix_make(n) >>> matmult_pimpl(nil, A, B, C, 0, n, 0, n, 0, n) >>> return C >>> } >>> >>> Is it a good implementation for Go? Is it enough "Go-ish"? What would be >>> a "canonical" way? >>> TIA >>> >>> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "golang-nuts" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/golang-nuts/RVX-BhHcugM/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> golang-nuts...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/32e55537-d2d0-4e9a-8425-c85ad6a790a1n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/32e55537-d2d0-4e9a-8425-c85ad6a790a1n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/8fa9bb79-938a-4f89-a0c9-792776151a6en%40googlegroups.com.