Commit b3e74fb2 authored by Podhorszki, Norbert's avatar Podhorszki, Norbert
Browse files

Fix: BP5 LocalValue (shown at read as GlobalArray) MinBlocksInfo carries...

Fix:  BP5 LocalValue (shown at read as GlobalArray)  MinBlocksInfo carries values instead of allocated pointers in Shape, Start and Count. Added branches to bpls to handle such variables. Also added to BP5Deserialzer::MinBlocksInfo() to add the value to min/max. This fixes the bpls of examples/basics/values output (-l, -d, -D variants)
parent d881d36d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1485,6 +1485,7 @@ MinVarInfo *BP5Deserializer::MinBlocksInfo(const VariableBase &Var, size_t Step)
            if (writer_meta_base)
            {
                MinBlockInfo Blk;
                Blk.MinMax.Init(VarRec->Type);
                Blk.WriterID = WriterRank;
                Blk.BlockID = Id++;
                Blk.BufferP = writer_meta_base;
@@ -1493,6 +1494,11 @@ MinVarInfo *BP5Deserializer::MinBlocksInfo(const VariableBase &Var, size_t Step)
                    Blk.Count = (size_t *)1;
                    Blk.Start = (size_t *)WriterRank;
                }
                if (writer_meta_base)
                {
                    ApplyElementMinMax(Blk.MinMax, VarRec->Type,
                                       writer_meta_base);
                }
                MV->BlocksInfo.push_back(Blk);
            }
        }
+33 −13
Original line number Diff line number Diff line
@@ -3066,11 +3066,15 @@ Dims get_global_array_signature(core::Engine *fp, core::IO *io,
                {
                    for (size_t k = 0; k < ndim; k++)
                    {
                        size_t n =
                            (minBlocks->WasLocalVar
                                 ? reinterpret_cast<size_t>(minBlocks->Shape)
                                 : minBlocks->Shape[k]);
                        if (firstStep)
                        {
                            dims[k] = minBlocks->Shape[k];
                            dims[k] = n;
                        }
                        else if (dims[k] != minBlocks->Shape[k])
                        else if (dims[k] != n)
                        {
                            dims[k] = 0;
                        }
@@ -3365,20 +3369,26 @@ void print_decomp(core::Engine *fp, core::IO *io, core::Variable<T> *variable)

                    for (size_t k = 0; k < ndim; k++)
                    {
                        if (blocks[j].Count[k])
                        size_t c =
                            (minBlocksInfo->WasLocalVar
                                 ? reinterpret_cast<size_t>(blocks[j].Count)
                                 : blocks[j].Count[k]);

                        if (c)
                        {
                            size_t s =
                                (minBlocksInfo->WasLocalVar
                                     ? reinterpret_cast<size_t>(blocks[j].Start)
                                     : blocks[j].Start[k]);
                            if (variable->m_ShapeID == ShapeID::GlobalArray)
                            {
                                fprintf(outf, "%*zu:%*zu", ndigits_dims[k],
                                        blocks[j].Start[k], ndigits_dims[k],
                                        blocks[j].Start[k] +
                                            blocks[j].Count[k] - 1);
                                fprintf(outf, "%*zu:%*zu", ndigits_dims[k], s,
                                        ndigits_dims[k], s + c - 1);
                            }
                            else
                            {
                                // blockStart is empty vector for LocalArrays
                                fprintf(outf, "0:%*zu", ndigits_dims[k],
                                        blocks[j].Count[k] - 1);
                                fprintf(outf, "0:%*zu", ndigits_dims[k], c - 1);
                            }
                        }
                        else
@@ -3411,6 +3421,15 @@ void print_decomp(core::Engine *fp, core::IO *io, core::Variable<T> *variable)
                    }
                    fprintf(outf, "\n");
                    if (dump)
                    {
                        if (minBlocksInfo->WasLocalVar)
                        {
                            readVarBlock(
                                fp, io, variable, RelStep, j,
                                {reinterpret_cast<size_t>(blocks[j].Count)},
                                {reinterpret_cast<size_t>(blocks[j].Start)});
                        }
                        else
                        {
                            readVarBlock(
                                fp, io, variable, RelStep, j,
@@ -3420,6 +3439,7 @@ void print_decomp(core::Engine *fp, core::IO *io, core::Variable<T> *variable)
                    }
                }
            }
        }
        return;
    }