Separate TR optimization and info logs.
This commit is contained in:
parent
677550cbe2
commit
4933d9f00f
|
@ -13,7 +13,7 @@
|
||||||
(cond [(missed-opt-log-entry? new)
|
(cond [(missed-opt-log-entry? new)
|
||||||
(maybe-merge-with-parent new res)]
|
(maybe-merge-with-parent new res)]
|
||||||
[else
|
[else
|
||||||
(cons new res)]))) ; no merging for opts and info
|
(cons new res)]))) ; no merging for opts
|
||||||
|
|
||||||
;; is parent the "parent" missed optimization of child?
|
;; is parent the "parent" missed optimization of child?
|
||||||
;; this determines whether they get reported together or not
|
;; this determines whether they get reported together or not
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
|
|
||||||
(provide report-hidden-costs)
|
(provide report-hidden-costs)
|
||||||
|
|
||||||
(define (report-hidden-costs TR-log profile hot-functions)
|
(define (report-hidden-costs info-log profile hot-functions)
|
||||||
(apply
|
(apply
|
||||||
append
|
append
|
||||||
(for/list ([node (in-list (profile-nodes profile))])
|
(for/list ([node (in-list (profile-nodes profile))])
|
||||||
(process-profile-node node hot-functions TR-log
|
(process-profile-node node hot-functions info-log
|
||||||
(profile-total-time profile)))))
|
(profile-total-time profile)))))
|
||||||
|
|
||||||
(define (process-profile-node profile-entry hot-functions TR-log total-time)
|
(define (process-profile-node profile-entry hot-functions info-log total-time)
|
||||||
(define produced-entries '())
|
(define produced-entries '())
|
||||||
(define (emit e) (set! produced-entries (cons e produced-entries)))
|
(define (emit e) (set! produced-entries (cons e produced-entries)))
|
||||||
|
|
||||||
|
@ -30,15 +30,16 @@
|
||||||
|
|
||||||
(define (check-hidden-cost kind message badness)
|
(define (check-hidden-cost kind message badness)
|
||||||
(when inside-hot-function?
|
(when inside-hot-function?
|
||||||
(for/list ([TR-entry (in-list TR-log)]
|
(for/list ([info-entry (in-list info-log)]
|
||||||
#:when (info-log-entry? TR-entry)
|
#:when (info-log-entry? info-entry)
|
||||||
#:when (equal? (log-entry-kind TR-entry) kind)
|
#:when (equal? (log-entry-kind info-entry) kind)
|
||||||
#:when (inside-us? (log-entry-pos TR-entry)))
|
#:when (inside-us? (log-entry-pos info-entry)))
|
||||||
(emit (missed-opt-log-entry
|
(emit (missed-opt-log-entry
|
||||||
"" ; kind not used at this point
|
"" ; kind not used at this point
|
||||||
message
|
message
|
||||||
(log-entry-located-stx TR-entry) (log-entry-located-stx TR-entry)
|
(log-entry-located-stx info-entry)
|
||||||
(log-entry-pos TR-entry) 'typed-racket
|
(log-entry-located-stx info-entry)
|
||||||
|
(log-entry-pos info-entry) 'typed-racket
|
||||||
'() '()
|
'() '()
|
||||||
badness)))))
|
badness)))))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
|
|
||||||
(require racket/class racket/gui/base racket/string racket/match
|
(require racket/class racket/gui/base racket/string racket/match racket/list
|
||||||
unstable/syntax unstable/logging
|
unstable/syntax unstable/logging
|
||||||
"structs.rkt" "sandbox.rkt")
|
"structs.rkt" "sandbox.rkt")
|
||||||
|
|
||||||
|
@ -19,8 +19,9 @@
|
||||||
(build-path dir file)
|
(build-path dir file)
|
||||||
#f)))
|
#f)))
|
||||||
(file-predicate path))
|
(file-predicate path))
|
||||||
(define TR-log '())
|
(define TR-log '())
|
||||||
(define mzc-log '())
|
(define mzc-log '())
|
||||||
|
(define info-log '()) ; for hidden costs
|
||||||
(with-intercepted-logging
|
(with-intercepted-logging
|
||||||
(lambda (l)
|
(lambda (l)
|
||||||
;; From mzc, create a log-entry from the info.
|
;; From mzc, create a log-entry from the info.
|
||||||
|
@ -33,7 +34,9 @@
|
||||||
;; From TR, use the log-entry struct provided.
|
;; From TR, use the log-entry struct provided.
|
||||||
(define entry (vector-ref l 2))
|
(define entry (vector-ref l 2))
|
||||||
(when (right-file? entry)
|
(when (right-file? entry)
|
||||||
(set! TR-log (cons entry TR-log))))
|
(if (info-log-entry? entry)
|
||||||
|
(set! info-log (cons entry info-log))
|
||||||
|
(set! TR-log (cons entry TR-log)))))
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(run-inside-optimization-coach-sandbox
|
(run-inside-optimization-coach-sandbox
|
||||||
this
|
this
|
||||||
|
@ -41,7 +44,13 @@
|
||||||
(void (compile (read-syntax (send this get-port-name) input))))))
|
(void (compile (read-syntax (send this get-port-name) input))))))
|
||||||
'debug 'TR-optimizer))
|
'debug 'TR-optimizer))
|
||||||
'debug 'optimizer)
|
'debug 'optimizer)
|
||||||
(values (reverse TR-log) (reverse mzc-log)))
|
;; The raw TR logs may contain duplicates from the optimizer traversing
|
||||||
|
;; the same piece of code multiple times.
|
||||||
|
;; Duplicates are not significant (unlike for inlining logs) and we can
|
||||||
|
;; prune them.
|
||||||
|
(values (reverse (remove-duplicates TR-log))
|
||||||
|
(reverse mzc-log)
|
||||||
|
(reverse (remove-duplicates info-log))))
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
|
|
||||||
(require racket/class racket/match racket/list
|
(require racket/class racket/match
|
||||||
"structs.rkt" "instrumentation.rkt" "inlining.rkt" "hidden-costs.rkt"
|
"structs.rkt" "instrumentation.rkt" "inlining.rkt" "hidden-costs.rkt"
|
||||||
"locality-merging.rkt" "causality-merging.rkt")
|
"locality-merging.rkt" "causality-merging.rkt")
|
||||||
|
|
||||||
|
@ -8,29 +8,20 @@
|
||||||
|
|
||||||
;; profile is currently only used to refine the inlining logs
|
;; profile is currently only used to refine the inlining logs
|
||||||
(define (generate-report this profile)
|
(define (generate-report this profile)
|
||||||
(define-values (pre-TR-log mzc-log) (generate-logs this))
|
(define-values (TR-log mzc-log info-log) (generate-logs this))
|
||||||
;; The raw TR log may contain duplicates from the optimizer traversing
|
|
||||||
;; the same piece of code multiple times.
|
|
||||||
;; Duplicates are not significant (unlike for inlining logs) and we can
|
|
||||||
;; prune them.
|
|
||||||
(define TR-log (remove-duplicates pre-TR-log))
|
|
||||||
(define hot-functions (and profile (prune-profile profile)))
|
(define hot-functions (and profile (prune-profile profile)))
|
||||||
(log->report
|
(log->report
|
||||||
(append (causality-merging
|
(append (causality-merging
|
||||||
(prune-cold-TR-failures TR-log profile hot-functions))
|
(prune-cold-TR-failures TR-log profile hot-functions))
|
||||||
(report-inlining mzc-log profile hot-functions)
|
(report-inlining mzc-log profile hot-functions)
|
||||||
(if profile
|
(if profile
|
||||||
(report-hidden-costs TR-log profile hot-functions)
|
(report-hidden-costs info-log profile hot-functions)
|
||||||
'()))))
|
'()))))
|
||||||
|
|
||||||
|
|
||||||
;; Returns a report-entry or #f, which means prune.
|
;; Returns a report-entry or #f, which means prune.
|
||||||
(define (log-entry->report-entry l)
|
(define (log-entry->report-entry l)
|
||||||
(match l
|
(match l
|
||||||
[(? info-log-entry? _)
|
|
||||||
;; Info entries are only useful for log analysis, and should not be
|
|
||||||
;; presented to users. Drop them.
|
|
||||||
#f]
|
|
||||||
[(log-entry kind msg stx located-stx (? number? pos) provenance)
|
[(log-entry kind msg stx located-stx (? number? pos) provenance)
|
||||||
(define start (sub1 pos))
|
(define start (sub1 pos))
|
||||||
(define end (+ start (syntax-span stx)))
|
(define end (+ start (syntax-span stx)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user