Changeset 647


Ignore:
Timestamp:
12/21/17 15:13:40 (6 years ago)
Author:
dubos
Message:

devel/unstructured : more unrolling of stencil loops + bugfix (TRiSK stencil)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/src/unstructured/macros.jin

    r644 r647  
    8888{# ------------------------------ MESHES --------------------------- #} 
    8989 
     90{% macro get_edges(thecode, mesh,degree) %} 
     91{% for iedge in range(1,degree+1) %}  
     92{{ 'edge%d = %s_edge(%d,ij)'%(iedge,mesh,iedge) }}  
     93{% endfor %} 
     94{% for iedge in range(1,degree+1) %}  
     95{{ 'le_de%d = le_de(edge%d)'%(iedge,iedge) }}       
     96{% endfor %} 
     97{% for iedge in range(1,degree+1) %}  
     98{{ 'sign%d = %s_ne(%d,ij)'%(iedge,mesh,iedge) }}    
     99{% endfor %} 
     100{% for iedge in range(1,degree+1) %}  
     101{{ 'ij_up%d = up(edge%d)'%(iedge,iedge) if 'VERTEX1' in thecode }} 
     102{% endfor %} 
     103{% for iedge in range(1,degree+1) %}  
     104{{ 'ij_down%d = down(edge%d)'%(iedge,iedge) if 'VERTEX2' in thecode }} 
     105{% endfor %} 
     106{% endmacro %} 
     107 
    90108{# argument 'code' is the body enclosed by ON_XXX ... END_BLOCK ; it takes arguments : mesh,degree=0 #} 
    91109 
     
    114132SELECT CASE(primal_deg(ij)) 
    115133CASE(4) 
     134{{ get_edges(thecode, mesh, 4) }} 
    116135{{ vloop(mesh, lrange, flags, code, 4) }} 
    117136CASE(5) 
     137{{ get_edges(thecode, mesh, 5) }} 
    118138{{ vloop(mesh, lrange, flags, code, 5) }} 
    119139CASE(6) 
     140{{ get_edges(thecode, mesh, 6) }} 
    120141{{ vloop(mesh, lrange, flags, code, 6) }} 
    121142CASE DEFAULT 
     
    180201 
    181202{{ define('IS_BOTTOM_LEVEL', '_FALSE_') }} 
     203!DIR$ SIMD 
    182204  DO l = {{start}}, {{end}} 
    183205    {{ 'kdown = l-1' if 'KDOWN' in thecode }} 
     
    247269{% macro forall_edges(mesh,degree) -%} 
    248270{% set thecode = caller() %} 
     271 
     272{% if degree>1 %} 
     273{% for iedge in range(1,degree+1) %} 
     274{{ define('EDGE', 'l,edge%d'%iedge) }} 
     275{{ define('SIGN', 'sign%d'%iedge) }} 
     276{{ define('LE_DE', 'le_de%d'%iedge) }} 
     277{{ define('VERTEX1', 'l,ij_up%d'%iedge) }} 
     278{{ define('VERTEX2', 'l,ij_down%d'%iedge) }} 
     279  {{ thecode }} 
     280{% endfor %} 
     281{% else %} 
    249282{{ define('EDGE', 'l,edge') }} 
    250 {{ define('VERTEX1', 'l,ij_down') }} 
    251 {{ define('VERTEX2', 'l,ij_up') }} 
    252283{{ define('SIGN', mesh + '_ne(iedge,ij)') }} 
    253284{{ define('LE_DE', 'le_de(edge)') }} 
    254  
    255 {% if degree>1 %} 
    256 {% for iedge in range(1,degree+1) %} 
    257   iedge = {{ iedge }} 
    258   edge = {{ mesh }}_edge({{ iedge }},ij) 
    259   {{ 'ij_up = up(edge)'       if 'VERTEX1' in thecode }} 
    260   {{ 'ij_down = down(edge)'   if 'VERTEX2' in thecode }} 
    261   {{ thecode }} 
    262 {% endfor %} 
    263 {% else %} 
     285{{ define('VERTEX1', 'l,ij_up') }} 
     286{{ define('VERTEX2', 'l,ij_down') }} 
    264287DO iedge = 1, {{ mesh }}_deg(ij) 
    265288  edge = {{ mesh }}_edge(iedge,ij) 
     
    273296{{ undef('SIGN') }} 
    274297{{ undef('LE_DE') }} 
     298{{ undef('VERTEX1') }} 
     299{{ undef('VERTEX2') }} 
    275300{%- endmacro %} 
    276301 
     
    280305{% if degree>1 %} 
    281306{% for itrisk in range(1,degree+1) %} 
     307  itrisk = {{ itrisk }} 
    282308  edge_trisk = trisk({{ itrisk }},edge) 
    283309  {{ thecode }} 
Note: See TracChangeset for help on using the changeset viewer.