forked from stfc/PSyclone
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog
2363 lines (1612 loc) · 85.2 KB
/
changelog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1) PR #1758 for #1741. Splits the PSyData read functionality into a
standalone module to remove dependence on infrastructure for
driver code.
2) PR #1766 FOR #1764. Fixes various syntax errors in some of the
Fortran test files.
3) PR #1759 for #1752. Updates to GOcean examples so that F90FLAGS
is used consistently and is also used when linking.
4) PR #1700. Various improvements to the example NEMO processing
scripts.
5) PR #1762 for #1743. Ensures declaration of precision variables
in PSyAD test harness.
6) PR #1774 for #1773. Fixes syntax error in test Fortran file.
7) PR #1620 for #1555. Create Algorithm Layer for a Kernel.
8) PR #1767 for #1739. Fixes dep-analysis bug whereby CMA operator
arguments to LFRic kernels were not given correct access value.
9) PR #1763 for #1717. Fixes invalid adjoint names for subroutine
and module.
10) PR #1776 for #1775. Fixes post_region_code_gen and improves
test fixtures.
11) PR #1784 towards #1779. Removes the use of config-provided bounds
from the NemoRange2Loop Transformation.
12) PR #1765 for #1724. Remove kernel use statements from
processed algorithm layer code.
13) PR #1785 for #1771. Refactor algorithm-creation functionality.
14) PR #1769 for #1721. Fixes bugs in use of sympy simplify() and
expand().
15) PR #1791 for #1780. Add setval_random built-in in LFRic API.
16) PR #1778 for #1751. Add ReplaceInductionVariableTrans transformation.
17) PR #1652 for #1645. Symbols representing LFRic BuiltIn Functors
18) PR #1795 for #1583. Bug fix for PSyAD for expressions involving
a unary minus.
19) PR #1809. A few fixes for code style issues.
20) PR #1803 for #1797. Adds support for logical variables to the
PSyData API.
21) PR #1804 for #637. Extends the dependence analysis to support
LFRic built-in kernels.
22) PR #1790 for #1787. Adds HoistLoopBoundsExprTrans transformation
which hoists complex loop-bound expressions out of loops.
23) PR #1811 for #1810. Separate LFRic LMA Operator infrastructure
into its own file.
24) PR #1808 for #1681. Extends PSyAD to reject functions.
25) PR #1633 towards #1631. New implementation of kernel meta-data
parser for GOcean API.
26) PR #1821 for #1557. Extends PSyAD to support LFRic mixed-
precision kernels.
27) PR #1551 towards #1338. Add OpenMP Clauses and its referenced
variables as part of the PSyIR tree.
28) PR #1838 for #1704. Update replace_with method to take into
account named arguments.
29) PR #1847. Make a subSignature a Signature and allow
Signature.to_language w/o arguments
30) PR #1831 for #1735. Changes the directory structure in the
test LFRic infrastructure to mimic that in the full LFRic
infrastructure. Alter the testing infrastructure to use the
Makefile to build the LFRic library.
31) PR #1814 towards #924. Add new PSyIR InlineTransformation.
32) PR #1819 for #1815. Forbid OMPTarget regions from containing
CodeBlock nodes.
33) PR #1830 for #1828. Fixes to enable explicit OpenACC Loop
parallelism with UM.
34) PR #1855 for #1840. Fix bug with dependency analysis when an
expression has the same array reference with and without indices.
35) PR #1827 for #1826. Adds support for SIR intrinsics.
36) PR #1839 for #1782. Adds a -api option to the PSyAD script.
37) PR #1844 towards #1823. Makes module inlining work in LFRic
when the same kernel is used multiple times.
38) PR #1825 for #1576. Adds the Reference2ArrayRangeTrans
transformation.
39) PR #1846. Fixes to various docstrings in transformations.py
and node.py.
40) PR #1845 for #1813. Adds a standalone PSyData extraction
library (that uses only Fortran IO).
41) PR #1836 for #1834. Adds support for explicit array-range
declarations to the dotproducttrans transformation.
42) PR #1871 for #1870. Fixes typo in link in User Guide.
43) PR #1875 for #1874. Remove pytest-pep257 dependency from setup.py
44) PR #1860 for #1538. Fixes search for config file when
`python setup.py install` used instead of pip and adds yaml config
file to tell RTD to use pip and Python 3.8 (for interop. with
SymPy).
45) PR #1768 for #1711. Add initial Sum2CodeTrans transformation.
46) PR #1885 for #1878. Update FortCL submodule to head of master to
fix invalid-boz compilation errors with newer versions of gfortran.
47) PR #1890 for #1889. Fix test to avoid temporary files being
left after pytest run.
48) PR #1850 towards #1799. Initial PSyIR node.datatype implementation
to query the resulting datatype of a PSyIR subtree.
49) PR #1869 for #1868. Extend PSyAD to make use of the
Reference2ArrayRangeTrans.
50) PR #1880 for #1865. Improves support for function calls in the
PSyIR by ensuring the associated RoutineSymbol has the correct
datatype.
51) PR #1894 for #1893. Fix bug in is_upper/lower_bound for UnknownTypes.
52) PR #1853 for #1829. Add OMP teams distribute parallel do directive
and refactor OMPLoopTrans.
53) PR #1900 for #1893. Fix bug in is_upper/lower_bound for non-typed
Symbols.
54) PR #1782 for #1496. Adds initial support for PSyAD test
harness generation for LFRic kernels. Some issues remain.
55) PR #1807 towards #1806. Adds PSyIR support for LFRic kernel
metadata.
56) PR #1906 for #1896. Update HoistLocalArrayTrans to avoid hoisting
parameter arrays and, unless explicitly requested, device parallel routines.
57) PR #1901 towards #1892 and #1898. Add support for storing and
querying the index of a metadata argument.
58) PR #1884 for #1882. Extends the inlining transformation to support
inlining of functions.
59) PR #1912 for #1851. Fixes pycodestyle (2.9) errors/warnings for
with Python 3.10.
60) PR #1899 towards #1823. Refactors KernelModuleInlineTrans so that
the in-lining happens at transformation time rather than code-
generation time.
61) PR #1852 for #1750. Adds an option to VariablesAccessInfo to
report/not report array arguments as first parameter to
lbound/ubound/size as read access. This fixes several issues with the
dependency tools.
62) PR #1867 for #1861. Significantly improves test coverage,
especially of the compilation-testing utilities.
63) PR #1924 for #1923. Fix issues building Developer and Reference
guides.
release 2.3.1 17th of June 2022
1) PR #1747 for #1720. Adds support for If blocks to PSyAD.
2) PR #1669 for #450. Remove set_dirty/clean from ACC regions
3) PR #1745 towards #1731. Split PSyLoop class from Loop node.
4) PR #1761 for #1760. Create release 2.3.1
release 2.3.0 9th June 2022
1) PR #1672. Fixes BOZ literal standard incompatibility in the
nvidia profiling wrapper code.
2) PR #1670 for #1650. Fixes various inconsistencies in the symbol
table implementation.
3) PR #1674 for #1644. Fixes bug in matmul transformation.
4) PR #1673 for #1671. Fixes an error in the Makefile for the
'time evolution' LFRic tutorial.
5) PR #1628 for #1491. Extends PSyAD pre-processing phase to
expand any expressions involving active variables.
6) PR #1666 towards #1618. Modified prototype PSyIR-based
algorithm generation to use a transformation to convert from
invoke's to processed algorithm code, rather than it being done as
part of lowering in the backend. This allows algorithm code with
invoke's to be output by the backend.
7) PR #1613 for #1238 and #1528. Improves the view() method so that
it returns a str rather than printing to stdout. Also allows colour
to be disabled.
8) PR #1656 for #1649 and #1645. Add equality operator to all core
PSyIR nodes in order to compare nodes by value.
9) PR #1680. Refactors some of the code in various ACC directives to
minimise duplication and switch to f-strings.
10) PR #1639 for #1630. Add support for named arguments in Call and
Operation PSyIR nodes, including Fortran front-end and backend support.
11) PR #1682 for #1632. Extend the LFRic API to support transport
field type. Required for mixed-precision support.
12) PR #1678 for #1667. Work towards getting the LFRic OpenACC
example (eg14) to compile.
13) PR #1676 for #1644 Extend matmul2code transformation to
support matrix matrix multiplication. Previously it was limited to
matrix vector.
14) PR #1697 for #1695. Small update to LFRic stub infrastructure to
fix compilation failure when building tutorial code.
15) PR #1699. Fix failing dynamopsy test by specifying dm=true
explicitly
16) PR #1684 for #1683. Adds support for MIN and MAX LFRic Built-ins.
17) PR #1702 for #1695. Correction to LFRic infrastructure ('emdi') to
bring up-to-date with current LFRic usage.
18) PR #1705. Corrections for the NEMO tutorial.
19) PR #1692 for #1688. Prevents scoping regions from sharing symbol
tables. Adds attach() and detach() methods to SymbolTable for
managing this connection.
20) PR #1703 for #1689. Fix stencil depth bug in LFRic halo exchange
when a discontinuous writer follows a discontinuous stencil reader.
21) PR #1608 towards #1542. Allow GH_WRITE access for fields on
continuous function spaces in LFRic API.
22) PR #1722. Changes all PSyIR code over to using f-strings.
23) PR #1725. Allows parsing an empty Fortran file.
24) PR #1716 for #1713. Fix bug in matmul transformation.
25) PR #1693 for #1661. Improve dependency analysis tools.
26) PR #1347 for #1730. The Fortran backend now generates declarations with
dependencies in the appropriate order.
27) PR #1729. Minor fixes for MarkDown link checker and path to
test file.
28) PR #1733 for #1707. Update PSyclone master to the latest version of
fparser to enable running of PSyclone tests.
29) PR #1679. Add a limit parameter to the PSyIR node ancestor method.
30) PR #1749 for #1748. Updates version of fparser specified in setup.py
to 0.0.15.
31) PR #1740 for #1738. Update the operator implementation in the
cut-down LFRic infrastructure and change the USE statements generated
for CMA operators.
release 2.2.0 17th March 2022
1) PR #1439 for #1074. Adds a GOcean example for the use of the NaN-
checking functionality (in PSyData).
2) PR #1463 for #1461. VALID_LOOP_TYPES constant made consistent
across APIs to permit check on loop type in dependency tools.
3) PR #1473 for #1423. Adds the ChunkLoopTrans PSyIR transformation.
4) PR #1475 for #595. Remove memento and transformation return values.
5) PR #1470 for #1459. Refactor OMPLoopTrans to support OMPLoop
directive and add OMPTargetTrans.
6) PR #1452 for #1451. Add doctest for the Dev Guide to GitHub Actions
and tidy the examples so that they work.
7) PR #1503 for #1502. Fix incorrect path in tutorial README.
8) PR #1489 for #1488. Configure MD link checker to skip links to MO wiki.
9) PR #1501 for #1484. Remove Python2 validation, update
documentation, start removing Python2-specific code and start
using any pylint-suggested Python3-specific code constructs.
10) PR #1476 for #1456. Fix precision problems in the PSyAD harness
code generation and add harness documentation.
11) PR #1482 for #1481. Renames symbol_from_tag->find_or_create_tag
and tidies its use.
12) PR #1521 for #1193. Update Python 3.5 to 3.6 in the GitHubActions CI.
13) PR #1512 for #1511 and #1516. Fix silent compilation test failures,
and make sure all files are compiled in tmpdir.
14) PR #1531. Fixes incorrect imports of OMPTaskwaitTrans in examples
in class docstrings.
15) PR #1498 for #533. Adds the use of SymPy for comparing expressions
for equality. Removes math_equal() and
ArrayRange2LoopTrans.string_compare() methods.
16) PR #1492 for #1457. Adds support for the transformation of Loops
when taking the adjoint of a code.
17) PR #1520 towards #1504. The Fortran frontend marks class type
definitions as UnknownFortranType in the PSyIR.
18) PR #1522 for #1519. Make the LoopSwapTransformation generic and
move it to the psyir.transformations module.
19) PR #1539 for #1524. Re-enable a previously deleted compilation test
due to a compilation error now fixed.
20) PR #1535 for #1534. Adds testing of Python 3.10 in GHA and
updates PSyclone to work with 3.10. Also makes GHA build examples
with 2 threads (as 2 cores are available) and runs tests with as
many threads as there are cores available (again 2 at this time).
21) PR #1510 for #1499. Add SymbolTable method to resolve the properties
of imported symbols.
22) PR #1485 for #1429. Create correct variable intents for
generated adjoint kernel code.
23) PR #1228 towards #753. The GOcean API now uses PSyIR for the Algorithm
layer.
24) PR #1526 for #1430. Fixes and improves support for array
ranges in psyad.
25) PR #1500 for #1487. Improvements to NEMO arrayrange2loop
transformation.
26) PR #1541 for #1513. Adds a 2D loop-tiling transformation.
27) PR #1533 for #1523. Adds SymPy symbols for Fortran names
in the tools.symbolic_maths module.
28) PR #1579 for #1550. Removes duplicated use statements produced
by the Fortran backend.
29) PR #1518 for #1506. Bugfix for WHEREs involving derived types.
30) PR #1578 for #1517. Uses dependency analysis to check for
loop-carried dependencies when attempting to parallelise a loop.
Also improves validation checks at code-generation time to ensure
that any OMP Loop directive is within a Target or Parallel region.
31) PR #1598 towards #282. Removes reference to the Dynamo 0.1 API
in the documentation.
32) PR #1462 for #451. Make LFRic loop bounds constant within the
PSy-layer with any function calls or structure accesses looking up
bounds information being computed separately beforehand. This can
help compilers correctly compile the code, particularly when there
are directives and may also help compilers produce more efficient
code.
33) PR #1592 for #1585. Add a PSyIR clause node and start implementing
clauses for the OpenMP directives.
34) PR #1599 for #282. Removes Dynamo 0.1 API code and tests (removes
the API completely).
35) PR #1556 for #1490. Adds a dotproduct2code transformation and
extends PSyAD to make use of it.
36) PR #1597 towards #753. Fixes naming bugs in GOcean Algorithm
PSyIR.
37) PR #1565 for #1505. Fix bug with UnknownFortranTypes inside other
fparser frontend declarations.
38) PR #1603 for #1566. Fparser reader parses derived types with
contains statements as UnknownFortranType.
39) PR #1602 towards #753. A new PSyclone script entry point (the
trans_alg function) can be used to transform the Alg-layer (currently
just for the gocean API).
40) PR #1601 for #1600. Removes the GOcean 0.1 API.
41) PR #1410 for #1398. Add Sphinx docs link checking in the CI.
42) PR #1586 for #1559. Adds support for SoA and AoSoA in the
Range2Loop transformation.
43) PR #1574 towards #1555. Replaces gen_kernel_stub script with
psyclone-kern. This more generic script can be extended to other
kernel modification options in the future (in particular
generating an algorithm layer from a kernel).
44) PR #1607 for #1559. Transform MATRIX_MULTIPLY to equivalent
code before creating adjoint.
45) PR #1527 towards #1525. Adds lower_to_language_level methods
to all LFRic builtins with the exception of those involving
reductions or type casting.
50) PR #1616 for #1615. Fixes list of files to profile in NEMO
kernels script plus some other typos.
51) PR #1621 for #1581. Extends PSyAD to make use of the
ArrayRange2Loop transformation to remove any array ranges before
constructing the adjoint.
52) PR #1622 towards #1618. Fixes code generation for PSyIR of
Algorithm Layer by removing `invoke` symbol during lowering.
53) PR #1609 for #1584, #1041 and #490. Adds transformation to
add OpenMP target directive to routines and updates existing
one for OpenACC to use PSyIR instead of parse tree.
54) PR #1625 for #1606. Fixes bug in PSyAD by ensuring that all
local, active variables are initialised to zero.
55) PR #1349 for #1277. Extend the LFRic API to use algorithm
precision/types when generating the PSy layer. Required for
mixed-precision support.
56) PR #1624 towards #1618. Bug fix for LFRic algorithm PSyIR module
and subroutine names.
57) PR #1637 for #1634. Add HoistLocalArraysTrans transformation.
58) PR #1553 for #1134. Completes the movement of OpenCL-generation
into its own transformation.
59) PR #1657 for #1640. Changes ready for new 2.2 release.
release 2.1.0 3rd November 2021
1) PR #1183 for #1075. Improves (tightens) the checking performed
by the LoopFusion transformation.
2) PR #1197 for #1189. Changes the dependence analysis to use a
Signature rather than just the symbol name (in preparation for
supporting derived types/structures).
3) PR #1216 for #1188. Adds a FortranReader PSyIR frontend.
4) PR #1217 towards #1210. Adds raising transformations for NEMO.
5) PR #1222 for #1171. Adds a new class to encapsulate all constants
related to the LFRic API.
6) PR #1233 for #1231. Adds psyadd driver script that will process an
LFRic tangent-linear kernel and produce its adjoint.
7) PR #1124 for #1185. Refactor PSyDataNode class and sub-classes.
8) PR #1229 for #1170. Adds a Container parent node above all
InvokeSchedule nodes.
9) PR #1225 towards #1223. Moves remaining GOcean constants into
new GOceanConstants class.
10) PR #1241 for #1240. Adds support for functions in the PSyIR and
Fortran frontend and backend.
11) PR #1257 for #1248. Adds support for logical, read-only, scalar
arguments to LFRic user-supplied kernels.
12) PR #1234 for #1230. Adds FileContainer node.
13) PR #1264 towards #1258. Adds mappings for the LFRic infrastructure
types to their Fortran modules to the LFRic Constants class.
14) PR #1236 for #1028. Extends the core variable-access analysis
functionality to support structures (derived types).
15) PR #1239 towards #1237. Adds lower_to_language_level() method
for some LFRic builtins.
16) PR #1195 for #1194. Fixes some incorrect str(error) usage in the
tests, introduces a PSycloneError base class and adds tests to make
sure that it is used. Also adds tests to ensure that future accidental
use of str(error) will cause a failure.
17) #1243 for #1242. Bug fix for OpenCL code generation - ensures
synchronisation calls are added where necessary if kernels are running
on different command queues.
18) #1273 for #1272. Fixes missing fparser initialisation when
GOcean loop bounds are read from config file.
19) #1287 towards #1259. Rename TypeSymbol to DataTypeSymbol.
20) #1265 for #1260. Fixes various bugs to better support PSyIR
code generation. Includes function return values and string
storage in PSyIR.
21) #1293 for #1178, #1179, #1285. Update installation instructions
to include autoapi and tex-gyre, and added allclean target to
reference guide to clean up all automatically created files.
22) #1278 for #1271. Updates dependency tools to use Signatures.
23) #1286 for #1274. Updates the Visitors so that they perform
any necessary lowering and do so on a *copy* of the PSyIR tree
so that there are no side effects.
24) #1290 for #2183. Adds support for != and other comparison
operators to the Signature class.
25) #1262 for #920. Adds capturing of algorithm-layer datatypes
which are then stored in the algorithm.py Arg class.
26) #1252 for #1251. Fix Ranges inside StructureType accesses.
27) #1294 towards #1259. Add the TypedSymbol abstract class.
28) #1311 for #1303. Fortran frontend do not merge CodeBlocks
when these are not full statements.
29) #1212 towards #1010. Updates the gocean1.0 API so that the PSy-layer
generation uses the PSyIR Fortran backend. (N.B. the OpenCL generation
still uses the f2pygen mechanism for the moment.)
30) #1316 for #1301 and #1304. The Fortran frontend handles labelled
and named constructs.
31) #1299 for #1249. Some LFRic built-ins use the PSyIR backend, which
fixes a unary operator precedence bug.
32) #1279 for #1250. Adds capability to specify multiple kernel
directories.
33) #1329 for #1308. Fix bug in the Fortran frontend WHERE clause.
34) PR #1327 towards #1208. Moves the implementations of the various
Directive nodes out of psyGen.py and into psyir/nodes.
35) #1255 for #1253. Improve the parsing of Fortran specification
code and includes support for Fortran interface blocks.
36) #1319 for #1307. Add support for lower bounds in PSyIR ArrayType.
37) #1261 towards #1277. Gather more information in LFRicConstants
so values are not hardcoded in multiple locations. Includes adding
precision information derived from LFRic rules which is required
for mixed precision support.
38) PR #1317 for #1315. Fixes bug in dependence analysis caused by
introduction of FileContainer root node.
39) PR #1340 for #1334. Add support for symbols in
'psyir_from_expression()' and fix code generation bug for LFRic
"power" built-ins with literal constants that have explicit precision.
40) PR #1323 for #1305. Capture the default visibility of a Fortran
module and store it in the symbol table.
41) PR #1313 for #1268 and #1269. Adds new ComponentIndices class
to manage indices for component accesses.
42) PR #1325 for #1247. Adds PSyIR support for comments (associated with
Container, Routine and Statement nodes).
43) PR #1342 towards #1338. Adds the OMPSingleTrans transformation for
creating an OMP SINGLE region.
44) PR #1352 towards #1338. Adds the OMPMasterTrans transformation for
creating an OMP MASTER region.
45) PR #1360 for #1359. Fix pytest fixtures tear downs.
46) PR #1353 for #1324. Add support for generating structure accesses in
the C backends.
47) PR #1358 towards #1338. Add the OpenMP Taskloop directive and its
corresponding insertion transformation.
48) PR #1369 for #1367. GOcean supports REAL literals in kernel arguments.
49) PR #1362 for #1361. Fix bug in PSyIRGen when PSyIR node corresponds
to more than one fparser2 node.
50) PR #1344 for #1309. Fix bug in PSyIR backend name comparison.
51) PR #1372 for #1371. Bring tutorial notebooks up-to-date and add
them to the CI.
52) PR #1341 towards #1134. Move OpenCL transformation to GOcean
transformations folder and rename.
53) PR #1368 towards #1338. Adds OMPTaskWaitDirective node.
54) PR #1282 for #871. Adds generation of callback routines for
GOcean in order to do data movement with OpenACC.
55) PR #1267 for #1232. Adds a TL to Adjoint transformation for
assignments.
56) PR #1263 for #1139. Adds a transformation that converts an
array access into a single-trip loop.
57) PR #1378 for #879. Renames the Symbol interface GlobalInterface
to ImportInterface.
58) PR #1376 for #1374. Create intermediate RegionDirective and
StandaloneDirective PSyIR node classes.
59) PR #1380 for #1375. Add the LazyString utility to prevent generating
costly error messages when these are not used.
60) PR #1354 for #1256. Change GOConstLoopBoundsTrans to modify the
tree rather than just setting a flag.
61) PR #1343 for #1336. Use github actions to verify all links in
all markdown files.
62) PR #1385 towards #430 and 737. Improve accessibility attribute support
on the PSyIR Fortran frontend and backend.
63) PR #1363 for #1356. Adds a hoist transformation for assignments.
64) PR #1330 for #1297. Adds TL to Adjoint test harness code
generation.
65) PR #1379 towards #1288. Alters the driver generation for
GOcean kernel extraction to use the PSyIR.
66) PR #1403. Adds support for private clause for declarations in f2pygen.
67) PR #1406 for #1404. Temporary copy() bug fix while the loop variable
is not part of the PSyIR tree.
68) PR #1407 towards #1383. Standardises the node_str() method of
DirectiveNode and remove un-needed code.
69) PR #1401 for #1400. Extend psyad script to allow list of active
variables to be specified.
70) PR #1326 for #1292. Add support for GH_READINC access for continuous
fields in the LFRic API.
71) PR #1409 for #1383. Standardises and cleans-up dag_name() methods
and pins jsonschema to version 3.0.2 to fix jupyter notebooks with
older versions of Python.
72) PR #1147 for #430, #435 and #616. The NEMO API now uses the PSyIR
backend to generate output code.
73) PR #1395 for #1100. Replaces the first two LFRic examples with new
ones that use the 'dynamo0.3'/'lfric' domain instead of 'dynamo0.1'.
This is a step towards removing the 'dynamo0.1' domain.
74) PR #1397 for #1390. Add support for unary minus in SIR backend.
75) PR #1413 towards #1134. Moves the generation of some OpenCL
support routines from the generation stage to the transformation
stage.
76) PR #1420 for #1113. Completes the symbol-specialisation
functionality by adding support for attributes.
77) PR #1435 for #1425. Adds LFRic BuiltIns for subtraction of
field elements from a scalar.
78) PR #1412 for #1411. Adds visitor to PSyAD script and have it
call assignment transformation.
79) PR #1433 for #1378. Adds dependence checks to the hoist
transformation.
80) PR #1450 for #1291. Adds new dependence-analysis chapter to UG to
bring together documentation on 'old' and 'new' way of doing things.
81) PR #1436 for #1434. Adds new Max2Code transformation.
82) PR #1427 for #1405. Adds new PSyIR nodes for OMPTarget and
OMPLoop directives.
83) PR #1466 for #1465. Update SIR backend so that generated code
specifies cartesian grid (to match latest Dawn API).
84) PR #1469 for #1468. Update deprecated 'operatorPrecedence' to
'infixNotation' in 'src/psyclone/expression.py' for compatibility
with the pyparsing 3.01 update in GitHub.
85) PR #1455 for #1441. Extends PSyAD to cope with kernels
containing multiple assignment statements.
86) PR #1432 for #1168. Adds PSyIR lowering support for generic
PSyData nodes.
87) PR #1415 towards #1338. Adds the OMPTaskwaitTrans transformation
that resolves dependencies between task loops.
88) PR #1460 for #1454. Fix code generation to pass the number of
cells up to the last edge cell instead of the halo cells to the
'domain' kernels in the LFRic API.
89) PR #1438 towards #1134. Moves the creation of the OpenCL
set_args routines into the transformation.
90) PR #1480 for #1479 Makes PSyclone use the release version of
fparser (0.0.13) from pypi on installation (towards making a new
PSyclone release).
release 2.0.0 28th April 2021
1) #778 for #713. Use 'make' to execute all examples.
2) #782 for #780. Refactor FunctionSpace support and move it
out of dynamo0p3.py and into the lfric domain.
3) #785 for #679. Use a DataSymbol to represent the PSyIR Loop variable.
4) #795 for #793. Add the scope property to PSyIR node.
5) #779 for #763. Capture unrecognised declarations in a new
PSyIR UnknownType DataType.
6) #787 for #786. Introduce the PSyIR Call node and the RoutineSymbol.
7) #784 for #764. Update LFRic test kernels to use fs_continuity_mod.
8) #797 for #790. Add intrinsic type information to GOcean grid
properties in config file. Add OpenCL to GOcean/eg1 ('shallow').
9) #792 for #789. Return kernel argument objects instead of just names
from unique_declarations() and unique_declarations_by_intent().
10) #750 for #575. Add support for jupyter notebooks with links to
binder for some examples.
11) #804 for #801. Correct Fortran intents for invoke arguments in
unique_declns_by_intent().
12) #794 for #788. Re-structuring and tidying of DynArgDescriptor03
to become LFRicArgDescriptor.
13) #807 for #805. Put fparser2 bare DO constructs inside CodeBlocks.
14) #816 for #810 (fix GOcean examples to build dl_esm_inf if
required) and #730 (bring GOcean/eg5 up-to-date with latest dl_timer).
15) #811 for #783. Removes potential duplication of orientation
pointer declarations.
16) #808 for #800. Adds support in the PSyIR for the case when a
variable used to dimension an array has deferred or unknown type.
17) #822 for #820. Excludes return statements from profile and
directive regions. Also reworks the relevant code to exclude nodes
rather than include them which makes more sense as exclusion is
the exception.
18) #796 for #412. Adds a transformation to convert an assignment
to an array range into an explicit loop in the PSyIR.
19) #834 for #833. Adds the NINT intrinsic to the PSyIR and adds
support in fparser2reader for translating Fortran NINT into this
intrinsic.
20) #821 for #630. Extends symbol table functionality to allow
search of ancestor symbol tables.
21) #837 for #824. Introduce profile_PSyDataStart() and
profile_PSyDataStop() functions for NVTX profiling on NVIDIA.
22) #818 for #138. Modifies PSyclone tests which use GH_WRITE for
continuous fields when iterating over cells (as this is not
valid).
23) #842 for #841. Fixes gocean/eg1 so that PSYCLONE_CONFIG is
set correctly (and adds a .gitignore).
24) #825 for #646. Extends the dependency analysis so that it
works for all 'implicit' arguments passed to LFRic kernels.
25) #799 for #757. Extends kernel metadata such that multiple
implementations (in different precisions) of a single kernel
may now be specified through an interface block.
26) #854 for #848. Adds a tutorial in the form of Jupyter
notebooks. Covers fparser2, the NEMO API and PSyIR navigation.
27) #839 for #836. Improves the separation between the metadata
parsing and type information in the LFRic API.
28) #862 for #860. Fixes error when building documentation using
windows filesystems (removes symbolic links).
29) #812 towards #199. Adds PSyclone support for read-only
verification for LFRic and GOcean.
30) #829 for #827. Removes the NemoImplicitLoop node and the
associated NemoExplicitLoopTrans (now that the PSyIR has support
for assignments to array ranges).
31) #844 for #809. Improves PSyclone linelength support by
allowing linelength checks to be applied to modified or generated
code but not input code. The various options can be controlled by
command line switches.
32) #882 for #881. Removes specific version of pylint in setup.py.
33) #884 for #883. Restructure psyclone user guide to move
psyclone command section nearer the front of the document.
34) #823 for #471. Updates the access from INC to READWRITE for
those kernels that loop over DoFs.
35) #872 for #736 and #858. Routine Symbols are captured by the Fortran
front-end when parsing a Container.
36) #850 for #849 - basic support for distributed memory in GOcean.
N.B. dl_esm_inf does not yet have support for set_dirty/clean.
37) #875 for #774. Add support for new metadata format for scalar
arguments to LFRic kernels - sepecify the intrinsic type
separately.
38) #895 towards #871. Updates to HEAD of dl_esm_inf, introduces
FortCL as a submodule and alters the OpenCL code generation for gocean
in order to create a read_from_device function.
39) #865 for #832. Use Jinja to generate Fortran code for the
PSyData read-only verification library plus the dl_esm_inf
implementation of this.
40) #893 towards #866. Introduce support for "operates_on" instead of
"iterates_over" in LFRic kernel metadata.
41) #887 for #876. Create a generic symbol when no better information is
provided about a symbol and replace the symbol later on if more
information is found.
42) #904 for #903. Fixed an error in handling use statements (a
symbol clash when there should not be one).
43) #877 for #867. Bug fix to enable dependencies on HaloExchange
objects to be ignored while updating the dependency information.
44) #907 for #906. Refactor PSyDataTrans and subclasses to reduce
code duplication (especially in the __str__ and name methods).
45) #902 for #866. Update (virtually) all LFRic test kernels and
examples to use "operates_on" instead of "iterates_over" metadata.
46) #914 for #897. Update Coding Style in Dev guide with details
on raising Exceptions.
47) #878 for #832. Use Jinja and the PSyDataBase class for building
most of the PSyData profiling wrapper libraries.
48) #915 for #908. Alters the module generation for the LFRic PSy
layer so that use statements for LFRic field and operator modules are
only generated if required.
49) #922 for #921. Fixes pycodestyle errors in the code base.
50) #899 for #896. Adds a new PSyIR Routine Node that subclasses
Schedule and is subclassed by KernelSchedule.
51) #932 for #931. Fixes the dependency analysis in the case
that no existing Symbol is found for an array access. This is
a workaround until the NEMO API has a fully-functioning symbol
table enabling the dependency analysis to be based upon Symbol
information (#845).
52) #930 for #885. Bug fix for missing halo exchange before a
Builtin Kernel with a field argument with read-write access.
53) #919 for #916. Fixes errors in docstrings which show up when
generating the reference guide.
54) #938 for #937. Correct erroneous use of str(err) instead of
str(err.value) in symboltable_test.py.
55) #940 for #939. Bug fix to ensure utf-8 encoding is set in both
Python 2 and 3 when reading files. (Required when running in
non-Unicode locales.)
56) #942 for #941. Bug fix so that an exception is raised if a
directive is placed around a loop or code region containing a
codeblock.
57) #912 for #781. Adds support for '2D cross' stencils (i.e.
cross stencils where the directions of the arms is encoded
and their lengths may vary).
58) #956 towards #955. Changes the directory structure for
the dl_esm_inf netcdf PSyData wrapper library.
59) #954 for #745. Update PSyclone copy of the LFRic infrastructure
to create compilable and runnable LFRic examples.
60) #943 for #923. Adds generation of an in-kernel boundary mask
when generating OpenCL kernels for GOcean. (Fixes failures seen
for arbitrary problem sizes.)
61) #911 for #363. Add support for derived/structure types.
62) #953 for #952. Make RegionTrans and its subclasses accept a
node as input as well as a list of nodes.
63) PR #965. Add github actions for CI - runs flake8, pytest,
codecov and examples for Python 2.7, 3.5 and 3.8.
64) PR #975 for #972 - correct use of str(err) with str(err.value)
in a couple of recently-added tests.
65) PR #983 for #982 - Improve 'kernels' auto-profiling for NEMO API.
66) PR #977 for #976. Fix dimension parameter for Jinja templates
in the PSyData libraries.
67) PR #981 for #980. Move jupyter notebooks into a notebooks
subfolder of the tutorial directory ready for the addition of
"practicals" tutorials
68) PR #958 for #957. Add checks that raise an exception at code
generation time if there are any orphan OpenACC or OpenMP
directives e.g. OpenMP loop should be within OpenMP parallel.
69) PR #970 for #955. Use Jinja to generate the netcdf extraction
library for the GOcean API.
70) PR #986 for #819. Adds support for NetCDF data extraction
for the LFRic API.
71) PR #964 for #933. Adds nemo practical 'hands-on' tutorial
documentation and examples.
72) PR #905 for #989. Adds PSyData wrapper libraries for dl_esm_inf
and LFRic that provide NAN/infinity checking for real inputs/outputs
to a kernel. Also adds the NanTestNode and a NanTestTrans (which
inserts an instance of the former).
73) PR #961 for #936. Add hands-on tutorial for distributed memory
with the LFRic API.
74) PR #985 for #979. Hands-on tutorial for single-node optimisations
with the LFRic API.
75) PR #962 for #952. Hands-on tutorial for building an LFRic
application.
76) PR #995 for #971. Hands-on tutorial for using PSyData
functionality with the LFRic API.
77) PR #1000 for #988. Add missing dependencies in gungho_lib/Makefile
in LFRic building_code tutorials 3 and 4.
78) PR #1012 for #1001. Adds a wrapper script to find a Python
executable when building any of the PSyData wrapper libraries. (Required
because some distributions now only ship with 'python3').
79) PR #947 for #946. Array shape elements are DataNodes (References,
Literals or expressions). If an int is provided, it is transformed to
a Literal.
80) PR #1020 towards #363. Rename the PSyIR node Array to ArrayReference.
81) PR #1011 for #1008. Auto kernel profiling can fail after OpenMP
transformations.
82) PR #951 for #950. Adds f2pygen support for generating code from
PSyIR nodes.
83) PR #1026 for #1025. Removes code associated with, and
reference to, travis as we have migrated to github actions.
84) PR #944 towards #925. Added metadata support and constraints
tests for operates_on=domain kernels.