Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] MCA variable system slides and notes
From: Ralph Castain (rhc_at_[hidden])
Date: 2013-02-08 10:35:29


+1

Just duplicate it - saves complexity and lowers probability of error

On Feb 5, 2013, at 11:38 AM, George Bosilca <bosilca_at_[hidden]> wrote:

> The major benefit of the second method is that it has the obvious potential to save us some memory. Not much I guess, but somewhere in the order of few Kb.
>
> But in order to save this memory, the originator must keep a pointer to the data in order to be able to free it after the mca_params framework is closed. This means for each string saved (due to the lack of the strdup in the mca_params framework), there will be sizeof(char*) bytes spend in bookkeeping. Thus the memory savings will be drastically lowered, and the benefit of the second approach is strongly compromised.
>
>
> George.
>
> On Feb 5, 2013, at 12:46 , Nathan Hjelm <hjelmn_at_[hidden]> wrote:
>
>> Notes:
>>
>> Variable system currently takes ownership of string values. This is done so strings can be freed when overwritten (by mca_base_var_set_value) or when the variable is deregistered. This requires that initial string values be allocated on the heap (not .DATA, heap, etc). Brian raised a good point that projects/frameworks/components should be responsible for freeing anything they allocate and that it shouldn't be the responsibility of the MCA variable system to free these strings (though we have to handle the mca_base_var_set_value case).
>>
>> Some options:
>> 1) Always duplicate the string passed in by the caller. The caller will have to free the original value if it was allocated. Ex:
>>
>> tmp = strdup ("some_string_value");
>> backing_store = tmp;
>> mca_base_var_register (..., MCA_BASE_VAR_TYPE_STRING, ..., &backing_store);
>> free (tmp);
>>
>> 2) Add a flag indicating whether the variable system should call free on the initial value. Ex:
>>
>> backing_store = "some_string_value";
>> mca_base_var_register (..., MCA_BASE_VAR_TYPE_STRING, ..., MCA_BASE_VAR_FLAG_STATIC, ..., &backing_store);
>>
>> If the STATIC flag is not set the variable system takes ownership of the string and frees it later. If the STATIC flag is set the variable system can either 1) use the initial value, or 2) strdup the initial value. There are issues with using the initial value without duplication since the registree would need to ensure the initial value lives as long as the registered variable (not a problem if the value is in .DATA or .BSS).
>>
>> Thoughts on these options? Other options?
>>
>>
>> List of initial supported types is adequate: char *, int, and bool. We can re-evaluate later if there is a need for more types.
>>
>>
>> We need to figure out how Open MPI could read all file values and build an environment that could be passed to the backend to prevent the need to read from files on the backend. This may necessitate modifying the mca_base_var API.
>>
>>
>> -Nathan
>> <openmpi_mpit.pdf>_______________________________________________
>> devel mailing list
>> devel_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel