Uploaded image for project: 'SAFe Program'
  1. SAFe Program
  2. SP-910

Create an RDMA-based receive code for ingest into the Imaging/Gain Calibration Pipeline

Change Owns to Parent OfsSet start and due date...
    XporterXMLWordPrintable

Details

    • Data Processing
    • 1
    • 1
    • 0
    • Team_NZAPP
    • Sprint 4
    • Hide

      This feature is scheduled to be demonstrated in DP System Demo 7.1 (https://confluence.skatelescope.org/display/SE/2020-06-17+DP+ART+System+Demo+7.1).

      The updated RDMA code is available at https://gitlab.com/ska-telescope/rdma-data-transport/ and contains the files RDMAapi.c and RDMAapi.h. This can also be used to simulate and FPGA sending (eg one block of) visibilties via RDMA by:

      ./receive -f_../visibilityfiles/GLEAM_small_subset_intensity_SP_ -b1 -m1046528 -s

      This presumes there is a visibility file called ../visibilityfiles/GLEAM_small_subset_intensity_SP.0

      The snapshot imaging pipeline uses the code at https://gitlab.com/ska-telescope/sep_pipeline_imaging with the following changes:

      RDMAapi.c should be put in the folder /imaging/src
      RDMAapi.h should be put in the folder /imaging
      The file /imaging/CMakeLists.txt should include the lines:
      cuda_add-executable(
      ... existing executables
      src/RDMAapi.c
      )
      The file /imaging/CMakeLists.txt should include the lines:
      target_link_libraries(... existing libraries rdmacm ibverbs)
      The file /imaging/src/controller.cpp should include the lines (at line 32):
      #ifdef __cplusplus
      extern "C"

      { #endif #include "../RDMAapi.h" #ifdef __cplusplus }

      #endif
      The file /imaging/src/controller.cpp should include the lines in function load_vis_into_memory_regions (at line 166):
      uint32_t messageSize = regions->num_visibilities * sizeof(Complex);
      int numMemoryBlocks = NUM_MEM_REGIONS;
      int numContiguousMessages = 1;
      void **memoryBlocks = NULL;
      memoryBlocks = (void**)malloc(sizeof(void *) * numMemoryBlocks);
      int memoryBlockSize = messageSize*numContiguousMessages;
      for (int blockIndex=0; blockIndex<numMemoryBlocks; blockIndex++)

      { memoryBlocks[blockIndex] = (void*)regions->memory_region[blockIndex]; }

      rdmaTransferMemoryBlocksWithDefaultDevice(RECV_MODE, memoryBlocks, messageSize,
      numMemoryBlocks, 1, 0, 0, NULL);
      for (int blockIndex=0; blockIndex<numMemoryBlocks; blockIndex++)

      { memory_region_ready[blockIndex] = true; // Note eventually want to make this dynamic so can execute as each memory region received }

      free(memoryBlocks);
      return 0;

      Show
      This feature is scheduled to be demonstrated in DP System Demo 7.1 ( https://confluence.skatelescope.org/display/SE/2020-06-17+DP+ART+System+Demo+7.1 ). The updated RDMA code is available at https://gitlab.com/ska-telescope/rdma-data-transport/ and contains the files RDMAapi.c and RDMAapi.h. This can also be used to simulate and FPGA sending (eg one block of) visibilties via RDMA by: ./receive -f_../visibilityfiles/GLEAM_small_subset_intensity_SP_ -b1 -m1046528 -s This presumes there is a visibility file called ../visibilityfiles/GLEAM_small_subset_intensity_SP.0 The snapshot imaging pipeline uses the code at https://gitlab.com/ska-telescope/sep_pipeline_imaging with the following changes: RDMAapi.c should be put in the folder /imaging/src RDMAapi.h should be put in the folder /imaging The file /imaging/CMakeLists.txt should include the lines: cuda_add-executable( ... existing executables src/RDMAapi.c ) The file /imaging/CMakeLists.txt should include the lines: target_link_libraries(... existing libraries rdmacm ibverbs) The file /imaging/src/controller.cpp should include the lines (at line 32): #ifdef __cplusplus extern "C" { #endif #include "../RDMAapi.h" #ifdef __cplusplus } #endif The file /imaging/src/controller.cpp should include the lines in function load_vis_into_memory_regions (at line 166): uint32_t messageSize = regions->num_visibilities * sizeof(Complex); int numMemoryBlocks = NUM_MEM_REGIONS; int numContiguousMessages = 1; void **memoryBlocks = NULL; memoryBlocks = (void**)malloc(sizeof(void *) * numMemoryBlocks); int memoryBlockSize = messageSize*numContiguousMessages; for (int blockIndex=0; blockIndex<numMemoryBlocks; blockIndex++) { memoryBlocks[blockIndex] = (void*)regions->memory_region[blockIndex]; } rdmaTransferMemoryBlocksWithDefaultDevice(RECV_MODE, memoryBlocks, messageSize, numMemoryBlocks, 1, 0, 0, NULL); for (int blockIndex=0; blockIndex<numMemoryBlocks; blockIndex++) { memory_region_ready[blockIndex] = true; // Note eventually want to make this dynamic so can execute as each memory region received } free(memoryBlocks); return 0;
    • 7.1
    • PI24 - UNCOVERED

    Attachments

      Issue Links

        Structure

          Activity

            People

              S.Ratcliffe Ratcliffe, Simon [X] (Inactive)
              A.Griffin Griffin, Anthony [X] (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Feature Progress

                Story Point Burn-up: (100.00%)

                Feature Estimate: 1.0

                IssuesStory Points
                To Do00.0
                In Progress   00.0
                Complete919.0
                Total919.0

                Dates

                  Created:
                  Updated:
                  Resolved:

                  Structure Helper Panel