Skip to content
Snippets Groups Projects
Commit 24b0f647 authored by René Schöne's avatar René Schöne
Browse files

Impl.selectedmode, Impl.deployedon and Comp.selectedimpl are now real terminals.

parent 79483a51
Branches
No related tags found
No related merge requests found
......@@ -11,7 +11,7 @@
->HWRoot ->SWRoot ; Root
->Comp* ->RealProperty* ; SWRoot
->Impl* ; Comp
->Mode* ->deployed-on ->selected-mode ; Impl
->Mode* ; Impl
->Clause* ; Mode
->ReturnType ->comparator ; Clause
->ResourceType* ; HWRoot
......@@ -31,10 +31,7 @@
(define (->RealProperty* n) (ast-child 'RealProperty* n))
(define (->name n) (ast-child 'name n))
(define (->Impl* n) (ast-child 'Impl* n))
; (define (->selected-impl n) (ast-child 'selectedimpl n))
(define (->Property* n) (ast-child 'Property* n))
(define (->deployed-on n) (ast-child 'deployedon n))
(define (->selected-mode n) (ast-child 'selectedmode n))
(define (->Mode* n) (ast-child 'Mode* n))
(define (->Clause* n) (ast-child 'Clause* n))
(define (->ResourceType* n) (ast-child 'ResourceType* n))
......
......@@ -8,7 +8,7 @@
(mquat basic-ag)
(export add-basic-ags
=objective-val =objective-name =clauses-met?
=mode-to-use =selected? =deployed? =hw?
=mode-to-use =selected-impl =selected? =deployed-on =hw?
=req-comp-map =req-comp-min =req-comp-all =real =target =type
=eval =eval-on =value-of =actual-value =value-attr =maximum
<=request <=impl <=comp
......@@ -21,7 +21,7 @@
(define (=actual-value n) (att-value 'actual-value n))
(define (=clauses-met? n) (att-value 'clauses-met? n))
(define (<=comp n) (att-value 'get-comp n))
(define (=deployed? n) (att-value 'deployed? n))
(define (=deployed-on n) (att-value 'deployed-on n))
(define (=eval n) (att-value 'eval n))
(define (=eval-on n pe) (att-value 'eval-on n pe))
(define (=hw? n) (att-value 'hw? n))
......@@ -45,6 +45,7 @@
(define (=real n) (att-value 'real n))
(define (<=root n) (att-value 'get-root n))
(define (=selected-impl n) (att-value 'selected-impl n))
(define (=selected-mode n) (att-value 'selected-mode n))
(define (=selected? n) (att-value 'selected? n))
(define =target
(case-lambda [(n name) (att-value 'target n name)]
......@@ -88,7 +89,7 @@
[target (<<- (=real (->ReturnType n)))])
((->value (if (ast-subtype? target 'ResourceType)
; hw → search in deployedon for name and type
(=provided-clause (->deployed-on (<=impl n)) propName target)
(=provided-clause (=deployed-on (<=impl n)) propName target)
; sw → search in target-component
(=provided-clause (=mode-to-use (=selected-impl target)) propName)))
(->MetaParameter* (<=request n)))))) ; Params from request, applied to the value function
......@@ -108,8 +109,11 @@
(ProvClause (lambda (n) #t)) ; Provision clauses are always fulfilled
(Request (lambda (n) (for-all =clauses-met? (->* (->Constraints n))))))
; =deployed?: Returns #t, if the Implementation is deployed somewhere
(ag-rule deployed? (Impl (lambda (n) (ast-node? (->deployed-on n)))))
; =deployed-on: Resolves the resource the implementation is deployed on; #f if not deployed anywhere
(ag-rule
deployed-on
(Impl (lambda (n) (let ([d (ast-child 'deployed-on n)])
(and d (=search-pe n d))))))
; =eval: Call the function of a Clause with the MetaParams-AST-node of the request and on the current deployed resource type
(ag-rule
......@@ -119,7 +123,7 @@
; If inside a mode and impl of mode is selected, or outside of a mode ...
(att-value 'eval-on n (if (and (ast-subtype? (<<- n) 'Mode) (=selected? (<=impl n)))
; use the resource deployed-on...
(->deployed-on (<=impl n))
(=deployed-on (<=impl n))
#f))))) ; ... else evaluate it with #f as target
; =eval: Call the function of a Clause with the MetaParams-AST-node of the request and on the given resource type
......@@ -216,7 +220,7 @@
(ResourceType (lambda (n prop) (map (lambda (pe) (=lookup-clause pe prop)) (=resources-of n)))))
; =mode-to-use: Return either the selected-mode or the first mode
(ag-rule mode-to-use (Impl (lambda (n) (or (->selected-mode n) (ast-child 1 (->Mode* n))))))
(ag-rule mode-to-use (Impl (lambda (n) (or (=selected-mode n) (ast-child 1 (->Mode* n))))))
; =objective-name: Get the name of the objective, defaults to pn-energy
(ag-rule objective-name (Root (lambda (n) (or (->objective (<=request n)) pn-energy))))
......@@ -320,6 +324,12 @@
(Resource (lambda (n name) (or (string=? (->name n) name) (ast-find-child (lambda (i pe) (=search-pe pe name))
(->SubResources n))))))
; =selected-mode: Resolves the selected mode of an implementation
(ag-rule
selected-mode
(Impl (lambda (n) (let ([sm (ast-child 'selectedmode n)])
(and sm (ast-find-child (lambda (i m) (string=? sm (->name m))) (->Mode* n)))))))
; =selected-impl: Resolves the selected implementation of a component
(ag-rule
selected-impl
......@@ -335,9 +345,15 @@
; [DEBUGGING] Returns the unit of the RealProperty the PropertyRef is pointing to
(ag-rule remote-unit (PropertyRef (lambda (n) (->unit (=real n)))))
; [DEBUGGING] Returns the names of all implements of the Component the Request is pointing to
; [DEBUGGING] Returns the names of all implementations of the Component the Request is pointing to
(ag-rule remote-impls (Request (lambda (n) (map ->name (->* (->Impl* (=target n)))))))
; [DEBUGGING] Returns the names of all modes of the selected implementation the Component is pointing to
(ag-rule remote-modes (Comp (lambda (n) (let ([si (=selected-impl n)]) (if si (map ->name (->* (->Mode* si))) "No impl selected")))))
; [DEBUGGING] Returns the property names of all clauses of the selected mode the Implementation is pointing to
(ag-rule remote-props (Impl (lambda (n) (let ([sm (=selected-mode n)]) (if sm (map (lambda (cl) (->name (=real (->ReturnType cl)))) (->* (->Clause* sm))) "No mode selected")))))
; =target: Resolves the component of a Request
(ag-rule
target
......
......@@ -47,8 +47,8 @@
(* 1.5 mp-size))))
rt-C2 (lambda _ 0.5) ;response-time
"dynamic-mode-2a"))] ;name of Mode
(:Impl mquat-spec "Part-Impl2a" (list mode2a) (list) cubie1 mode2a))]
[comp2 (:Comp mquat-spec "Depth2-Component" (list part-impl2a) part-impl2a (list rt-C2))]
(:Impl mquat-spec "Part-Impl2a" (list mode2a) (list) (->name cubie1) (->name mode2a)))]
[comp2 (:Comp mquat-spec "Depth2-Component" (list part-impl2a) (->name part-impl2a) (list rt-C2))]
[rt-C1 (make-simple-prop "response-time-C1" "ms" agg-sum)]
[c1-impl1a
(let
......@@ -58,7 +58,7 @@
(lambda _ 20) ;energy
rt-C1 (lambda _ 0.2) ;response-time
"static-mode-1a"))] ;name of Mode
(:Impl mquat-spec "Sample-Impl1a" (list mode1a) (list comp2) cubie1 mode1a))]
(:Impl mquat-spec "Sample-Impl1a" (list mode1a) (list comp2) (->name cubie1) (->name mode1a)))]
[c1-impl1b ; impl-1b is not deployed, default selected mode
(:Impl
mquat-spec "The-Sample-Impl1b"
......@@ -88,7 +88,7 @@
rt-C1 (lambda _ 0.2) ;response-time
"default-mode-1c"))
(list comp2) #f #f)]
[comp1 (:Comp mquat-spec "Example-Component" (list c1-impl1a c1-impl1b c1-impl1c) c1-impl1a (list rt-C1))])
[comp1 (:Comp mquat-spec "Example-Component" (list c1-impl1a c1-impl1b c1-impl1c) (->name c1-impl1a) (list rt-C1))])
(:Root mquat-spec
(:HWRoot mquat-spec (list Cubieboard) (list cubie1 cubie2) (list))
(:SWRoot mquat-spec (list comp1 comp2) (list energy))
......@@ -104,4 +104,4 @@
(define cb1 (ast-child 1 (->SubResources (->HWRoot the-example-ast))))
(define cb2 (ast-child 2 (->SubResources (->HWRoot the-example-ast))))
(define (print-the-example-ast) (display-ast the-example-ast 'remote-unit 'remote-container)))
(define (print-the-example-ast) (display-ast the-example-ast 'remote-unit 'remote-container 'remote-impls 'remote-modes 'remote-props)))
......@@ -300,7 +300,7 @@
req-comp-nr (lambda _ 0.8) ;req-comp-nr load-f
(lambda _ 20) (lambda _ 2) (lambda _ 7)) ;energy-f prov-f prev-f
;adjust request to target new comp
(rewrite-terminal 'target (<=request ast) (find-create-comp ast new-comp-nr))))
(rewrite-terminal 'target (<=request ast) (->name (find-create-comp ast new-comp-nr)))))
(let* ([ast (cst id-s specs)]
[rt (ast-child 1 (->ResourceType* (->HWRoot ast)))]
[pe+parent (lambda (pe) (cons pe (<- pe)))]
......
......@@ -700,16 +700,17 @@
(let* ([impl (find-create-impl comp-nr impl-nr (if req-comp-nr (list req-comp-nr) (list)))]
[find-prop-hw (lambda (name) (ast-find-child (lambda (i child) (string=? (->name (=real child)) name))
(->Property* (car (->* (->ResourceType* (->HWRoot ast)))))))]
[find-prop-sw (lambda (name comp) (ast-find-child (lambda (i child) (string=? (->name (=real child)) name))
(->Property* comp)))]
; [find-prop-sw (lambda (name comp) (ast-find-child (lambda (i child) (string=? (->name (=real child)) name))
; (->Property* comp)))]
[load (find-prop-hw pn-load)]
[energy (find-prop-sw pn-energy (find-create-comp comp-nr))]
[prev-p (and req-comp-nr (find-prop-sw (node-name "p" (list req-comp-nr)) (find-create-comp req-comp-nr)))]
[this-p (find-prop-sw (node-name "p" (list comp-nr)) (find-create-comp comp-nr))]
; [energy (find-prop-sw pn-energy (find-create-comp comp-nr))]
; [prev-p (and req-comp-nr (find-prop-sw (node-name "p" (list req-comp-nr)) (find-create-comp req-comp-nr)))]
; [this-p (find-prop-sw (node-name "p" (list comp-nr)) (find-create-comp comp-nr))]
[clauses (filter (lambda (c) c) (list (:ReqClause mquat-spec (:PropertyRef mquat-spec pn-load) comp-max-eq load-f)
(:ProvClause mquat-spec (:PropertyRef mquat-spec pn-energy) comp-max-eq energy-f)
(:ProvClause mquat-spec (:PropertyRef mquat-spec (->name this-p)) comp-max-eq prov-f)
(and req-comp-nr (:ReqClause mquat-spec (:PropertyRef mquat-spec (->name prev-p)) comp-max-eq prev-f))))]
(:ProvClause mquat-spec (:PropertyRef mquat-spec (node-name "p" (list comp-nr))) comp-max-eq prov-f)
(and req-comp-nr (:ReqClause mquat-spec (:PropertyRef mquat-spec (node-name "p" (list req-comp-nr)))
comp-max-eq prev-f))))]
[new (:Mode mquat-spec (node-name "m" (list mode-nr impl-nr comp-nr)) clauses)])
(rewrite-add (->Mode* impl) new) new))
(define (prov-obj val id) (+ val (/ id 1e3)))
......@@ -737,7 +738,7 @@
(remove-req-constraints ast)
(save-ilp tmp-lp ast)
(add-mode 2 1 1 1 (lambda _ 0.8) (lambda _ 20) (lambda _ 2) (lambda _ 7))
(rewrite-terminal 'target (<=request ast) (find-create-comp 2))]
(rewrite-terminal 'target (<=request ast) (->name (find-create-comp 2)))]
[(604) ; New component with one impl and one mode and using the existing comp
; High load on res-1, high load required for comp-1-modes, low load required for new comp/mode
; Expected outcome: mode-1-1-1 on res-1 and (new) mode-2-1-1 on res-2
......@@ -747,7 +748,7 @@
(remove-req-constraints ast)
(save-ilp tmp-lp ast)
(add-mode 2 1 1 1 (lambda _ 0.8) (lambda _ 20) (lambda _ 2) (lambda _ 7))
(rewrite-terminal 'target (<=request ast) (find-create-comp 2))]
(rewrite-terminal 'target (<=request ast) (->name (find-create-comp 2)))]
[(605) ; New component using the existing comp, with one impl and one mode. Request still targets old component.
; Expected outcome: mode-1-1-1 on either res-1 or res-2
(change-sw-req ast "load" comp-max-eq 0.8)
......
......@@ -10,7 +10,7 @@ try:
from fabric.api import task
except ImportError:
from fabric_workaround import task
import utils
import utils, properties
from utils import local_quiet, assertTrue, assertTrueAssertion
NUM_PROCESSORS = 4
......@@ -36,6 +36,11 @@ def do_run(call_impl, given_ranges):
if not ranges:
print 'No test matches {0}. Aborting.'.format(list(given_ranges))
sys.exit(1)
# disable profiling as it disturbs ilp output
properties.profiling.value = False
properties.profiling.write_value()
test_ids = []
for lb,ub in ranges:
test_ids.extend(range(lb,ub+1))
......
......@@ -5,7 +5,7 @@ timing = 0
log.info = 1
log.debug = 0
measure.lp.write = 0
measure.profiling = 1
measure.profiling = 0
measure.flush = 0
measure.non-cached = 0
measure.presleep = 2.0
......@@ -40,7 +40,7 @@
(list
(map (lambda (c) (->name c)) (ast-child 'reqcomps impl))
(if (=selected? impl) (string-append "*" name) name)
(if (=deployed? impl) (->name (->deployed-on impl)) #f)
(if (=deployed-on impl) (->name (=deployed-on impl)) #f)
(if (=selected? impl) (M (=mode-to-use impl)) #f))
(I (cdr loi))))))])
(fold-left
......@@ -87,21 +87,21 @@
; Given a component (or an impl) and a resource, change deployed-on of the selected impl
; of the given component (or the given impl) to the given resource, returning the old resource
(define (deploy-on x new-pe) (rewrite-terminal 'deployedon (if (ast-subtype? x 'Comp) (=selected-impl x) x) new-pe))
(define (deploy-on x new-pe) (rewrite-terminal 'deployedon (if (ast-subtype? x 'Comp) (=selected-impl x) x) (->name new-pe)))
(define (use-next-impl comp)
(let* ([former-impl (=selected-impl comp)]
[former-index (ast-child-index former-impl)]
[num-impls (ast-num-children (->Impl* comp))]
[former-deployed (->deployed-on former-impl)]
[former-deployed (=deployed-on former-impl)]
[new-index (+ (mod former-index num-impls) 1)]
[new-impl (ast-sibling new-index former-impl)]
[first-new-mode (car (->* (->Mode* new-impl)))])
(rewrite-terminal 'deployedon former-impl #f)
(rewrite-terminal 'selectedmode former-impl #f)
(rewrite-terminal 'selectedimpl comp (->name new-impl))
(rewrite-terminal 'deployedon new-impl former-deployed)
(rewrite-terminal 'selectedmode new-impl first-new-mode) ; use first mode
(rewrite-terminal 'deployedon new-impl (->name former-deployed))
(rewrite-terminal 'selectedmode new-impl (->name first-new-mode)) ; use first mode
new-impl))
(define (display-part node . attributes)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment