見出し画像

【速さだけじゃないの!?】プログラム高速化の実践的メリット3選

ムンペイと申します。30年以上プログラミングをしています。学生時代に高速化の面白さにハマり、そのまま仕事でも同じようなことをすることになりました。

さて、高速化と一口に言いますが、メリットは高速になることだけではありません。高速化から得られるメリットを3つ、ご紹介します。


1. 処理が早く終わる

処理が早く終わります。一番期待される効果はこれでしょう。
早く終わる事自体はわかりやすいと思うのですが、高速化の程度によって、得られるものは様々です。

数%~2倍までの高速化は、処理を何万回も繰り返すとか、そもそも1回が非常に長い(例えば、数十分、数時間)といった場合に取り組むとよいでしょう。縮める分母が大きいので、高速化率としてはわずかでもはっきりした効果が得られるものです。プログラムには手を入れず、CPUを最新化することで達成できるかもしれません。

時間をかけることのコストパフォーマンスについて、予めよく考えて納得しておきます。楽しいからやる!という結論もしばしばですが・・・。

2倍~特に10倍以上の高速化が実現できると、ワークフローが変わる可能性を秘めています。

たとえば、10時間かかる処理の結果を分析する仕事があったとします。計算は夜間に仕掛け、結果は翌朝に確認。結果を1~2時間かけて分析し、フィードバックを得て必要なら次の計算を準備します。すぐに仕掛けても勤務時間中に計算は終わらないので夜間にまた仕掛けよう、といった1日1回のサイクルになるでしょう。
しかし、処理が10倍高速化されて1時間で終わるようになると、その日のうちに結果がわかり分析が可能です。複数回試行することも可能になるでしょう。

別の例として、ウェブアプリを想像してみます。1回のリクエストで100秒かかる計算があるとすると、HTTPタイムアウトを超える懸念があるため、リクエストのレスポンスとして結果を返す同期処理は厳しいです。リクエストを計算開始と計算結果取得に分けてバックエンドで非同期化処理する必要があります。場合によっては、計算完了をメール連絡するなどの追加対応も必要になるかもしれません。ユーザー側も集中力が切れて別のことを始めてしまい、結果確認は1時間後になるかもしれません。
しかし、処理が10倍高速化されて10秒で終わるようになると、同期処理に十分収まりますし、ユーザー側も待機してすぐに結果を確認できます。

数倍以上の高速化を達成するには、まずはハードウェアの性能を引き出しているかを追求します。しかし、10倍以上の高速化を達成するには、通常はアルゴリズム面でのレベルチェンジが必要ですが、処理内容によってはGPUなどの並列性で殴るタイプのハードウェアでも達成できるでしょう。

2. 安いコンピュータが使える

ちょっと意外かもしれません。
以下のようなロジックです。

100の処理をしたいとします。コンピュータの能力を20%しか引き出せないプログラムを使う場合、100÷0.2=500の性能を持ったコンピュータが必要です。
一方、コンピュータの能力を90%引き出せるプログラムを使う場合、100÷0.9=112の性能を持ったコンピュータがあれば良いです。

プログラムの違いで、コンピュータに求められる性能が4倍以上も違っています。性能が4倍のコンピュータは、費用は4倍以上することも多いですが何とかお金で解決はできそうです。しかし、これが10倍などになってくると、そもそも10倍速いコンピュータが存在するかどうかも分からなくなります。

オフィスワークや開発で使うPCのようにいろいろな仕事をする場合は性能が良いものがより良いに決まっていますが、機器の制御用やウェブアプリのバックエンドで動く計算など、いつも決まった処理を繰り返すのであれば、プログラムを高速化することで、コンピュータの費用を抑えることができます。

3. 消費電力を削減できる

性能の高いコンピュータは多く電力を必要とします。

基本的な物理特性として、半導体は電力を多く与えれば速く反応します。
ですので、性能が良いコンピュータは消費電力が多く、性能がそこそこのコンピュータは消費電力は低くなります。

また、近年のコンピュータは、いつもフルパワーで動かさず、計算性能が必要なときだけ電力を多く投入して性能を高める(ブーストする)機能が備わっています。

ブースト時の最高値(ピーク性能)が高いプロセッサはブーストしないときの消費電力も高めで、ピーク性能が低いプロセッサはブーストしていないときは非常に電力が低い、という傾向があります。これは前述の半導体の物理的特性から来るものです。

これらの特徴を踏まえると、プロセッサの性能をよく引き出す高速化されたプログラムを動かすならば、ピーク性能は低いが省エネ性能が高いプロセッサを使えるのです。

加えて、ブースト時とアイドル時の電力の差は10倍以上になることも珍しくありませんので、早く処理が終わればブーストを早く終えられることも、消費電力の節約に寄与するでしょう。

ちょうど今 Intel Core Ultra の発表がホットですが、最上位のCore Ultra 9 のブーストと最下位の Core 3 のTDP(消費電力の設計上の最大値。ブースト時の消費電力という意味に近い)は2倍違います。プログラムの工夫により Core 3 で足りるならそのほうが電力消費も費用も節約できるわけです。

高速化はロマンである

実際的なメリットも多数あるプログラムの高速化ですが、そもそも高速化の取り組みは単純に楽しいものです。10倍といった大幅な高速化もよいですし、1%ずつジリジリ極めていくような高速化も楽しいです。
もし仕事としてできるなら、趣味との区別がもはやつかないかもしれませんね。そのあたりの話はまた別の機会に。

これにて御免!

(見出し画像は、UnsplashNagara Oyodoが撮影した写真を使わせていただきました)

この記事が気に入ったらサポートをしてみませんか?