ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

跳ねるボールのシミュレーションの高速化

この例では、生成した MEX 関数を使って MATLAB アルゴリズムの実行を高速化する方法を示します。複数の MATLAB ファイルを使用する複雑なアプリケーションのための MEX 関数を、'codegen' コマンドを使って生成します。'codegen' を使用すると、MATLAB コードがコード生成に適しているかどうかをチェックし、多くの場合 MATLAB アルゴリズムを高速化することができます。MEX 関数を実行して、実行時エラーをチェックできます。

必要条件

この例を実行するには、C コンパイラをインストールしてから、'mex -setup' コマンドを使ってセットアップしなければなりません。詳細については、C コンパイラの設定C コンパイラの設定を参照してください。

新規フォルダーの作成と関連ファイルのコピー

以下のコードは、現在の作業フォルダー (pwd) 内にフォルダーを作成します。この新規フォルダーには、この例に関連するファイルのみが含められます。現在のフォルダーに影響を与えたくない (またはこのフォルダーにファイルを生成できない) 場合は、作業フォルダーを変更する必要があります。

コマンドの実行:新規フォルダーの作成と関連ファイルのコピー

coderdemo_setup('coderdemo_bouncing_balls');

関数 'run_balls' について

関数 run_balls.mrun_balls.m は、シミュレートする跳ねるボールの数を指定するために 1 つの入力引数をもちます。シミュレーションは、エネルギーが存在しなくなり、すべてのボールの状態 (位置) が返されるまで実行され、跳ねるボールがプロットされます。

type run_balls
% balls = run_balls(n)
% Given 'n' number of balls, run a simulation until the balls come to a
% complete halt (or when the system has no more kinetic energy).
function balls = run_balls(n) %#codegen

%   Copyright 2010-2011 The MathWorks, Inc.

% Seeding the random number generator will guarantee that we get
% precisely the same simulation every time we call this function.
old_settings = rng(1283,'V4');

% The 'cdata' variable is a matrix representing the colordata bitmap which
% will be rendered at every time step.
cdata = zeros(400,600,'uint8');

% Setup figure windows
im = setup_figure_window(cdata);

% Get the initial configuration for 'n' balls.
balls = initialize_balls(cdata, n);

energy = 2; % Something greater than 1
while energy > 1
    % Clear the bitmap
    cdata(:,:) = 0;
    % Apply one iteration of movement
    [cdata,balls,energy] = step_function(cdata,balls);
    % Render the current state
    cdata = draw_balls(cdata, balls);
    refresh_image(im, cdata);
end

% Restore RNG settings.
rng(old_settings);

MEX 関数の生成

最初に、コマンド codegencodegen を使用して MEX 関数を生成し、コンパイルする MATLAB ファイルの名前を指定します。サンプル入力 (-args 0) を渡して、生成した MEX 関数が double 型の入力を指定して呼び出されることを示します。

codegen run_balls -args 0

関数 'run_balls' は他の複数の MATLAB 関数を呼び出しますが、'codegen' を呼び出すときに指定する必要があるのはエントリ ポイント関数だけです。

既定の設定では、'codegen' は現在のフォルダーの中に 'run_balls_mex' という名前の MEX 関数を生成します。これにより、MATLAB コードと MEX 関数をテストして結果を比較することができます。

結果の比較

元の関数 'run_balls' を実行して所要時間を計った後、生成した MEX 関数を実行して所用時間を計ります。

tic, run_balls(50); t1 = toc;
tic, run_balls_mex(50); t2 = toc;

高速化の推定値:

fprintf(1, 'Speed up: x ~%2.1f\n', t1/t2);
Speed up: x ~21.7

クリーン アップ

ファイルを削除して元のフォルダーに戻ります。

コマンドの実行: クリーンアップ

cleanup
この情報は役に立ちましたか?