Commit 4008dcee authored by Eisenhauer, Greg's avatar Eisenhauer, Greg
Browse files

Tweak message formats

parent 078671ce
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -295,9 +295,9 @@ static FMField TimestepMetadataList[] = {
     FMOffset(struct _TimestepMetadataMsg *, CohortSize)},
    {"formats", "*FFSFormatBlock", sizeof(struct FFSFormatBlock),
     FMOffset(struct _TimestepMetadataMsg *, Formats)},
    {"metadata", "(*SstBlock)[cohort_size]", sizeof(struct _SstBlock),
    {"metadata", "SstBlock[cohort_size]", sizeof(struct _SstBlock),
     FMOffset(struct _TimestepMetadataMsg *, Metadata)},
    {"attribute_data", "(*SstBlock)[cohort_size]", sizeof(struct _SstBlock),
    {"attribute_data", "SstBlock[cohort_size]", sizeof(struct _SstBlock),
     FMOffset(struct _TimestepMetadataMsg *, AttributeData)},
    {"TP_TimestepInfo", "(*DP_STRUCT)[cohort_size]", 0,
     FMOffset(struct _TimestepMetadataMsg *, DP_TimestepInfo)},
+2 −2
Original line number Diff line number Diff line
@@ -296,8 +296,8 @@ typedef struct _TimestepMetadataMsg
    int Timestep;
    int CohortSize;
    FFSFormatList Formats;
    SstData *Metadata;
    SstData *AttributeData;
    SstData Metadata;
    SstData AttributeData;
    void **DP_TimestepInfo;
} * TSMetadataMsg;

+4 −1
Original line number Diff line number Diff line
@@ -1050,7 +1050,10 @@ extern SstStatusValue SstAdvanceStep(SstStream Stream, SstStepMode mode,
        Stream->ReaderTimestep = Entry->MetadataMsg->Timestep;
        SstFullMetadata Mdata = malloc(sizeof(struct _SstFullMetadata));
        Mdata->WriterCohortSize = Entry->MetadataMsg->CohortSize;
        Mdata->WriterMetadata = Entry->MetadataMsg->Metadata;
        Mdata->WriterMetadata = malloc(sizeof(Mdata->WriterMetadata[0]) * Mdata->WriterCohortSize);
        for (int i = 0; i < Mdata->WriterCohortSize; i++) {
            Mdata->WriterMetadata[i] = &Entry->MetadataMsg->Metadata[i];
        }
        if (Stream->DP_Interface->TimestepInfoFormats == NULL)
        {
            // DP didn't provide struct info, no valid data
+9 −4
Original line number Diff line number Diff line
@@ -1309,15 +1309,20 @@ extern void SstInternalProvideTimestep(
    Msg->Timestep = Timestep;

    /* separate metadata and DP_info to separate arrays */
    Msg->Metadata = malloc(Stream->CohortSize * sizeof(SstData));
    Msg->AttributeData = malloc(Stream->CohortSize * sizeof(SstData));
    Msg->Metadata = malloc(Stream->CohortSize * sizeof(Msg->Metadata[0]));
    Msg->AttributeData = malloc(Stream->CohortSize * sizeof(Msg->Metadata[0]));
    Msg->DP_TimestepInfo =
        malloc(Stream->CohortSize * sizeof(Msg->DP_TimestepInfo[0]));
    int NullCount = 0;
    for (int i = 0; i < Stream->CohortSize; i++)
    {
        Msg->Metadata[i] = pointers[i]->Metadata;
        Msg->AttributeData[i] = pointers[i]->AttributeData;
        Msg->Metadata[i] = *(pointers[i]->Metadata);
        if (pointers[i]->AttributeData) {
            Msg->AttributeData[i] = *(pointers[i]->AttributeData);
        } else {
            Msg->AttributeData[i].DataSize = 0;
            Msg->AttributeData[i].block = NULL;
        }
        Msg->DP_TimestepInfo[i] = pointers[i]->DP_TimestepInfo;
        if (pointers[i]->DP_TimestepInfo == NULL)
            NullCount++;
+14 −14
Original line number Diff line number Diff line
@@ -1393,17 +1393,17 @@ static void LoadAttributes(SstStream Stream, TSMetadataMsg MetaData)
        void *BaseData;
        FFSTypeHandle FFSformat;

        if (MetaData->AttributeData[WriterRank]->DataSize == 0)
        if (MetaData->AttributeData[WriterRank].DataSize == 0)
            return;

        FFSformat = FFSTypeHandle_from_encode(
            Stream->ReaderFFSContext,
            MetaData->AttributeData[WriterRank]->block);
            MetaData->AttributeData[WriterRank].block);
        if (!FFShas_conversion(FFSformat))
        {
            FMContext FMC = FMContext_from_FFS(Stream->ReaderFFSContext);
            FMFormat Format = FMformat_from_ID(
                FMC, MetaData->AttributeData[WriterRank]->block);
                FMC, MetaData->AttributeData[WriterRank].block);
            FMStructDescList List =
                FMcopy_struct_list(format_list_of_FMFormat(Format));
            FMlocalize_structs(List);
@@ -1414,20 +1414,20 @@ static void LoadAttributes(SstStream Stream, TSMetadataMsg MetaData)
        if (FFSdecode_in_place_possible(FFSformat))
        {
            FFSdecode_in_place(Stream->ReaderFFSContext,
                               MetaData->AttributeData[WriterRank]->block,
                               MetaData->AttributeData[WriterRank].block,
                               &BaseData);
        }
        else
        {
            int DecodedLength = FFS_est_decode_length(
                Stream->ReaderFFSContext,
                MetaData->AttributeData[WriterRank]->block,
                MetaData->AttributeData[WriterRank]->DataSize);
                MetaData->AttributeData[WriterRank].block,
                MetaData->AttributeData[WriterRank].DataSize);
            BaseData = malloc(DecodedLength);
            FFSBuffer decode_buf =
                create_fixed_FFSBuffer(BaseData, DecodedLength);
            FFSdecode_to_buffer(Stream->ReaderFFSContext,
                                MetaData->AttributeData[WriterRank]->block,
                                MetaData->AttributeData[WriterRank].block,
                                decode_buf);
        }
        if (DumpMetadata == -1)
@@ -1560,20 +1560,20 @@ static void BuildVarList(SstStream Stream, TSMetadataMsg MetaData,
            calloc(sizeof(Info->DataFieldLists[0]), Stream->WriterCohortSize);
    }

    if (!MetaData->Metadata[WriterRank]->block)
    if (!MetaData->Metadata[WriterRank].block)
    {
        fprintf(stderr, "FAILURE!   MetaData->Metadata[WriterRank]->block == "
                        "NULL for WriterRank = %d\n",
                WriterRank);
    }
    FFSformat = FFSTypeHandle_from_encode(
        Stream->ReaderFFSContext, MetaData->Metadata[WriterRank]->block);
        Stream->ReaderFFSContext, MetaData->Metadata[WriterRank].block);

    if (!FFShas_conversion(FFSformat))
    {
        FMContext FMC = FMContext_from_FFS(Stream->ReaderFFSContext);
        FMFormat Format =
            FMformat_from_ID(FMC, MetaData->Metadata[WriterRank]->block);
            FMformat_from_ID(FMC, MetaData->Metadata[WriterRank].block);
        FMStructDescList List =
            FMcopy_struct_list(format_list_of_FMFormat(Format));
        FMlocalize_structs(List);
@@ -1584,17 +1584,17 @@ static void BuildVarList(SstStream Stream, TSMetadataMsg MetaData,
    if (FFSdecode_in_place_possible(FFSformat))
    {
        FFSdecode_in_place(Stream->ReaderFFSContext,
                           MetaData->Metadata[WriterRank]->block, &BaseData);
                           MetaData->Metadata[WriterRank].block, &BaseData);
    }
    else
    {
        int DecodedLength = FFS_est_decode_length(
            Stream->ReaderFFSContext, MetaData->Metadata[WriterRank]->block,
            MetaData->Metadata[WriterRank]->DataSize);
            Stream->ReaderFFSContext, MetaData->Metadata[WriterRank].block,
            MetaData->Metadata[WriterRank].DataSize);
        BaseData = malloc(DecodedLength);
        FFSBuffer decode_buf = create_fixed_FFSBuffer(BaseData, DecodedLength);
        FFSdecode_to_buffer(Stream->ReaderFFSContext,
                            MetaData->Metadata[WriterRank]->block, decode_buf);
                            MetaData->Metadata[WriterRank].block, decode_buf);
    }
    if (DumpMetadata == -1)
    {