[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: map-par slower than map
From: |
Olivier Dion |
Subject: |
Re: map-par slower than map |
Date: |
Thu, 13 Oct 2022 08:41:25 -0400 |
On Thu, 13 Oct 2022, Damien Mattei <damien.mattei@gmail.com> wrote:
> the code did not worked when data length were more little than number of
> cpus (6 on my host) (iota 5) returns #unsepcified:
Yeah sorry I miss indended the output and the rest. Here's a version
that should work:
--8<---------------cut here---------------start------------->8---
(use-modules
(srfi srfi-1)
(ice-9 threads))
(define* (par-map-vector proc input
#:optional
(max-thread (current-processor-count)))
(let* ((block-size (quotient (vector-length input) max-thread))
(rest (remainder (vector-length input) max-thread))
(output (make-vector (vector-length input) #f)))
(when (not (zero? block-size))
(let ((mtx (make-mutex))
(cnd (make-condition-variable))
(n 0))
(fold
(lambda (scale output)
(begin-thread
(let lp ((i 0))
(when (< i block-size)
(let ((i (+ i (* scale block-size))))
(vector-set! output i (proc (vector-ref input i))))
(lp (1+ i))))
(with-mutex mtx
(set! n (1+ n))
(signal-condition-variable cnd)))
output)
output
(iota max-thread))
(with-mutex mtx
(while (not (< n max-thread))
(wait-condition-variable cnd mtx)))))
(let ((base (- (vector-length input) rest)))
(let lp ((i 0))
(when (< i rest)
(let ((i (+ i base)))
(vector-set! output i (proc (vector-ref input i))))
(lp (1+ i)))))
output))
--8<---------------cut here---------------end--------------->8---
--
Olivier Dion
oldiob.dev
- Re: map-par slower than map, (continued)
- Re: map-par slower than map, Olivier Dion, 2022/10/12
- Re: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map, Olivier Dion, 2022/10/13
- Message not available
- Fwd: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map,
Olivier Dion <=
- Re: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map, Olivier Dion, 2022/10/13
- Re: map-par slower than map, Damien Mattei, 2022/10/13
- Re: map-par slower than map, Damien Mattei, 2022/10/13