Skip to content

Latest commit

 

History

History
278 lines (201 loc) · 16.4 KB

NEWS.md

File metadata and controls

278 lines (201 loc) · 16.4 KB

ClimaCore.jl Release Notes

main

Bug fixes

  • Fixed writing/reading purely vertical spaces. PR 2102
  • Fixed correctness bug in reductions on GPUs. PR 2106

v0.14.20

  • We've added new convenience constructors for grids PR 1848. Here are links to the new constructors:

  • A strict = true keyword was added to rcompare, which checks that the types match. If strict = false, then rcompare will return true for FieldVectors and NamedTuples with the same properties but permuted order. For example:

    • rcompare((;a=1,b=2), (;b=2,a=1); strict = true) will return false and
    • rcompare((;a=1,b=2), (;b=2,a=1); strict = false) will return true
  • We've added new datalayouts: VIJHF,IJHF,IHF,VIHF, to explore their performance compared to our existing datalayouts: VIJFH,IJFH,IFH,VIFH. PR #2055, PR #2052.

  • We've refactored some modules to use less internals. PR #2053, PR #2052, #2051, #2049.

  • Some work was done in attempt to reduce specializations and compile time. PR #2042, #2041

Fix lower compat bounds

ClimaCore had incorrect lower bounds for certain packages. PR #2078 fixes the lower bounds and adds a GitHub Action workflow to test it. ClimaCore now requires Julia 1.10 or greater.

v0.14.19

Fix undefined behavior in DataLayouts

PR #2034 fixes some undefined behavior in the DataLayout module. This bug was manifesting itself as a world age error in some applications that are using Julia 1.11.

New convenience constructors for DataLayouts

PR #2033 introduces new constructors for DataLayouts. Instead of writing

array = rand(FT, Nv, Nij, Nij, 3, Nh)
data = VIJFH{S, Nv, Nij}(array)

You can now write

data = VIJFH{S}(ArrayType{FT}, rand; Nv, Nij, Nh)

and grab the array with parent(data) (if you need).

Note: These constructors are meant to be used in tests and interactive use, not in performance sensitive modules (due to their lack of inferrability).

v0.14.18

  • Fixed multiple-field solve for land simulations PR #2025.
  • Fixed Julia 1.11 PR #2018.
  • Nh was turned back into a dynamic parameter, in order to alleviate compile times PR #2005.
  • Defined some convenience methods #2012

Fix equality for FieldVectors with different type

Due to a bug, == was not recursively checking FieldVectors with different types, which resulted in false positives. This is now fixed and FieldVectors with different types are always considered different.

Fix restarting simulations from Spaces with deep = true

Prior to this change, the ClimaCore.InputOutput module did not save whether a Space was constructed with deep = true. This meant that restarting a simulation from a HDF5 file led to inconsistent and incorrect spaces and Fields. This affected only extruded 3D spectral spaces.

We now expect Spaces read from a file to be bitwise identical to the original one.

PR #2021.

v0.14.17

  • Fixed some type instabilities PR #2004
  • More fixes to higher resolution column cases for the GPU #1854

v0.14.16

  • Extended create_dss_buffer and weighted_dss! for FieldVectors, rather than just Fields. PR #2000.

  • Fix restarting simulations from Spaces with enable_bubble = true

Prior to this change, the ClimaCore.InputOutput module did not save whether a Space was constructed with enable_bubble = true. This meant that restarting a simulation from a HDF5 file led to inconsistent and incorrect spaces and Fields. This affected only 2D spectral spaces (and extruded ones that have this type of horizontal space).

We now expect Spaces read from a file to be bitwise identical to the original one.

PR #1999.

v0.14.15

  • Added support for mixing extruded and horizontal spaces in GPU kernels. PR #1987.

v0.14.14

  • Inference was fixed for some broadcast expressions involving columns PR #1984.

v0.14.13

  • CUDA kernel launch configurations have been tuned to improve performance, and now allows for high resolution in the vertical direction PR #1969, issue #1854 closed.

  • DSS was refactored, and machine precision changes can be expected. PR #1958.

v0.14.12

  • Added hyperbolic tangent stretching. PR #1930.

v0.14.11

  • Support for matrix fields on spectral and point spaces was added, PR #1884.
  • Support for 3-component DSS transform was added, PR #1693.
  • Support for column-wise "accumulate"/"reduce" operations were added, PR #1903. These abstractions will allow us to group, paralellize and optimize more column-wise work on the GPU.
  • A new macro, Fields.@rprint_diff was added, which recursively print differences between two FieldVectors (of the same type) (PR #1886).
  • Julia 1.11 fixes (PR #1883)
  • Nh has been added to the type parameter space, which allows us to more flexibly write performant backend kernels (PR #1894). This was leveraged in PR #1898, and may result in slightly more performant kernels.

v0.14.10

  • Various performance tweaks (PRs #1840, #1837, #1843, #1839).
  • CPU/GPU kernels are now determined by dispatching, instead of specializing, which should (hopefully) have generally fixed GPU dispatching issues (PR #1863).
  • Matrix multiplication kernels have been improved (PR #1880).
  • Support for the following methods have been deprecated (PR #1821, ):
    • IntervalTopology(::Mesh) in favor of using IntervalTopology(::ClimaComms.AbstractDevice, ::Mesh)
    • FaceFiniteDifferenceSpace(::Mesh) in favor of using FaceFiniteDifferenceSpace(::ClimaComms.AbstractDevice, ::Mesh)
    • CenterFiniteDifferenceSpace(::Mesh) in favor of using CenterFiniteDifferenceSpace(::ClimaComms.AbstractDevice, ::Mesh)
    • FiniteDifferenceGrid(::Mesh) in favor of using FiniteDifferenceGrid(::ClimaComms.AbstractDevice, ::Mesh)

v0.14.9

  • GPU dispatching with copyto! and fill! have been fixed PR #1802.

v0.14.8

  • Added FieldMatrixWithSolver, a wrapper that helps defining implicit Jacobians. PR #1788

v0.14.6

  • Added array2field(::Field) and field2array(::Field) convenience functions, to help facilitate use with RRTMGP. PR #1768

  • Nv is now a type parameter in DataLayouts that have vertical levels. As a result, users can use DataLayouts.nlevels(::AbstractData) to obtain a compile-time constant for the number of vertical levels.

  • Added interpolate(field, target_hcoords, target_zcoord) convenience function so that the Remapper does not have to be explicitely constructed. PR #1764

v0.14.5

  • run_field_matrix_solver! was fixed for column spaces, and tests were added to ensure it doesn't break in the future. PR #1750
  • We're now using local memory (MArrays) in the band_matrix_solve!, which has improved performance. PR #1735.
  • We've specialized some cases in run_field_matrix_solver!, which results in more efficient kernels being launched. PR #1732.
  • We've reduced memory reads in the band_matrix_solve! for tridiagonal systems, improving its performance. PR #1731.
  • We've added NVTX annotations in ClimaCore functions, so that we have a more granular trace of performance. PRs #1726, #1723.

v0.14.0

  • Extend adapt_structure for all operator and boundary condition types. Also use unrolled_map in multiply_matrix_at_index to avoid the recursive inference limit when compiling nested matrix operations. PR #1684
  • Remappers can now process multiple Fields at the same time if created with some buffer_lenght > 1. PR (#1669) Machine-precision differences are expected. This change is breaking because remappers now return the same array type as the input field.
  • We inlined the multiple_field_solve kernels, which should improve performance. PR #1715.
  • We added support for MultiBroadcastFusion, which allows users to fuse similar space point-wise broadcast expressions via Fields.@fused_direct. PR #1641.

v0.13.4

  • We fixed some fieldvector broadcasting on Julia 1.9. PR #1658.
  • We fixed an inference failure with matrix field broadcasting. PR #1683.

v0.13.3

  • We now always inline for all ClimaCore kernels. PR #1647. This can result in more brittle inference (due to compiler heuristics). Technically, this is not a breaking change, but some code changes may be needed in practice.

v0.13.2

  • fixed array allocation for interpolation on CPU. PR #1643.

v0.13.1

  • fixed edge case in interpolation that led to incorrect vertical interpolation. PR #1640.
  • fixed interpolate! for MPI runs. PR #1642.

v0.13.0

  • support for many deprecated methods have been dropped PR #1632.
  • Slight performance improvement by replacing rdiv with rmul. PR (#1496) Machine-precision differences are expected.
  • Rewritten distributed_remapping. New distributed_remapping is non-allocating and up to 1000x faster (on GPUs). New distributed_remapping no longer supports the physical_z argument (this option is still available in Remapping.interpolate_column). New interpolate! function is available for remapping in-place. The new preferred way to define a Rampper is Remapper(space, target_hcoords, target_zcoords) (instead of Remapper(target_hcoords, target_zcoords, space)). PR (#1630)

v0.12.1

  • Started changelog
  • Fixed matrix field iterative solver tests.
  • Specialize on diagonal fieldvector broadcasts to skip uninferred check_broadcast_axes PR #1615, Issue #1465.
  • Fixed inference errors when not debugging PR #1617, Issue #2597.