速い順に並べると以下のようになります。
1) inline
2) file-pass, nest-pass, sub-pass
3) nest-share
4) sub-global
5) file-global
まず、inline が速い理由として、関数呼び出しのオーバーヘッドの影響を受けないことがあげられます。
次に、file-pass, nest-pass, sub-pass は inline よりも遅くなる原因を説明します。データを呼び出された関数に渡すときに、呼び出す側の関数は呼び出される側の関数がデータのある場所を特定できるようにセットアップします。このセットアップは関数呼び出しのオーバーヘッドとなり、パフォーマンスに影響します。
さらに、 nest-share が file-pass, nest-pass, sub-pass よりも遅くなる理由を説明します。もしワークスペースが入れ子関数と共有され、かつ、入れ子関数に渡されるデータがこのワークスペース上にある場合、データ渡しよりもパフォーマンスは遅くなります。もし、 MATLAB が共有ワークスペース上の変数を参照する場合、ワークスペース上の変数を検索するからです。一方、データが呼び出し側の関数により渡される場合、MATLAB はデータを検索する必要がなくなります。
最後に、グローバル変数を含む関数呼び出しは、そのほかのケースよりも非常に遅い理由を説明します。関数がグローバル変数を呼ぶ場合、パフォーマンスは遅くなります。これは、グローバル変数を検索するための、現在のワークスペースよりも外側も検索する必要があるからです。
MATLAB アクセラレータを OFF すると、inline と file-global のパフォーマンスが大幅に異なることが確認できます。
feature accel off
これらのパフォーマンスは一般的な話であり、実際には、OS、CPU、などにより異なる場合もありますので、ご注意ください。