Software Architecture

InputProc

The InputProc package manages the data flow from the packets that are received from the antenna fields, to the input buffers of GPUProc.

The data flow between systems is as follows:

digraph data_flow {
    rankdir=LR;
    node [shape=box, fontcolor=white, style=filled, fillcolor="#f0f0f0", fontsize=12, fillcolor="#438dd5"];

    "Station" -> "IONode" [label="UDP", labeldistance=2.5, labelangle=45];
    "IONode" -> "GPUNode" [label="MPI", labeldistance=2.5, labelangle=45];
}

The extended data flow between classes is as follows:

digraph data_flow {
    rankdir=TB;

    // Global Styles for Primary and Intermediate Nodes
    node [shape=box, style=filled, fillcolor="#438dd5", fontcolor=white, fontsize=12];
    subgraph primary {
        node [fillcolor="#438dd5"];  // Primary Nodes (Main steps)
        "Station/Generator" [label="Station/Generator\nGenerator: Emulates RSP boards"];
        "Station/PacketReader" [label="Station/PacketReader\nPacketReader: Reads RSP packets"];
        "Station/PacketWriter" [label="Station/PacketWriter\nPacketWriter: Writes RSP packets"];
        "Buffer/BlockReader" [label="Buffer/BlockReader\nBlockReader: Reads buffer blocks"];
        "Transpose/MPISendStation" [label="MPISendStation\nDistributes subbands"];
        "Transpose/MPIReceiveStations" [label="MPIReceiveStations\nCollects subbands"];
    }

    subgraph intermediate {
        node [fillcolor="#5a9bd4", shape=ellipse, fontsize=10];  // Intermediate Nodes
        "UDP_RSP" [label="UDP [Station/RSP]"];
        "L1_RSP" [label="L1 cache [Station/RSP]"];
        "SHM_SampleBuffer" [label="SHM [Buffer/SampleBuffer]"];
        "Pointers" [label="(pointers)"];
        "MPI_Step" [label="MPI"];
    }

    // Connections
    "Station/Generator" -> "UDP_RSP" -> "Station/PacketReader";
    "Station/PacketReader" -> "L1_RSP" -> "Station/PacketWriter";
    "Station/PacketWriter" -> "SHM_SampleBuffer" -> "Buffer/BlockReader";
    "Buffer/BlockReader" -> "Pointers" -> "Transpose/MPISendStation";
    "Transpose/MPISendStation" -> "MPI_Step" -> "Transpose/MPIReceiveStations";
}

GPUProc

OutputProc