Skip to content

Commit

Permalink
const auto ptd -> const auto& ptd (AMReX-Codes#3983)
Browse files Browse the repository at this point in the history
This could be more efficient depending on how well a given compiler does
RVO.

The proposed changes:
- [ ] fix a bug or incorrect behavior in AMReX
- [ ] add new capabilities to AMReX
- [ ] changes answers in the test suite to more than roundoff level
- [ ] are likely to significantly affect the results of downstream AMReX
users
- [ ] include documentation in the code and/or rst files, if appropriate
  • Loading branch information
atmyers authored Jun 10, 2024
1 parent 8255d75 commit 5caba6e
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Src/Particle/AMReX_ParticleCommunication.H
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ void packBuffer (const PC& pc, const ParticleCopyOp& op, const ParticleCopyPlan&
auto index = std::make_pair(gid, tid);

auto& src_tile = plev.at(index);
const auto ptd = src_tile.getConstParticleTileData();
const auto& ptd = src_tile.getConstParticleTileData();

int num_copies = op.numCopies(gid, lev);
if (num_copies == 0) { continue; }
Expand Down
22 changes: 11 additions & 11 deletions Src/Particle/AMReX_ParticleReduce.H
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ ReduceSum (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(kv.first);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_op.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) -> ReduceTuple {
return particle_detail::call_f(f, ptd, i);
Expand Down Expand Up @@ -224,7 +224,7 @@ ReduceSum (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
for (int i = 0; i < np; ++i) {
sm += particle_detail::call_f(f, ptd, i);
}
Expand Down Expand Up @@ -394,7 +394,7 @@ ReduceMax (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(kv.first);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_op.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) -> ReduceTuple {
return particle_detail::call_f(f, ptd, i);
Expand Down Expand Up @@ -425,7 +425,7 @@ ReduceMax (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
for (int i = 0; i < np; ++i) {
r = std::max(r, particle_detail::call_f(f, ptd, i));
}
Expand Down Expand Up @@ -595,7 +595,7 @@ ReduceMin (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(kv.first);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_op.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) -> ReduceTuple {
return particle_detail::call_f(f, ptd, i);
Expand Down Expand Up @@ -626,7 +626,7 @@ ReduceMin (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
for (int i = 0; i < np; ++i) {
r = std::min(r, particle_detail::call_f(f, ptd, i));
}
Expand Down Expand Up @@ -791,7 +791,7 @@ ReduceLogicalAnd (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(kv.first);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_op.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) -> ReduceTuple {
return particle_detail::call_f(f, ptd, i);
Expand Down Expand Up @@ -822,7 +822,7 @@ ReduceLogicalAnd (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
for (int i = 0; i < np; ++i) {
r = r && particle_detail::call_f(f, ptd, i);
}
Expand Down Expand Up @@ -987,7 +987,7 @@ ReduceLogicalOr (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(kv.first);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_op.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) -> ReduceTuple
{
Expand Down Expand Up @@ -1019,7 +1019,7 @@ ReduceLogicalOr (PC const& pc, int lev_min, int lev_max, F const& f)
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
for (int i = 0; i < np; ++i) {
r = r || particle_detail::call_f(f, ptd, i);
}
Expand Down Expand Up @@ -1254,7 +1254,7 @@ ParticleReduce (PC const& pc, int lev_min, int lev_max, F const& f, ReduceOps& r
{
const auto& tile = plev.at(grid_tile_ids[pmap_it]);
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
reduce_ops.eval(np, reduce_data,
[=] AMREX_GPU_DEVICE (const int i) noexcept
{
Expand Down
2 changes: 1 addition & 1 deletion Src/Particle/AMReX_ParticleUtil.H
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ numParticlesOutOfRange (Iterator const& pti, IntVect nGrow)

const auto& tile = pti.GetParticleTile();
const auto np = tile.numParticles();
const auto ptd = tile.getConstParticleTileData();
const auto& ptd = tile.getConstParticleTileData();
const auto& geom = pti.Geom(pti.GetLevel());

const auto domain = geom.Domain();
Expand Down
10 changes: 5 additions & 5 deletions Src/Particle/AMReX_WriteBinaryParticleData.H
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ template <template <class, class> class Container,
std::enable_if_t<RunOnGpu<typename Container<int, Allocator>::allocator_type>::value>
fillFlags (Container<int, Allocator>& pflags, const PTile& ptile, F const& f)
{
const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
const auto np = ptile.numParticles();
pflags.resize(np, 0);
auto flag_ptr = pflags.data();
Expand All @@ -57,7 +57,7 @@ template <template <class, class> class Container,
std::enable_if_t<!RunOnGpu<typename Container<int, Allocator>::allocator_type>::value>
fillFlags (Container<int, Allocator>& pflags, const PTile& ptile, F const& f)
{
const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
const auto np = ptile.numParticles();
pflags.resize(np, 0);
auto flag_ptr = pflags.data();
Expand Down Expand Up @@ -215,7 +215,7 @@ packIOData (Vector<int>& idata, Vector<ParticleReal>& rdata, const PC& pc, int l
auto idata_d_ptr = idata_d.data();
auto rdata_d_ptr = rdata_d.data();

const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
amrex::ParallelFor(num_copies,
[=] AMREX_GPU_DEVICE (int pindex) noexcept
{
Expand Down Expand Up @@ -1019,7 +1019,7 @@ void WriteBinaryParticleDataAsync (PC const& pc,
for (unsigned i = 0; i < tile_map[grid].size(); i++) {
auto ptile_index = std::make_pair(grid, tile_map[grid][i]);
const auto& pbox = (*myptiles)[lev][ptile_index];
const auto ptd = pbox.getConstParticleTileData();
const auto& ptd = pbox.getConstParticleTileData();
for (int pindex = 0; pindex < pbox.numParticles(); ++pindex)
{
const auto& soa = pbox.GetStructOfArrays();
Expand Down Expand Up @@ -1096,7 +1096,7 @@ void WriteBinaryParticleDataAsync (PC const& pc,
for (unsigned i = 0; i < tile_map[grid].size(); i++) {
auto ptile_index = std::make_pair(grid, tile_map[grid][i]);
const auto& pbox = (*myptiles)[lev][ptile_index];
const auto ptd = pbox.getConstParticleTileData();
const auto& ptd = pbox.getConstParticleTileData();
for (int pindex = 0;
pindex < pbox.numParticles(); ++pindex)
{
Expand Down
2 changes: 1 addition & 1 deletion Tests/Particles/ParallelContext/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ class TestParticleContainer
int gid = mfi.index();
int tid = mfi.LocalTileIndex();
const auto& ptile = plev.at(std::make_pair(gid, tid));
const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
const size_t np = ptile.numParticles();

AMREX_FOR_1D ( np, i,
Expand Down
2 changes: 1 addition & 1 deletion Tests/Particles/Redistribute/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ class TestParticleContainer
int gid = mfi.index();
int tid = mfi.LocalTileIndex();
const auto& ptile = plev.at(std::make_pair(gid, tid));
const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
const size_t np = ptile.numParticles();

AMREX_FOR_1D ( np, i,
Expand Down
2 changes: 1 addition & 1 deletion Tests/Particles/RedistributeSOA/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ class TestParticleContainer
int gid = mfi.index();
int tid = mfi.LocalTileIndex();
const auto & ptile = plev.at(std::make_pair(gid, tid));
const auto ptd = ptile.getConstParticleTileData();
const auto& ptd = ptile.getConstParticleTileData();
const size_t np = ptile.numParticles();

AMREX_FOR_1D ( np, i,
Expand Down

0 comments on commit 5caba6e

Please sign in to comment.