「MATLABの処理が遅い」でお困りの方へ

こんなお悩みは、ありませんか?

  • 1回の計算に数分〜数時間かかり、連続測定や大量データの解析が回らない
  • どこが遅いのか、プロファイリングしてみたものの、対策につながらない
  • parforやGPU化を試したが、期待したほど速くならない
  • 高速化はしたいが、計算結果が変わってしまうのは絶対に困る
  • コードを書いた担当者がいなくなり、手を入れられる人がいない

ひとつでも当てはまる方は、弊社の「MATLABプログラム高速化サービス」が、お役に立てるかもしれません。まずは、コードを拝見して、ボトルネックの見立てと高速化の見込みからお出しします。ご予算に合わせて、処理時間の大きい部分だけに範囲を区切ったご提案にも対応します。

MATLABプログラム高速化サービス — 計算結果を変えずに、速くする。実績例: 68.5秒→1.46秒(47倍)。診断から始める、根拠ある高速化

なぜ、速くならないのか

並列化やGPU化を試しても速くならないのは、腕の問題ではないことが多いです。原因と対策が合っていないだけ、ということが、よくあります。

MATLABプログラムが遅い原因は、主に3種類(計算量、メモリ帯域、実装上の要因)に分かれ、有効な対策は原因によって異なります。例えば、メモリ転送が律速のプログラムをそのままGPU化しても、速くなりません。

だから弊社は、手法を選ぶ前に、診断から始めます。

高速化の標準工程

弊社の高速化は、次の4工程を標準として進めます。

  • ① 既存コードの調査(プロファイリング): ボトルネックを推測ではなく実測で特定する。処理が遅い原因を、計算量律速・メモリ帯域律速・実装上の要因に切り分け、原因に合った対策を選ぶ。
  • ② 高速化の実装: 定石を段階的に適用する。ベクトル化(ループの行列演算化)、並列化(parfor等)、GPU化(gpuArray)、C/CUDAによるMEX化・カーネル実装、メモリ・I/O最適化。複数の候補案を実装して実測で比較し、採用案だけでなく不採用案も理由付きで報告する。
  • ③ 数値一致検証: 着手前に、改修前コードの出力を「正解データ」として保存する。許容誤差の定義(ビット一致/倍精度相対誤差/単精度相当)をお客様と数値で合意した上で、改修前後の出力を突合し、「結果が変わらないこと」を数値で示す。
  • ④ 速度測定: 改修前後の実行時間を、実行条件・データ・環境を明記して測定し、結果を報告する。

適用例: 計測装置の信号処理プログラムの高速化

上記の標準工程を実案件に適用した例。

お客様: 大手建設会社様

ご依頼内容: 研究開発中の計測技術において、1測定あたり約70秒かかるMATLAB計算を高速化したい。アルゴリズムの変更、精度の低下は不可。

課題:

  • 連続測定の実用化には、処理時間を数秒以下にする必要がある
  • アルゴリズムと出力を維持したまま高速化する

ソリューション:

  • 第1次: 合計13案を実装して実測比較。近似計算・行列化・単純なGPU化は効果が小さく(理由付きで報告)、parforによる細粒度並列化を採用(68.5秒→32秒)
  • 第2次: ボトルネックが計算量ではなく、約1,000万点級の配列のメモリ転送にあることを特定。FFT処理の統合、GPUへのデータ常駐化、複数処理を融合した自作CUDAカーネルにより転送を削減
  • 配布はPTX方式とし、お客様の環境にCUDAコンパイラは不要

結果:

高速化の3段階を示す棒グラフ。従来プログラム68.5秒が、第1次の並列化で32秒、第2次のGPUとメモリ帯域最適化で1.46秒に短縮

  • 1測定あたり68.5秒 → 1.46秒(約47倍
  • 精度は正解データ比で追加の誤差ゼロ(単精度)
  • GPU機種ごとの処理時間予測式と選定目安を提示

適用実績

  • 大手建設会社様 — 計測装置の信号処理プログラムの高速化(上記)
  • 大手電子部品メーカー 研究部門様 — レーダ3Dイメージング処理(3D点群+圧縮センシング)の高速化・GPU化を技術コンサルティング形式で支援(事例ページ
  • 計測機器メーカー様 — 3Dボリュームデータの特徴量抽出ソフトの開発とあわせて、既存の再構成処理を計算結果を変えずに高速化(約26分→約3分。事例ページ

高速化のご相談は、このページ下部の「今すぐお問い合わせ」からご連絡ください。

高速化の開発事例

新しいものから順に、掲載しています。

研究シミュレーションコードのGPU高速化

研究シミュレーションコードのGPU高速化

2022年2月22日

研究中のレーダ3Dイメージングについて、実測データから3D点群を生成するプログラムと、アンテナ配置検討のためのシミュレーションプログラムを、GPUを活用して速くしたい、というご相談。

続きを読む

3Dボリュームの特徴量抽出ソフト開発と高速化

3Dボリュームの特徴量抽出ソフト開発と高速化

2021年3月19日

計測装置が出力するRAWボリュームデータから、複数の特徴量を、自動で算出したい。表面に凹凸のあるデータを、深さ方向をそろえてから、解析したい。これまで2D投影画像で行っていた特徴抽出を、ボリュームデータのまま3Dで扱えるようにしたい。

続きを読む

MATLAB処理の高速化

MATLAB処理の高速化

2014年2月8日

Matlabで、現状1分以上かかっているのを、2秒以内まで、約50倍の高速化

続きを読む

その他の事例は、開発事例の一覧をご覧ください。

安心してご依頼いただくために

  • 計算結果が変わらないことを、数値で確認します: 許容誤差の定義を事前にお客様と合意し、改修前後の出力の一致を数値で示します。
  • 納得してからのご発注です: 受注前にコードの事前解析を行い、ボトルネックの見立てと高速化の見込みをご提示します。内容にご納得いただけない場合は、そこでお断りいただいて構いません。
  • 難しい場合は、率直に申し上げます: 事前解析の結果、高速化が難しい、または割に合わないと判断した場合は、その理由とともに正直にお伝えします。
  • 予算に合わせて分割できます: 全体を一度に高速化する必要はありません。処理時間の大きい部分から範囲を区切り、段階を分けたご発注にも対応します。
  • 後から検証できる形で納品します: 改修前後の出力を突合した結果と、速度測定の条件・結果を添えて納品します。ご要望に応じて、Before/Afterの評価と施策の内訳をまとめた報告書も作成します。
  • 環境に合わせて納品します: 実行環境にMATLABが無い場合の実行形式(exe)等での配布や、時間単位の技術コンサルティング形式での支援にも対応します。
  • 成果の研究発表や論文発表も可能です: 成果を、お客様の研究発表や、論文で発表できます。弊社のクレジットは、不要です。もし、お客様の方で、弊社との共同研究の方が都合が良い、という場合は、対応しますので、ご相談ください。

よくあるご質問

どのくらい速くなりますか?

対象のコード・データ・実行環境に依存するため、事前に断定はできません。そのため弊社では、受注前にコードの事前解析を行い、ボトルネックの見立てと高速化の見込みを提示してから着手します。上記の適用例のように、原因の診断が的中すれば、数十倍の改善になることもあります。

高速化で、計算結果が変わってしまいませんか?

この点は、弊社が最も重視している部分です。着手前に改修前コードの出力を「正解データ」として保存し、許容誤差の定義をお客様と数値で合意します。改修後の出力を突合し、結果が変わらないことを数値で示します。

一部の処理だけでも、依頼できますか?

はい、承ります。プロファイリングで処理時間の大きい部分を特定し、そこだけに範囲を区切って高速化できます。実際に、第1次・第2次と段階を分けて進めた実績があります。

コードを社外に見せることに、不安があるのですが?

ご要望に応じて、秘密保持契約を締結させて頂きます。アルゴリズムやコードはデリケートな内容を含むことが多いので、秘密保持契約を締結してからコードをお預かりすることは、よくあります。

MATLAB以外のプログラムでも、可能でしょうか?

はい、C/C++やPython等のプログラムの高速化も、ご相談いただけます。また、MATLABとC/CUDAを組み合わせる形(MEX化・CUDAカーネル実装)での高速化も得意としています。お気軽にご相談ください。

ご相談から開発までの流れ

  • お問い合わせ: お問い合わせフォームから、お知らせください。もし分かれば、現状の処理時間・実行環境・目標をお知らせください。
  • ヒアリング: ZoomやTeams等で話を伺います。
  • 事前解析: コードを拝見し、ボトルネックの見立てと高速化の見込みを提示します。
  • お見積・ご発注: 見立ての内容にご納得の場合、ご発注ください。予算申請用の概算見積にも対応します。
  • 高速化の実施: 候補手法を実測で比較し、採否を理由付きで報告しながら進めます。
  • 検証・納品: 高速化前後で結果が変わらないことを数値で確認し、納品します。

お問い合わせ

MATLABプログラムの処理速度でお悩みでしたら、お気軽にお問い合わせ下さい。
下記の、「今すぐお問い合わせ」をクリックして、フォームにご記入下さい。
お問い合わせには、当日〜翌日にご返信しています。

今すぐお問い合わせ