https://github.com/magnusmorton/trace-analysis
Tip revision: 4645af99638edea16d00e811c922b0fb9d6b86d9 authored by Magnus Morton on 11 January 2016, 20:33:10 UTC
subplots and recording output
subplots and recording output
Tip revision: 4645af9
fib.rkt
#lang racket/base
(require racket/list)
(require racket/cmdline)
(define fib-num (make-parameter 0))
(define task? (make-parameter #f))
(define threshold (make-parameter 0))
(command-line
#:program "matmul"
#:once-each
[("-t" "--task") "task?"
(task? #t)]
[("-o" "--threshold") th "threshold"
(threshold (string->number th))]
[("-n" "--number") n "number"
(fib-num (string->number n))])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; sequential Fibonacci (naively recursive)
(define (fib n)
(if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2)))))
(define (fib/abs n)
(fib n))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; parallel Fibonacci (divide-and-conquer with sequential threshold)
(define (dnc-fib thresh n)
(if (<= n thresh)
;; below threshold: compute sequentially
(fib n)
;; else gen parallelism: spawn task for 1st rec call, then comp 2nd call
(+
(dnc-fib thresh (- n 1))
(dnc-fib thresh (- n 2)))))
;;Warmup
(if (= (threshold) 0)
(fib (fib-num))
(dnc-fib (threshold) (fib-num)))
;;Task
(when (task?)
(if (= (threshold) 0)
(time (fib (fib-num)))
(time (fib (threshold) ))))