https://github.com/magnusmorton/trace-analysis
Raw File
Tip revision: 4645af99638edea16d00e811c922b0fb9d6b86d9 authored by Magnus Morton on 11 January 2016, 20:33:10 UTC
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) ))))
back to top