+1

Just duplicate it - saves complexity and lowers probability of error

On Feb 5, 2013, at 11:38 AM, George Bosilca <bosi...@icl.utk.edu> 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 <hje...@lanl.gov> 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
>> de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


Reply via email to