Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 9 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,9 @@ jobs:
strategy:
fail-fast: false
matrix:
version:
- '1'
os:
- ubuntu-latest
arch:
- x64
include:
- {version: '1', os: ubuntu-latest, arch: x64}
- {version: '1', os: macos-14, arch: aarch64}
steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v2
Expand All @@ -42,12 +39,9 @@ jobs:
strategy:
fail-fast: false
matrix:
version:
- '1'
os:
- ubuntu-latest
arch:
- x64
include:
- {version: '1', os: ubuntu-latest, arch: x64}
- {version: '1', os: macos-14, arch: aarch64}
steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v2
Expand All @@ -67,12 +61,9 @@ jobs:
strategy:
fail-fast: false
matrix:
version:
- '1'
os:
- ubuntu-latest
arch:
- x64
include:
- {version: '1', os: ubuntu-latest, arch: x64}
- {version: '1', os: macos-14, arch: aarch64}
steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v2
Expand Down
6 changes: 2 additions & 4 deletions src/block_arrays.jl
Original file line number Diff line number Diff line change
Expand Up @@ -297,10 +297,8 @@ function distance_eval_body(d,a::BVector,b::BVector)
partials = map(blocks(a),blocks(b)) do ai,bi
distance_eval_body(d,ai,bi)
end
s = reduce((i,j)->Distances.eval_reduce(d,i,j),
partials,
init=Distances.eval_start(d, a, b))
s
init_val = Distances.eval_start(d, a, b)
reduce_for_distance(d, partials, init_val)
end

struct BroadcastedBArray{A}
Expand Down
30 changes: 26 additions & 4 deletions src/p_vector.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@

function local_values end

function reduce_for_distance(d, partials, init)
reduce((i, j) -> Distances.eval_reduce(d, i, j), partials; init)
end

reduce_for_distance(::Distances.Chebyshev, partials, init) =
reduce(max, partials; init)

for T in (Distances.Euclidean,
Distances.SqEuclidean,
Distances.PeriodicEuclidean,
Distances.Cityblock,
Distances.TotalVariation,
Distances.Minkowski,
Distances.Hamming,
Distances.ChiSqDist,
Distances.KLDivergence,
Distances.GenKLDivergence)
# all Distances.metrics except Jaccard, RogersTanimoto, CosineDist,
# RenyiDivergence, BrayCurtis, SpanNormDist, since these either operate with
# tuples or have a complex reduction logic.
@eval reduce_for_distance(::$(T), partials, init) =
reduce(+, partials; init)
end

function own_values end

function ghost_values end
Expand Down Expand Up @@ -1328,10 +1352,8 @@ function distance_eval_body(d,a::PVector,b::PVector)
return s
end
end
s = reduce((i,j)->Distances.eval_reduce(d,i,j),
partials,
init=Distances.eval_start(d, a, b))
s
init_val = Distances.eval_start(d, a, b)
reduce_for_distance(d, partials, init_val)
end

# New stuff
Expand Down
11 changes: 4 additions & 7 deletions src/primitives.jl
Original file line number Diff line number Diff line change
Expand Up @@ -806,13 +806,10 @@ function ExchangeGraph_impl_with_neighbors(snd_ids,neighbors::ExchangeGraph)
is_included_all=map(snd_ids_a, snd_ids_b) do snd_ids_a, snd_ids_b
all(i->i in snd_ids_b,snd_ids_a)
end
result=false
and(a,b)=a && b
is_included_all=reduction(and,is_included_all,destination=:all,init=one(eltype(is_included_all)))
map(is_included_all) do is_included_all
result = is_included_all
end
result
# perform a global AND using built-in & operator (static MPI-op)
is_included_all = reduction(&, is_included_all; destination=:all, init=one(eltype(is_included_all)))
# extract the single boolean result
collect(is_included_all)[1]
end
@boundscheck is_included(snd_ids,neighbors.snd) || error("snd_ids must be a subset of neighbors.snd")
rank = linear_indices(snd_ids)
Expand Down
Loading