@@ -15,13 +15,13 @@ namespace dtlmod {
1515
1616double CompressionReductionMethod::ParameterizedCompression::get_effective_ratio (unsigned int transaction_id) const
1717{
18- if (ratio_variability_ <= 0.0 )
19- return compression_ratio_ ;
18+ if (cfg_. ratio_variability <= 0.0 )
19+ return cfg_. compression_ratio ;
2020 // Deterministic noise from hash of (variable_name, transaction_id)
2121 size_t seed = std::hash<std::string>{}(var_->get_name ()) ^ (std::hash<unsigned int >{}(transaction_id) << 1 );
2222 // Map to [1 - variability, 1 + variability]
23- double noise = 1.0 + ratio_variability_ * (2.0 * (seed % 10001 ) / 10000.0 - 1.0 );
24- return std::max (1.0 , compression_ratio_ * noise);
23+ double noise = 1.0 + cfg_. ratio_variability * (2.0 * (seed % 10001 ) / 10000.0 - 1.0 );
24+ return std::max (1.0 , cfg_. compression_ratio * noise);
2525}
2626
2727size_t CompressionReductionMethod::get_reduced_variable_global_size (const Variable& var) const
@@ -102,59 +102,41 @@ void CompressionReductionMethod::parameterize_for_variable(
102102 auto it = per_variable_parameterizations_.find (&var);
103103 bool is_new = (it == per_variable_parameterizations_.end ());
104104
105- double accuracy = 1e-3 ;
106- double compression_cost_per_element = 1.0 ;
107- double decompression_cost_per_element = 1.0 ;
108- double compression_ratio = 0.0 ;
109- std::string compressor_profile = " fixed" ;
110- double data_smoothness = 0.5 ;
111- double ratio_variability = 0.0 ;
112-
113- if (!is_new) {
114- const auto & existing = it->second ;
115- accuracy = existing->get_accuracy ();
116- compression_cost_per_element = existing->get_compression_cost_per_element ();
117- decompression_cost_per_element = existing->get_decompression_cost_per_element ();
118- compression_ratio = existing->get_compression_ratio ();
119- compressor_profile = existing->get_compressor_profile ();
120- data_smoothness = existing->get_data_smoothness ();
121- ratio_variability = existing->get_ratio_variability ();
122- }
105+ CompressionConfig cfg = is_new ? CompressionConfig{} : it->second ->get_config ();
123106
124107 bool ratio_explicitly_set = false ;
125108
126109 for (const auto & [key, value] : parameters) {
127110 if (key == " accuracy" )
128- accuracy = std::stod (value);
111+ cfg. accuracy = std::stod (value);
129112 else if (key == " compression_cost_per_element" )
130- compression_cost_per_element = std::stod (value);
113+ cfg. compression_cost_per_element = std::stod (value);
131114 else if (key == " decompression_cost_per_element" )
132- decompression_cost_per_element = std::stod (value);
115+ cfg. decompression_cost_per_element = std::stod (value);
133116 else if (key == " compression_ratio" ) {
134- compression_ratio = std::stod (value);
135- ratio_explicitly_set = true ;
117+ cfg. compression_ratio = std::stod (value);
118+ ratio_explicitly_set = true ;
136119 } else if (key == " compressor" ) {
137120 validate_compressor_profile (value);
138- compressor_profile = value;
121+ cfg. compressor_profile = value;
139122 } else if (key == " data_smoothness" )
140- data_smoothness = std::stod (value);
123+ cfg. data_smoothness = std::stod (value);
141124 else if (key == " ratio_variability" )
142- ratio_variability = std::stod (value);
125+ cfg. ratio_variability = std::stod (value);
143126 else
144127 throw UnknownCompressionOptionException (XBT_THROW_POINT, key);
145128 }
146129
147- compression_ratio = resolve_compression_ratio (compression_ratio, ratio_explicitly_set, is_new, compressor_profile ,
148- accuracy, data_smoothness);
130+ cfg. compression_ratio = resolve_compression_ratio (cfg. compression_ratio , ratio_explicitly_set, is_new,
131+ cfg. compressor_profile , cfg. accuracy , cfg. data_smoothness );
149132
150133 XBT_DEBUG (" Compression parameterization for Variable %s: profile=%s, accuracy=%.2e, ratio=%.2f, "
151134 " compression_cost=%.2f, decompression_cost=%.2f, smoothness=%.2f, variability=%.2f" ,
152- var.get_cname (), compressor_profile.c_str (), accuracy, compression_ratio, compression_cost_per_element,
153- decompression_cost_per_element, data_smoothness, ratio_variability);
135+ var.get_cname (), cfg.compressor_profile .c_str (), cfg.accuracy , cfg.compression_ratio ,
136+ cfg.compression_cost_per_element , cfg.decompression_cost_per_element , cfg.data_smoothness ,
137+ cfg.ratio_variability );
154138
155139 // Always (re)create the parameterization — avoids field-by-field update complexity.
156- per_variable_parameterizations_[&var] = std::make_shared<ParameterizedCompression>(
157- var, accuracy, compression_cost_per_element, decompression_cost_per_element, compression_ratio,
158- compressor_profile, data_smoothness, ratio_variability);
140+ per_variable_parameterizations_[&var] = std::make_shared<ParameterizedCompression>(var, std::move (cfg));
159141}
160142} // namespace dtlmod
0 commit comments