Skip to content

Commit

Permalink
Replace use of LoopVectorization in local inertial model `stable_ti…
Browse files Browse the repository at this point in the history
…mestep` function with `Polyester` (`reduction`) (#390)

* Update `Project.toml` and `Manifest.toml`
Polyester v0.7.10 is required for using `reduction` of an already initialized variable.

* Replace use of `LoopVectorization` in local inertial model `stable_timestep` function
The internal time step of the local inertial model (`stable_timestep` function) can get zero when `LoopVectorization` is applied (@tturbo) to the for loop of these functions. This issue occured on a virtual machine, Windows 10 Enterprise, with Intel(R) Xeon(R) Gold 6144 CPU (2 processors). This has been fixed by replacing @tturbo by `reduction` of the `Polyester` package.

* Update changelog
  • Loading branch information
verseve committed May 14, 2024
1 parent 83fa97d commit 00be215
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 46 deletions.
68 changes: 35 additions & 33 deletions Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

julia_version = "1.10.0"
manifest_format = "2.0"
project_hash = "50486bdee45216d8f065b140dcb0fcee530fef2c"
project_hash = "d07ae13655ba6d661946c37e1c2a11d4acab567d"

[[deps.AbstractTrees]]
git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177"
Expand All @@ -11,9 +11,9 @@ version = "0.4.5"

[[deps.Adapt]]
deps = ["LinearAlgebra", "Requires"]
git-tree-sha1 = "0fb305e0253fd4e833d486914367a2ee2c2e78d0"
git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099"
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
version = "4.0.1"
version = "4.0.4"
weakdeps = ["StaticArrays"]

[deps.Adapt.extensions]
Expand All @@ -25,20 +25,21 @@ version = "1.1.1"

[[deps.ArnoldiMethod]]
deps = ["LinearAlgebra", "Random", "StaticArrays"]
git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae"
git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6"
uuid = "ec485272-7323-5ecc-a04f-4719b315124d"
version = "0.2.0"
version = "0.4.0"

[[deps.ArrayInterface]]
deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "881e43f1aa014a6f75c8fc0847860e00a1500846"
deps = ["Adapt", "LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "44691067188f6bd1b2289552a23e4b7572f4528d"
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
version = "7.8.0"
version = "7.9.0"

[deps.ArrayInterface.extensions]
ArrayInterfaceBandedMatricesExt = "BandedMatrices"
ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices"
ArrayInterfaceCUDAExt = "CUDA"
ArrayInterfaceChainRulesExt = "ChainRules"
ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore"
ArrayInterfaceReverseDiffExt = "ReverseDiff"
ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore"
Expand All @@ -48,6 +49,7 @@ version = "7.8.0"
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2"
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
Expand Down Expand Up @@ -123,9 +125,9 @@ version = "0.3.1"

[[deps.DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "1fb174f0d48fe7d142e1109a10636bc1d14f5ac2"
git-tree-sha1 = "97d79461925cdb635ee32116978fc735b9463a39"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.17"
version = "0.18.19"

[[deps.Dates]]
deps = ["Printf"]
Expand Down Expand Up @@ -173,15 +175,15 @@ version = "1.3.1"

[[deps.Graphs]]
deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"]
git-tree-sha1 = "899050ace26649433ef1af25bc17a815b3db52b7"
git-tree-sha1 = "3863330da5466410782f2bffc64f3d505a6a8334"
uuid = "86223c79-3864-5bf0-83f7-82e725a168b6"
version = "1.9.0"
version = "1.10.0"

[[deps.HDF5_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"]
git-tree-sha1 = "e4591176488495bf44d7456bd73179d87d5e6eab"
git-tree-sha1 = "82a471768b513dc39e471540fdadc84ff80ff997"
uuid = "0234f1f7-429e-5d53-9886-15a909be8d59"
version = "1.14.3+1"
version = "1.14.3+3"

[[deps.HostCPUFeatures]]
deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"]
Expand Down Expand Up @@ -288,9 +290,9 @@ version = "1.0.3"

[[deps.LoopVectorization]]
deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"]
git-tree-sha1 = "0f5648fbae0d015e3abe5867bca2b362f67a5894"
git-tree-sha1 = "a13f3be5d84b9c95465d743c82af0b094ef9c2e2"
uuid = "bdcacae8-1622-11e9-2a5c-532679323890"
version = "0.12.166"
version = "0.12.169"

[deps.LoopVectorization.extensions]
ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"]
Expand Down Expand Up @@ -369,9 +371,9 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.2.0"

[[deps.OffsetArrays]]
git-tree-sha1 = "6a731f2b5c03157418a20c12195eb4b74c8f8621"
git-tree-sha1 = "e64b4f5ea6b7389f6f046d13d4896a8f9c1ba71e"
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
version = "1.13.0"
version = "1.14.0"
weakdeps = ["Adapt"]

[deps.OffsetArrays.extensions]
Expand All @@ -390,9 +392,9 @@ version = "4.1.6+0"

[[deps.OpenSSL_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "60e3045590bd104a16fefb12836c00c0ef8c7f8c"
git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "3.0.13+0"
version = "3.0.13+1"

[[deps.OrderedCollections]]
git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5"
Expand All @@ -412,9 +414,9 @@ version = "1.10.0"

[[deps.Polyester]]
deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"]
git-tree-sha1 = "fca25670784a1ae44546bcb17288218310af2778"
git-tree-sha1 = "09f59c6dda37c7f73efddc5bdf6f92bc940eb484"
uuid = "f517fe37-dbe3-4b94-8317-1923a5111588"
version = "0.7.9"
version = "0.7.12"

[[deps.PolyesterWeave]]
deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"]
Expand All @@ -424,9 +426,9 @@ version = "0.2.1"

[[deps.PrecompileTools]]
deps = ["Preferences"]
git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f"
git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.2.0"
version = "1.2.1"

[[deps.Preferences]]
deps = ["TOML"]
Expand Down Expand Up @@ -536,10 +538,10 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
version = "1.10.0"

[[deps.StrideArraysCore]]
deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"]
git-tree-sha1 = "d6415f66f3d89c615929af907fdc6a3e17af0d8c"
deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"]
git-tree-sha1 = "b518da45c50dfab8384125ba829f1739bda41034"
uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da"
version = "0.5.2"
version = "0.5.5"

[[deps.SuiteSparse]]
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
Expand Down Expand Up @@ -586,15 +588,15 @@ uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[[deps.VectorizationBase]]
deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"]
git-tree-sha1 = "7209df901e6ed7489fe9b7aa3e46fb788e15db85"
git-tree-sha1 = "ac377f0a248753a1b1d58bbc92a64f5a726dfb71"
uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f"
version = "0.21.65"
version = "0.21.66"

[[deps.XML2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"]
git-tree-sha1 = "07e470dabc5a6a4254ffebc29a1b3fc01464e105"
git-tree-sha1 = "532e22cf7be8462035d092ff21fada7527e2c488"
uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
version = "2.12.5+0"
version = "2.12.6+0"

[[deps.Zlib_jll]]
deps = ["Libdl"]
Expand All @@ -603,9 +605,9 @@ version = "1.2.13+1"

[[deps.Zstd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c"
git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b"
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
version = "1.5.5+0"
version = "1.5.6+0"

[[deps.libaec_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ LoggingExtras = "0.4.6,0.5,1"
LoopVectorization = "0.12"
NCDatasets = "0.13.2, 0.14"
Parameters = "0.12"
Polyester = "0.7"
Polyester = ">=0.7.10"
Polynomials = "3,4"
ProgressLogging = "0.1"
QuadGK = "2"
Expand Down
8 changes: 6 additions & 2 deletions docs/src/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
is fixed by using `divrem` for the computation of the number of `steps` in this function.
An error is thrown when the absolute remainder of `divrem` is larger than `eps()`, or when
the number of `steps` is negative.
- Fixed internal and external broken links in docs.

- Fixed internal and external broken links in docs.
- The internal time step of the local inertial model (`stable_timestep` function) can get
zero when `LoopVectorization` is applied (`@tturbo`) to the for loop of these functions.
This issue occured on a virtual machine, Windows 10 Enterprise, with Intel(R) Xeon(R) Gold
6144 CPU (2 processors). This has been fixed by replacing `@tturbo` with `reduction` of

### Changed
- Stop exposing scalar variables through BMI. The `BMI.get_value_ptr` function was not
working correctly for scalar model variables (a `view` was applied). Only a few scalar
Expand Down
18 changes: 8 additions & 10 deletions src/flow.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1141,23 +1141,21 @@ dt = alpha * (Δx / sqrt(g max(h))
"""
function stable_timestep(sw::ShallowWaterRiver{T})::T where {T}
dt_min = T(Inf)
@tturbo for i = 1:sw.n
dt = sw.alpha * sw.dl[i] / sqrt(sw.g * sw.h[i])
dt_min = dt < dt_min ? dt : dt_min
@batch per = thread reduction = ((min, dt_min),) for i = 1:sw.n
@fastmath @inbounds dt = sw.alpha * sw.dl[i] / sqrt(sw.g * sw.h[i])
dt_min = min(dt, dt_min)
end
dt_min = isinf(dt_min) ? T(10.0) : dt_min
return dt_min
end

function stable_timestep(sw::ShallowWaterLand{T})::T where {T}
dt_min = T(Inf)
@tturbo for i = 1:sw.n
dt = IfElse.ifelse(
sw.rivercells[i] == 0,
sw.alpha * min(sw.xl[i], sw.yl[i]) / sqrt(sw.g * sw.h[i]),
T(Inf),
)
dt_min = dt < dt_min ? dt : dt_min
@batch per = thread reduction = ((min, dt_min),) for i = 1:sw.n
@fastmath @inbounds dt =
sw.rivercells[i] == 0 ? sw.alpha * min(sw.xl[i], sw.yl[i]) / sqrt(sw.g * sw.h[i]) :
T(Inf)
dt_min = min(dt, dt_min)
end
dt_min = isinf(dt_min) ? T(10.0) : dt_min
return dt_min
Expand Down

0 comments on commit 00be215

Please sign in to comment.