Files
TheRock/rocm-systems/projects/rocprofiler-systems/examples/hpc/jacobi-hip/HaloExchange.hip
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

79 lines
3.2 KiB
Plaintext

/***************************************************************************
Copyright (c) 2022-2023, Advanced Micro Devices, Inc. All rights reserved.
***************************************************************************/
#include "Jacobi.hpp"
#include "markers.h"
void HaloExchange(grid_t& grid, mesh_t& mesh,
hipStream_t stream, dfloat* d_U) {
//copy each side to the haloBuffer
BEGIN_RANGE("Halo D2H", "Halo Exchange");
if (grid.Neighbor[SIDE_DOWN]>-1)
SafeHipCall(hipMemcpy2DAsync(mesh.sendBuffer + mesh.sideOffset[SIDE_DOWN],
mesh.Nx*sizeof(dfloat),
d_U,
mesh.Nx*sizeof(dfloat),
mesh.Nx*sizeof(dfloat), 1,
hipMemcpyDeviceToHost, stream));
if (grid.Neighbor[SIDE_UP]>-1)
SafeHipCall(hipMemcpy2DAsync(mesh.sendBuffer + mesh.sideOffset[SIDE_UP],
mesh.Nx*sizeof(dfloat),
d_U+(mesh.Ny-1)*mesh.Nx,
mesh.Nx*sizeof(dfloat),
mesh.Nx*sizeof(dfloat) , 1,
hipMemcpyDeviceToHost, stream));
if (grid.Neighbor[SIDE_LEFT]>-1)
SafeHipCall(hipMemcpy2DAsync(mesh.sendBuffer + mesh.sideOffset[SIDE_LEFT],
1*sizeof(dfloat),
d_U,
mesh.Nx*sizeof(dfloat),
1*sizeof(dfloat), mesh.Ny,
hipMemcpyDeviceToHost, stream));
if (grid.Neighbor[SIDE_RIGHT]>-1)
SafeHipCall(hipMemcpy2DAsync(mesh.sendBuffer + mesh.sideOffset[SIDE_RIGHT],
1*sizeof(dfloat),
d_U+mesh.Nx-1,
mesh.Nx*sizeof(dfloat),
1*sizeof(dfloat), mesh.Ny,
hipMemcpyDeviceToHost, stream));
//wait for the data to arrive on host
hipStreamSynchronize(stream);
END_RANGE();
//post recvs & sends
BEGIN_RANGE("MPI Exchange", "Halo Exchange");
for (int s=0;s<NSIDES;s++) {
if (grid.Neighbor[s]>-1) {
MPI_Irecv(mesh.recvBuffer + mesh.sideOffset[s], mesh.sideLength[s], MPI_DFLOAT,
grid.Neighbor[s], 0, grid.comm, mesh.requests+2*s);
MPI_Isend(mesh.sendBuffer + mesh.sideOffset[s], mesh.sideLength[s], MPI_DFLOAT,
grid.Neighbor[s], 0, grid.comm, mesh.requests+2*s+1);
}
}
// Wait for all sent messages to have left and received messages to have arrived
MPI_Waitall(2*NSIDES, mesh.requests, mesh.status);
END_RANGE();
//copy recvbuffer to haloBuffer on device
BEGIN_RANGE("Halo H2D", "Halo Exchange");
for (int s=0;s<NSIDES;s++) {
if (grid.Neighbor[s]>-1) {
SafeHipCall(hipMemcpyAsync(mesh.d_haloBuffer + mesh.sideOffset[s],
mesh.recvBuffer + mesh.sideOffset[s],
mesh.sideLength[s]*sizeof(dfloat),
hipMemcpyHostToDevice, stream));
}
}
//wait for the data to arrive on device
hipStreamSynchronize(stream);
END_RANGE();
}