Many changes for 400G DSP
Minimal Example ...
This commit is contained in:
100
test/run_examplefcn.m
Normal file
100
test/run_examplefcn.m
Normal file
@@ -0,0 +1,100 @@
|
||||
% 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
|
||||
Reference in New Issue
Block a user