MATLABの計算を約100倍速くした話(AIに任せたところ、任せなかったところ)
こんにちは。
小澤泰生です。
弊社のお客様や、名刺交換・お問い合わせをいただいた方々、あと昔からの知人向けの、近況報告メルマガです。
(この記事は、お客様や知人向けに配信している近況報告メルマガの内容を、図を1枚足して転載したものです。)
前回の号では、「生成AI寄りの話と、コンピュータビジョン寄りの話、どちらが読みたいですか?」と質問させていただきましたが、お返事をくださった方、ありがとうございました。
結果は、ほぼ全員が「AI」でした。(コンピュータビジョン派がゼロだったのは、ちょっと寂しかったですが。)
で、何人かの方には、お返事の中で「次は、MATLABの計算を100倍くらい速くした話を書きます」と予告しましたが、今回はその話です。
AIの話でもあるので、ちょうどいいかなと。
1回の計算に68.5秒
昨年(2025年)の11月に、ある会社の方から、ホームページ経由でご相談をいただきました。
ある計算をMATLABで行なっているが、1回の計算に1分以上かかる。(こちらで測ったら、68.5秒でした。)これを、連続測定に使えるくらい速くしたい。でも、社内に高速化の専門家がいないので依頼したい、というお話でした。
プログラムを送っていただき、早速プロファイラーで時間計測すると、プログラム的には色々と計算してましたが、メインとしては、大きい1次元の入力データに対して、線形補間(interp1)と高速フーリエ変換(fft)を行なう部分が、律速段階となっているようでした。
お客さんのご要望としては、
「計算の中身(アルゴリズム)は、なるべく変えずに」「できたら、10倍くらい速くして欲しい」
という話だったのですが、まぁ、アルゴリズムを変えないとすると、私の経験では、確かに昔のMATLABは、インタプリタ実行だったので、ループを行列化したりとかすれば、それくらい速くなったのですが、今のMATLABは、そもそもネイティブ・コードだし、しかも実行時にコンパイルもするはずなので、まぁ、速くなっても、2倍くらいかな、と思ってました。
1回目:人力メインとChatGPTのサポートで、2倍ちょっと
2025年12月〜2026年3月まで作業したのですが、律速段階を潰すのが、基本戦略なので、
- ループは行列で書き換える
- 線形補間の関数を、別の関数に置き換える
- 計算を並列化する(parforとか)
- GPUで計算する
あたりを、10ステップくらい試しました。
結果は、68.5秒 → 32秒。約2.1倍です。
ChatGPT(当時はGPT-5.0あたり)にも相談したのですが、当時は、私の考えと、あんまり変わらなかったので、参考程度の利用、という感じでした。
意外だったのは、GPUを使うと、逆に遅くなったことです。(45秒〜72秒。行列計算+GPUの組み合わせが一番遅かった。)データが大きすぎて、GPUとのデータのやり取りとメモリ不足で、速くなるどころでは、なかったんですね。
なので、3月にお渡しした報告書には、正直に
「GPUの利用はあきらめて、parforの並列化がベスト」「これ以上は、データを間引くなど、計算の中身を変えないと難しい」
と書きました。
ちなみに、このとき、もう一つやっておいたことがあります。元のプログラムの計算結果を「正解データ」として保存して、高速化したプログラムの結果が、正解と、どれだけずれているかを、いつでも数字で確認できるようにしておいたことです。
地味な作業ですが、これが後で効いてきます。
7月:AIエージェントで、再挑戦
6月に、ClaudeのFable 5.0が出て、これが凄いらしい、と大評判になっていたのですが、この6月のFable祭りには乗り遅れてしまい、試そうかな、と思っていたら、いきなり終了してしまったので、ガックリきていたのですが、
7月にFable 5.0が再登場しました。前のメルマガにも書きましたが、ちょうどSan Franciscoで、AI Engineer World's Fair 2026というカンファレンスに出てたので、「おお、復活したか〜」っていう感じで、結構会場は、盛り上がってました。
けど、出張先だし、当時まだ私はAgentic Codingに対応しきれてなかったので、帰国してからやるか、という感じでいました。
Fableが出たら、やらせたい、高度で複雑なタスクのリスト、というのを用意していたのですが、おそらく今回も、1週間程度の提供だろう、という予想(当時)だったので、割とすぐに結果が出そうな案件として、
「そういえば、MATLABの高速化の案件があったな」
と思い出して、Claude Code Fable 5で試しにやってみることにしました。Claude Codeなので、エージェントでのコーディング他の作業となります。
エージェントというのは、チャットで答えを返すだけではなく、AIが自分でプログラムを書き換えて、あるいは実際にMATLABを動かして、時間を測って、また直して…というのを繰り返してくれるものです。(そう、自律的に実行されます。)
ChatGPTの頃は、私がプログラムを動かして、結果をコピペして返す、という往復だったので、ここのスピードが全然違いました。(ま、他にも、色々テクニックはあるのですが、それは、おいおい。)
で、AIに細かく測らせてみて分かったのは、遅いのは「計算」ではなく、「データアクセスの帯域幅」だった、ということです。
- CPUのコアを6個から10個に増やしても、ほとんど速くならない
- 時間の半分以上が、大きな配列からデータをかき集める処理…。
要するに、メモリの通り道が渋滞していました。(3月の時点で、並列度を上げてもCPUの稼働率が上がらないし、GPUの稼働率も低いのは、おかしいなぁ、と、薄々思っていたんですが…。)
そこで、
- データを単精度にして、量を半分にする(結果の精度は担保する)
- データはGPUに置きっぱなしにして、CPUとのやり取りは最初と最後だけにする
- 毎回同じになる計算は、1回目の結果を使い回す
- あとは、MATLABのParallel Computing Toolboxの仕様では、演算ごとに途中の配列が作られるので、それを回避するために、いくつかの処理を、自作のGPUプログラム(CUDA)で1つにまとめる
といったことを積み重ねた結果、
68.5秒 → 1.46秒(約47倍)
になりました!

マジかよ?
3月に「あきらめる」と書いた、まさにそのGPUで、です(笑)。しかも、同じノートPCで、データの間引きもなし、計算結果も元のまま。
お客様にご報告したところ、とても喜んでいただけて、そのまま追加でご依頼いただき、8月末に納品しました。
AIが「遅くなりました」と言ってきた話
ただ、AIに全部お任せ、というわけにはいきません。
途中で、AIが「連続して実行すると、2.5〜4.6秒に遅くなります」と報告してきたことがあります。けっこう自信満々に(笑)。
でも、私が普通にMATLABから5回続けて実行してみると、1.44〜1.50秒で、全然遅くなっていない。
原因を調べてみると、AIのテストのやり方の問題で、MATLABを起動した直後だったり、直前に重い処理を走らせていたり、GPUの状態を監視するツールを同時に動かしていたり、という条件で測っていたからでした。(別の日には、監視ツールを動かすだけで、1.8倍くらい遅く見えたこともあります。)
自信満々で言ってくる人に対して、「それは間違っている」とは、心理的には言いづらい。特に日本人には難しいのかな、とも思いますが、AIと毎日8〜10時間も接していると、だんだん空気を読まない人間になってくる今日この頃。(それが良いのかどうかは、わからんが。)
AIは、手を動かすのは本当に速いんですが、「そのやり方で合ってる?」というところは、まだ人が見ないと危ないな、というのが実感です。
一番大事なのは、結果が変わっていないこと
高速化で一番怖いのは、「速くなったけど、計算結果が変わってしまった」ということです。
特に、研究や計測のプログラムだと、ここは重要です。
今回は、AIがプログラムを何度書き換えても、毎回、3月に作った「正解データ」と比べて、誤差が元のプログラムと同じであることを確認してから、次に進みました。(どこまでの違いなら許せるかも、事前にお客様と決めていました。)
逆に言うと、「何をもって正しいとするか」が先に決まっていたから、AIに安心して任せられた、ということだと思います。
その後の話
この話は8月末で終わるかというと、実はその先があります。ここから先は、社内での検証(テスト)の話となります。
2026年9月に、今度はOpenAIの、GPT-6 Astraが発表されました。「AGI時代へようこそ」という触れ込みで、なんか凄そうじゃ無いですか!?
じゃ、これは試すしか無いだろう、ということで、早速このプロジェクトを試してみました(笑)
プロンプトは、割とシンプルで、要約すると、
「今回のセッションでは、あなたのベストと思う方法で、進めてくれて良いです。毎回承認は不要なので、目標達成の結果まで、一気に作ってもらって、最終的に報告してください。」
みたいな感じ。ちなみにこの時に設定した目標は、「1秒を切ること」です。凄い目標だ! 元々、68.5秒もかかっていたのに!
AIの意見を聞きながら、AIのやりたいように進める。う〜ん、なんて良い管理者なんだ。あのまま会社に勤めていたら、良い上司になったのかもなぁ〜。
なーんて、思っていたら、Astraくん、やってくれましたよ。
0.915秒!!
凄い! 1秒切ったよ。やっぱ、Astraすげー。
その後の話(2)
GPT-6 Astraの凄さは分かったんだけど、そういえば、同じくらいの時期に、Fable が、5.0 → 5.1 に、バージョンアップしてました。
個人的には、Astraよりも、Fableの方が好きだったりするので(ここら辺の、モデルの性格の違いとかは、また機会があれば話をしますが…)
やっぱ、Fableくんにも頑張ってもらおう、と思って、またまた試してみました。
その時のプロンプトは、こんな感じ。
「前回1.46秒でしたが、最近OpenAI社のGPT 6.0 Astraというのが出て、それにさらなる高速化をしてもらいました。結果として、0.9秒と、1秒を切ってくれました。さて、前回作業をしてくれた時は、Fable 5.0だったと思いますが、今は5.1にバージョンアップしたので、さらに高速化ができるのでは、と思っています。例えば、目標として、0.5秒とか、0.3秒とかになりませんか?」
ん〜、なんて競争心を煽りつつ、静かな圧力をかける、パワハラ・プロンプト!
(どこが、いい上司だ(笑))
まぁ、流石にFable 5.1くんでも、これは無理だろう、と思っていたのですが、なんと、
- 計算結果が全く同じ版:0.74秒(約93倍)
- わずかな丸め誤差は許す版:0.44秒(約156倍)
というところまで出してくれました!
動作環境は、同じノートPCでの数字です。流石に、ちょっと、チートしてるんじゃないか、と思ったのですが、正解データには合っているし、説明を聞いた限りでは、理にかなっていたので、おそらく達成している、と思います。
AIで何が変わったか
今回、私が一番感じたのは、「前だったら、手間がかかりすぎてやらなかったところまで、踏み込めるようになった」ということです。
3月の時点では、2倍ちょっとで、正直これ以上は難しいと思っていました。でも、AIを使うと、試せる案の数が桁違いに増えるので、行けるところが、ずっと先になりました。
なので、以前に
「この計算、遅いんだけど、色々検討したけど、諦めた」「GPUにしてみたけど、なぜか速くならなかった」
というのがあれば、今なら、話が変わってくるかもしれません。
遅いMATLABの処理、速くできるかも
ということで、今回は一つご提案です。
もし、お手元に
- 1回の計算に、数十秒〜数分以上かかっている
- 連続測定やリアルタイム処理に使いたいけど、間に合わない
- 並列化やGPU化をしてみたけど、あまり速くならなかった
- CPUのコア数を増やしても、速くならない
というMATLABのプログラムがあれば、お問い合わせフォームから、お知らせください。
(これは、宣伝です(笑)。一応、メルマガの目的は、宣伝目的もあるので。)
どこが詰まっていそうか、どのくらいまで速くなりそうか、わかるかも。
高速化のサービスについては、こちらのページにまとめています。
https://algo-dev.com/services/speedup/
それで、ぶっちゃけ、MATLABの高速化には興味ないけど、AIを使った開発、いわゆる「AI駆動開発」には興味がある、という人もいると思います。
ま、AI駆動開発でご予算取れればOKですが、そういうのが難しい場合、今回みたいな何らかの開発案件にしてくだされば、ついでに、AI使った開発のレクチャーとかも、追加で可能なので、ご検討ください。納品物には、.md形式の設計資料とかも入れるので、そちらで、Claude CodeやCodex、CursorとかAntigravityが使える環境であれば、おそらくそのまま、そちらでも動作すると思います。(たぶん。まだトライアル的ですが。)
ということで、感想あれば、お問い合わせフォームから、お気軽にどうぞ。
それでは。

