Changeset 30657 in project


Ignore:
Timestamp:
04/07/14 05:17:57 (7 years ago)
Author:
Ivan Raikov
Message:

picnic: added local config resolver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/picnic/trunk/picnic.scm

    r30646 r30657  
    459459
    460460(define picnic-write-pointsets (make-parameter #f))
     461(define local-config (make-parameter '()))
     462
    461463
    462464(MPI:init)
     
    501503(if (opt 'write-pointsets)
    502504    (picnic-write-pointsets #t))
     505
     506(if (opt 'config-file)
     507    (local-config (load-config-file (opt 'config-file))))
     508
     509(if (picnic-verbose)
     510    (pp (local-config) (current-error-port)))
    503511
    504512(define my-comm (MPI:get-comm-world))
     
    549557EOF
    550558    ))
     559
    551560
    552561
     
    681690           (
    682691            (,layout-name
    683              (let* ((pts (kd-tree->list
    684                           (car ,(fold-right
    685                                  (lambda (xs ax)
    686                                    (fold (match-lambda*
    687                                           (((id . sym) ax)
    688                                            (let ((rhs (qrhs (hash-table-ref sys sym))))
    689                                              `(let ((,sym ,rhs)) ,ax))))
    690                                          ax xs))
    691                                  (cdr (last (last layout)))
    692                                  layout))
    693                           ))
    694                     (layout
    695                      ,(case (forest-type forest)
    696                         ((local)
    697                          `(let recur ((pts pts) (myindex 0) (ax '()))
    698                             (if (null? pts) ax
    699                                 (let ((ax1 (if (= (modulo myindex mysize) myrank)
    700                                                (cons (car pts) ax) ax)))
    701                                   (recur (cdr pts) (+ 1 myindex) ax1)))
    702                             ))
    703                         ((global)
    704                          'pts)))
    705                     )
    706                (if (picnic-write-pointsets)
    707                    (write-pointset (quote ,(cn forest)) layout))
    708                layout
    709                ))
     692             ((lambda (body)
     693               (if (not (null? imports))
     694                   `(let ,(map (lambda (x)
     695                                 (let ((sym (first x))
     696                                       (ns  (third x)))
     697                                   (case ns
     698                                     ((config)
     699                                      `(,sym (alist-ref (quote ,(second x)) (local-config) )))
     700                                     (else (error 'forest-codegen "unknown import namespace" ns)))
     701                                   ))
     702                               imports)
     703                      ,body)
     704                   body))
     705              (let* ((pts (kd-tree->list
     706                           (car ,(fold-right
     707                                  (lambda (xs ax)
     708                                    (fold (match-lambda*
     709                                           (((id . sym) ax)
     710                                            (let ((rhs (qrhs (hash-table-ref sys sym))))
     711                                              `(let ((,sym ,rhs)) ,ax))))
     712                                          ax xs))
     713                                  (cdr (last (last layout)))
     714                                  layout))
     715                           ))
     716                     (layout
     717                      ,(case (forest-type forest)
     718                         ((local)
     719                          `(let recur ((pts pts) (myindex 0) (ax '()))
     720                             (if (null? pts) ax
     721                                 (let ((ax1 (if (= (modulo myindex mysize) myrank)
     722                                                (cons (car pts) ax) ax)))
     723                                   (recur (cdr pts) (+ 1 myindex) ax1)))
     724                             ))
     725                         ((global)
     726                          'pts)))
     727                     )
     728                (if (picnic-write-pointsets)
     729                    (write-pointset (quote ,(cn forest)) layout))
     730                layout
     731                )))
    710732            .
    711733            ,(map
     
    784806           (if (not (null? imports))
    785807               `(let ,(map (lambda (x)
    786                              (let ((sym (first x)))
    787                                (d "projection import: sym = ~A q = ~A~%"
    788                                   sym (resolve-forest-imports x imports))
    789                                `(,sym ,(first (resolve-forest-imports x imports)))
     808                             (let ((sym (first x))
     809                                   (ns  (third x)))
     810                               (case ns
     811                                 ((cell-forests)
     812                                  `(,sym ,(first (resolve-forest-imports x imports))))
     813                                 ((config)
     814                                  `(,sym (alist-ref (quote ,(second x)) (local-config) )))
     815                                 (else (error 'projection-codegen "unknown import namespace" ns)))
    790816                               ))
    791817                           imports)
Note: See TracChangeset for help on using the changeset viewer.