Files
imdd_silas/test/run_examplefcn.m
sioe e47a4dbbbe Many changes for 400G DSP
Minimal Example
...
2024-12-17 16:17:58 +01:00

101 lines
3.2 KiB
Matlab

% Define ranges for variables to iterate over
var1_range = [1, 2, 3, 4, 6];
var2_range = [10, 20];
var3_range = [100, 200];
% Prepare the parallel pool
if isempty(gcp('nocreate'))
parpool; % Start a parallel pool if not already running
end
% Array to hold measurement futures
measurements = parallel.FevalFuture.empty();
% Array to hold DSP results
dsp_results = parallel.Future.empty();
% Nested for loops for all parameter combinations
lin_idx = 1;
for v1 = var1_range
for v2 = var2_range
for v3 = var3_range
% Construct the struct of optional variables for this iteration
optionalVars = struct('var_4', v1, 'var_5', v2, 'var_6', v3);
% Submit the measurement function to the parallel pool
measurements(lin_idx) = parfeval(@measurement, 1, optionalVars);
% Link DSP function to run after measurement completes
dsp_results(lin_idx) = afterEach(measurements(lin_idx), @(output) rundsp(output, optionalVars), 1);
lin_idx = lin_idx + 1; % Increment linear index
end
end
end
% Fetch and display DSP results
final_results = cell(numel(dsp_results), 1);
for i = 1:numel(dsp_results)
fprintf('Fetching DSP result for job %d...\n', i);
final_results{i} = fetchOutputs(dsp_results(i)); % Fetch each DSP result individually
end
fprintf('All DSP evaluations completed.\n');
disp('Final Results:');
disp(final_results);
% --- Measurement Function ---
function output = measurement(varargin)
% Default values for optional variables
var_1 = 1;
var_2 = 2;
var_4 = 10; % Default value for var4
var_5 = 20; % Default value for var5
var_6 = 30; % Default value for var6
var_7 = 40; % Default value for var7
var_8 = 50; % Default value for var8
var_9 = 60; % Default value for var9
var_10 = 70; % Default value for var10
% Parse optional input arguments
if ~isempty(varargin)
var_s = varargin{1};
if isstruct(var_s)
fields = fieldnames(var_s);
for i = 1:numel(fields)
eval([fields{i}, ' = ', num2str( var_s.(fields{i}) ), ';']);
fprintf("%s <-- %.2f \n", fields{i}, var_s.(fields{i}));
end
else
error('Optional variables should be passed as a struct.');
end
end
% Simulate output with a random delay
output = randi(5); % Random result
pause(output); % Simulate processing time
end
% --- DSP Function ---
function output = rundsp(measurement_output, varargin)
% Parse optional input arguments
if ~isempty(varargin)
var_s = varargin{1};
if isstruct(var_s)
fields = fieldnames(var_s);
for i = 1:numel(fields)
eval([fields{i}, ' = ', num2str( var_s.(fields{i}) ), ';']);
fprintf("%s <-- %.2f \n", fields{i}, var_s.(fields{i}));
end
else
error('Optional variables should be passed as a struct.');
end
end
% Simulate DSP processing based on measurement output
output = measurement_output + 10; % Add 10 to measurement output
pause(measurement_output); % Simulate DSP processing time
end