From bf81befe4e7c5d639879d9ca3d5ea43b468f0fbf Mon Sep 17 00:00:00 2001 From: giuliaghirardini <giuliaghirardini2001@gmail.com> Date: Tue, 12 Mar 2024 17:04:45 +0100 Subject: [PATCH] [benchmark][speed] Implemented new function to check classes speed for dependent and non-dependent properties --- tests/Test.m | 23 ++++++++++++----------- tests/dataSpeed.mat | 4 ++-- tests/operations/dependentSpeed.m | 22 ++++++++++++++++++++++ tests/speedBenchmarkConfig.m | 11 +++++++++++ tests/speedBenchmarkPlot.m | 3 +++ tests/speedPlots.m | 30 ++++++++++++++++++++++++++++++ 6 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 tests/operations/dependentSpeed.m diff --git a/tests/Test.m b/tests/Test.m index b39e3f6..62c2a53 100644 --- a/tests/Test.m +++ b/tests/Test.m @@ -9,22 +9,24 @@ classdef Test < Config rows double % Number of rows for random matrix cols double % Number of columns for random matrix e double + randomMatrix double + randomVect double + nonDependentProp double end properties(SetAccess = protected) d double end - properties(Dependent) - randomMatrix - randomVect - end - properties(Access = protected) configName = ''; mission Mission end + properties (Dependent) + dependentProp + end + methods function obj = Test(a, b, c, d, rows, cols) obj.a = a; @@ -33,14 +35,13 @@ classdef Test < Config obj.d = d; obj.rows = rows; % Set rows obj.cols = cols; % Set cols + obj.randomMatrix = obj.a * randn(obj.rows, obj.cols); + obj.randomVect = obj.randomMatrix(1,:); + obj.nonDependentProp = obj.a^(obj.b) + obj.c; end - function randomMatrix = get.randomMatrix(obj) - randomMatrix = obj.a * randn(obj.rows, obj.cols); - end - - function randomVect = get.randomVect(obj) - randomVect = obj.randomMatrix(1,:); + function dependentProp = get.dependentProp(obj) + dependentProp = obj.a^(obj.b) + obj.c; end end end diff --git a/tests/dataSpeed.mat b/tests/dataSpeed.mat index 0eb49fd..f77792e 100644 --- a/tests/dataSpeed.mat +++ b/tests/dataSpeed.mat @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66a0de3e874d8c280bdea780291cd24128be24983af59683ff246bf2c98ba946 -size 29105 +oid sha256:c6aa949ebce91d4c7e5da9fd77fa7d7b972a01e094492dc117b9e965bdb27f90 +size 33429 diff --git a/tests/operations/dependentSpeed.m b/tests/operations/dependentSpeed.m new file mode 100644 index 0000000..817a710 --- /dev/null +++ b/tests/operations/dependentSpeed.m @@ -0,0 +1,22 @@ +function dependentTime = dependentSpeed(times,len) + testClass = Test(1, 2, 3, 4, len, len); + + arr1 = zeros(1, len); + arr2 = zeros(1, len); + + tic + for k = 1:length(times) + for j = 1:times(k) + arr1(j) = testClass.dependentProp; + end + end + dependentTime.dependent = toc; + + tic + for k = 1:length(times) + for j = 1:times(k) + arr2(j) = testClass.nonDependentProp; + end + end + dependentTime.nonDependent = toc; +end \ No newline at end of file diff --git a/tests/speedBenchmarkConfig.m b/tests/speedBenchmarkConfig.m index dced1b2..96bf141 100644 --- a/tests/speedBenchmarkConfig.m +++ b/tests/speedBenchmarkConfig.m @@ -42,6 +42,17 @@ for i = 1:length(vct) end clear temp +%% Dependent vs non dependent time +dep.dependentTime = []; +dep.dependentRatio = []; + +for i = 1:length(vct) + temp = dependentSpeed(vct(i), vct(i)); + dep.dependentTime = [dep.dependentTime temp]; %#ok<*AGROW> + dep.dependentRatio = [dep.dependentRatio temp.dependent/temp.nonDependent]; +end +clear temp + %% Scalar product time scalar.scalarProductTime = []; scalar.scalarProductRatio = []; diff --git a/tests/speedBenchmarkPlot.m b/tests/speedBenchmarkPlot.m index 4cff712..dcdda19 100644 --- a/tests/speedBenchmarkPlot.m +++ b/tests/speedBenchmarkPlot.m @@ -16,6 +16,9 @@ load('dataSpeed.mat') %% Assignment time element wise [~, ~] = speedPlots(assignment.assignmentTime, assignment.assignmentRatio, vct, 'Assignment element wise'); +%% Dependent +[~, ~] = speedPlots(dep.dependentTime, dep.dependentRatio, vct, 'Dependent vs non dependent time'); + %% Scalar product [~, ~] = speedPlots(scalar.scalarProductTime, scalar.scalarProductRatio, vct, 'Scalar product'); diff --git a/tests/speedPlots.m b/tests/speedPlots.m index bd67118..8b74a07 100644 --- a/tests/speedPlots.m +++ b/tests/speedPlots.m @@ -4,6 +4,36 @@ function [pltConfig, plt] = speedPlots(obj1, obj2, vct, name) speedPlotsFig = figure; tabgp = uitabgroup(speedPlotsFig); + if strcmp(name,'Dependent vs non dependent time') + tab = uitab(tabgp,'Title','Time'); + axes('parent', tab) + for i = 1:length(vct) + semilogx(vct(i), obj1(i).dependent, '.' ,'Color', pltConfig.stdBlue) + semilogx(vct(i), obj1(i).nonDependent, '.', 'Color', pltConfig.stdRed) + hold on + end + pltConfig.lgdDependent = plot(nan, nan, 'color', pltConfig.stdBlue); + pltConfig.lgdNonDependent = plot(nan, nan, 'color', pltConfig.stdRed); + title(strcat(name,' time')); + xlabel('Number of elements') + ylabel('Speed [s]') + legend([pltConfig.lgdDependent, pltConfig.lgdNonDependent], {'Dependent', 'Non dependent'}) + grid on + + tab = uitab(tabgp,'Title','Ratio'); + axes('parent', tab) + x = 10:0.1:1000; + plt.readPlot = semilogx(vct, obj2); + hold on + plt.regrPlot = plot(x,polyval(polyfit(vct, obj2, 10),x), 'k--'); + title(strcat(name,' time ratio')); + xlabel('Number of elements') + ylabel('Ratio') + legend([plt.readPlot, plt.regrPlot], {'Ratio','Regression'}) + grid on + return + end + if strcmp(name,'Assignment element wise') tab = uitab(tabgp,'Title','Time'); axes('parent', tab) -- GitLab