matlab.perftest.TestCase クラス
名前空間: matlab.perftest
スーパークラス: matlab.unittest.TestCase
パフォーマンス テスト フレームワークを使用するテストを記述するためのクラス
説明
matlab.perftest.TestCase
クラスを使用して、クラスベースのパフォーマンス テストを記述し、測定を特定のコード セグメントに制限する境界を定義できます。matlab.perftest.TestCase
クラスは matlab.unittest.TestCase
クラスから派生したものであるため、テストでは、ユニット テスト フレームワークの機能にアクセスできます。したがって、パフォーマンス テスト内で検定を実行すると、コードのパフォーマンスを測定しながら正しい機能的動作も保証できます。パフォーマンス テストの作成と実行の詳細については、パフォーマンス テストのフレームワークの概要を参照してください。
テストの実行時に、パフォーマンス テスト フレームワークで matlab.perftest.TestCase
インスタンスが自動的に作成されます。
matlab.perftest.TestCase
クラスは handle
クラスです。
メソッド
パブリック メソッド
これらのメソッドに加え、matlab.perftest.TestCase
クラスは matlab.unittest.TestCase
クラスおよびそのスーパークラスからメソッドを継承します。
keepMeasuring | 自動ループによるコードの測定 |
startMeasuring | 測定境界の開始を指定 |
stopMeasuring | 測定境界の終了を指定 |
例
クラスベースのパフォーマンス テストの作成
matlab.perftest.TestCase
から派生させたテスト クラスを作成して、さまざまな事前割り当て方法のパフォーマンスを比較します。
現在のフォルダー内の preallocationTest.m
という名前のファイルで、preallocationTest
テスト クラスを作成します。このクラスには、1 のベクトルを作成するための各種の方法に対応する 4 つの Test
メソッドが含まれています。これらのメソッドのいずれかを関数 runperf
で実行すると、そのメソッド内のコードを実行するための所要時間が関数で測定されます。
classdef preallocationTest < matlab.perftest.TestCase methods (Test) function testOnes(testCase) x = ones(1,1e7); end function testIndexingWithVariable(testCase) id = 1:1e7; x(id) = 1; end function testIndexingOnLHS(testCase) x(1:1e7) = 1; end function testForLoop(testCase) for i = 1:1e7 x(i) = 1; end end end end
名前に "Indexing"
を含むすべてのテストのパフォーマンス テストを実行します。結果は異なる可能性があり、runperf
が統計目標値を満たさない場合は警告が表示されることもあります。
results = runperf("preallocationTest","Name","*Indexing*")
Running preallocationTest .......... .......... .......... .. Done preallocationTest __________
results = 1×2 TimeResult array with properties: Name Valid Samples TestActivity Totals: 2 Valid, 0 Invalid. 3.011 seconds testing time.
事前割り当てメソッドを比較するために、results
から要約統計量の table を作成します。この例では、ベクトルを 1 に初期化する最も速い方法は testIndexingOnLHS
メソッドでした。
T = sampleSummary(results)
T=2×7 table
Name SampleSize Mean StandardDeviation Min Median Max
__________________________________________ __________ ________ _________________ ________ ________ ________
preallocationTest/testIndexingWithVariable 17 0.1223 0.014378 0.10003 0.12055 0.15075
preallocationTest/testIndexingOnLHS 5 0.027557 0.0013247 0.026187 0.027489 0.029403
並べ替えアルゴリズムのパフォーマンスの視覚的な比較
リスト要素を昇順に並べ替える 2 つの並べ替えアルゴリズム、バブル ソートとマージ ソートの計算量を可視化します。バブル ソートは、リストを段階的に繰り返し処理し、隣接する要素のペアを比較して、順序が間違っている場合に要素を入れ替える単純なアルゴリズムです。マージ ソートは、並べ替え済みのサブリストをマージして新しく並べ替えられたリストを作成するという簡単な手法を利用した、"分割統治" アルゴリズムです。
現在のフォルダー内の bubbleSort.m
という名前のファイルで、バブル ソート アルゴリズムを実装する関数 bubbleSort
を作成します。
function y = bubbleSort(x) % Sorting algorithm with O(n^2) complexity n = length(x); swapped = true; while swapped swapped = false; for i = 2:n if x(i-1) > x(i) temp = x(i-1); x(i-1) = x(i); x(i) = temp; swapped = true; end end end y = x; end
現在のフォルダー内の mergeSort.m
という名前のファイルで、マージ ソート アルゴリズムを実装する関数 mergeSort
を作成します。
function y = mergeSort(x) % Sorting algorithm with O(n*logn) complexity y = x; % A list of one element is considered sorted if length(x) > 1 mid = floor(length(x)/2); L = x(1:mid); R = x((mid+1):end); % Sort left and right sublists recursively L = mergeSort(L); R = mergeSort(R); % Merge the sorted left (L) and right (R) sublists i = 1; j = 1; k = 1; while i <= length(L) && j <= length(R) if L(i) < R(j) y(k) = L(i); i = i + 1; else y(k) = R(j); j = j + 1; end k = k + 1; end % At this point, either L or R is empty while i <= length(L) y(k) = L(i); i = i + 1; k = k + 1; end while j <= length(R) y(k) = R(j); j = j + 1; k = k + 1; end end end
現在のフォルダー内の SortTest.m
という名前のファイルで、バブル ソートとマージ ソートのアルゴリズムのパフォーマンスを比較するパラメーター化されたテスト クラス SortTest
を作成します。クラスの len
プロパティに、テストに使用するリスト要素の数が格納されます。
classdef SortTest < matlab.perftest.TestCase properties Data SortedData end properties (ClassSetupParameter) % Create 25 logarithmically spaced values between 10^2 and 10^4 len = num2cell(round(logspace(2,4,25))); end methods (TestClassSetup) function ClassSetup(testCase,len) orig = rng; testCase.addTeardown(@rng,orig) rng("default") testCase.Data = rand(1,len); testCase.SortedData = sort(testCase.Data); end end methods (Test) function testBubbleSort(testCase) while testCase.keepMeasuring y = bubbleSort(testCase.Data); end testCase.verifyEqual(y,testCase.SortedData) end function testMergeSort(testCase) while testCase.keepMeasuring y = mergeSort(testCase.Data); end testCase.verifyEqual(y,testCase.SortedData) end end end
testBubbleSort
メソッドに対応するすべてのテストのパフォーマンス テストを実行し、結果を baseline
配列に保存します。実際の結果は、表示されている結果と異なる場合があります。
baseline = runperf("SortTest","ProcedureName","testBubbleSort");
Running SortTest .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .. Done SortTest __________
testMergeSort
メソッドに対応するすべてのテストのパフォーマンス テストを実行し、結果を measurement
配列に保存します。
measurement = runperf("SortTest","ProcedureName","testMergeSort");
Running SortTest .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... .......... ..... Done SortTest __________
baseline
オブジェクトと measurement
オブジェクトの対応ペアごとに、Samples
テーブルの MeasuredTime
列の最小値を視覚的に比較します。この比較プロットでは、ほとんどのデータ点は、影付きの類似領域より下にあるため青色になっています。この結果は、大部分のテストでマージ ソートのパフォーマンスの方が優れていることを示しています。ただし、プロットのオレンジとグレーの点が示すように、ある程度小さいリストではバブル ソートのパフォーマンスがマージ ソートより優れていたり、バブル ソートとマージ ソートのパフォーマンスが同等であったりします。このプロットには、比較の概要として、マージ ソートの方がバブル ソートよりも 80% 速いというレポートが示されています。この値は、すべてのデータ点に対応する向上率の幾何平均です。
cp = comparisonPlot(baseline,measurement);
任意のデータ点をクリックまたはポイントすると、比較されている時間測定結果に関する詳細情報を表示できます。
異なるリストの長さで並べ替えアルゴリズムの最悪のパフォーマンスを調べるには、サンプル測定時間の最大値に基づいて比較プロットを作成します。
cp = comparisonPlot(baseline,measurement,"max");
サンプル測定時間の最大値を比較する場合は、類似性の許容誤差を 0.01
に減らします。
cp = comparisonPlot(baseline,measurement,"max","SimilarityTolerance",0.01);
バージョン履歴
R2016a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)