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
79 lines
3.2 KiB
Plaintext
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();
|
|
}
|