parallel: Small steps

This commit is contained in:
retropikzel 2026-07-08 19:08:37 +03:00
parent ee1818160e
commit 3f67950050
4 changed files with 21 additions and 33 deletions

View File

@ -1,34 +1,19 @@
(define thread-count 4) (define thread-proc (lambda (x) #t))
(define thread-proc (lambda () #t))
(define (new-thread) (define (new-thread)
(let ((thread (make-thread (make-thread
(lambda () (lambda ()
(thread-specific-set! (thread-specific-set!
(result (apply thread-proc (current-thread)
(thread-specific (current-thread))))))))) (thread-proc (thread-specific (current-thread)))))))
thread))
(define threads (make-list thread-count (new-thread))) (define threads (make-list thread-count (new-thread)))
(define (parallel-map thunk lst) (define-syntax parallel-map
(letrec* (syntax-rules ()
((lst-length (length lst)) ((_ env (l args body ...) lst)
(result '()) (let* ((lst-length (length lst))
(looper (index) (thread-proc (eval `(lambda args body ...)
(when (< index lst-length) (apply environment 'env))))
(for-each (map thread-proc lst)
(lambda (thread) ))))
(when (< (+ index thread-index) lst-length)
(thread-specific-set! thread (list-ref lst (+ index thread-index)))))
threads '(0 1 2 3)) ;; FIXME Make thread-index dynamic
(for-each
(lambda (thread)
(when (< (+ index thread-index) lst-length)
thread-start! thread))
threads '(0 1 2 3))
(for-each thread-join! threads)
(map
(lambda (thread)
(thread-specific thread))
threads '(0 1 2 3))
)

View File

@ -1,5 +1,6 @@
(define-syntax parallel-map (define-syntax parallel-map
(syntax-rules () (syntax-rules ()
((_ env (l args body ...) lst) ((_ env (l args body ...) lst)
(let ((l (eval `(lambda args body ...) (apply environment 'env)))) (let* ((lst-length (length lst))
(map l lst))))) (proc (eval `(lambda args body ...) (apply environment 'env))))
(map proc lst)))))

View File

@ -5,8 +5,9 @@
(scheme eval) (scheme eval)
(retropikzel hardware-info) (retropikzel hardware-info)
(retropikzel purer)) (retropikzel purer))
(include "parallel/shared.scm")
(cond-expand (cond-expand
#;((library (srfi 18)) ((library (srfi 18))
(import (srfi 18)) (import (srfi 18))
(include "parallel-srfi-18.scm")) (include "parallel-srfi-18.scm"))
(else (else

View File

@ -0,0 +1 @@
(define thread-count (guard (condition (else 4)) (cpu-count)))