見出し画像

最適化とはなにか?

おはようございます。またはこんにちは。もしくはこんばんわ。マゲっちSCと申します。10月27日の朝を迎えました。10月ももう最終週ですね。今週の土日はハロウィンで盛り上がるのではないでしょうか?ハロウィンとはもともとはケルト民族の魔除けの行事だったようです。諸説あるようですが冬が近づいてくるこの季節、太陽が出ている日中の時間はどんどん減っていきます。夜になると外を悪魔たちが闊歩する時間帯も長くなると考えられていたようです。そのため悪魔たちに見つかる前(日没前)に家に帰るようにする。仮に何らかの事情で夜に家を出なければならないときは、悪魔たちに見つかっても同じ悪魔であると言えるように黒い衣服で出かけるという風習があったようです。それがお祭りというふうに形を変え、子どもたちが悪魔やおばけの格好をして夜に家々を回り、「いたずらされたくなければお菓子を渡せ(トリック・オア・トリート)」言われた大人たちは悪魔やおばけにいたずらされたくないので、悪魔やおばけたちの要求どおりにお菓子を渡してあげます。古代の悪魔から逃げる風習が時代とともにお祭りとして姿を変え1つの文化となりました。

ただし、クリスマスもそうですが日本に入ってくる段階で様々な情報が落ちていき、間違った形式で入って定着してしまいます。クリスマスは本来イエス・キリストの生誕を祝して、その前日であるクリスマス・イブには教会で神父様からのお説教を聞いたり、自宅で家族とごちそうを食べてイエス・キリストの生誕を祝ったり、サンタ・クロースがかつて貧乏な民をクリスマスに救済した(諸説あり)ことにちなんでプレゼントの交換をしたりするものですが、日本にはごちそうを食べてプレゼントをもらう日として定着しました。また、ごちそうを食べたりプレゼントをするのには家族または愛する人がいいという人も結構多く、家族や恋人がいる人のためのイベントとなってしまっていますね。ハロウィンも同じようにいろいろな情報が抜け落ち、日本に入ってきたのは単純に仮装が楽しくお菓子がもらえるというところだけが入ってきてしまいました。ただ、新しいハロウィンのスタイルということでいいか悪いかはわかりませんが、外国人の方には注目されているそうです。

さて、前置きが長くなりましたが、前回のブログでは歴史的な側面からコンピュータの思想が変化したのかどうかを取り上げました。結果的に扱う情報が増えただけで基本的な思想はほとんど変わっていないということがおわかりいただけたかと思います。あと20年もすればコンピュータが世の中に出て100年ほど経つのですが、ある意味ではもうコンピュータの基本概念はすでに完成されているものであるということがおわかりいただけたかと思います。

最適化とはなにか?

ですが、どれだけ完成された概念や仕組みであっても最適化がなされていなければ意味がありません。では最適化とは一体どういうことでしょうか?最適化の意味を調べてみると「制約条件がある中でいくつかの選択しを組み合わせ、何らかの成果を出す場合にその成果を最小または最大にする」という意味です。例えば100ケタの数値の掛け算を100回処理する場合、短い時間で結果が出せたほうが効率が良く喜ばしいわけです(計算にかかる時間を最小化したい)。その場合、同じCPU(APU)を使った場合でもプログラムの書き方によってその速度が早くなったり遅くなったりします。現在のCPUはコアが複数載っているのが当たり前なのですが、例えば100ケタの数字の掛け算を100回やるのを1つのCPUコアだけで行った場合とマルチコアで(複数のCPUコアを使って)計算した場合、単純に考えると1つのコアだけよりも複数のコアを使って計算したほうが早く終わる確率が高いですよね。ですが、もともとコンピュータのCPUコアは1つだけしか搭載されていないのが普通でした。CPUコアが複数になったのはここ15年くらいの話です。つまり普通にプログラミングしたのでは使用できるCPUコアは1つだけということになります。ですが複数コアを使って計算するようにプログラミングを行うことで搭載されているすべてのCPUコアを使って分業が可能になります。例えば4コア搭載のCPUであれば100ケタの数字の掛け算を1コアあたり25回やればすみます。単純計算で4倍の速度になるわけですから当然計算が1コアの時よりも早く終了します。これが現在言われている最適化と呼ばれるものです。

最適化とはプログラミングのことではなかった?

そもそも最適化という単語が出てきたのはどの分野だったのか?ということですが、私の知る限りではHDDのデータを効率的に扱うため再配置を行うための計算を行い、実データの引っ越しをするためのものでした。今はHDDをメインドライブとして使用している方はそう多くはいらっしゃらないと思いますが、SSDが登場するまでメインドライブはもちろんサブドライブでもHDDを使用することは多くありました。当時はまだフロッピーディスクも現役でしたが、フロッピーディスクで持ち運べないデータ量でなおかつMOドライブがないという環境の場合は外付けのHDDにデータを記録して持ち運んだりもしていました。HDDのいいところとしては大容量であることですね。フロッピーディスクがだいたい1.44MBであった時代にHDDは大体800MB~1GBという大容量でありながら価格としては15,000円もあれば購入ができたと思います。今は更に大容量化していて5,000円もあれば1TBのHDDも購入可能になりましたね。

ですが、HDDにも問題はあります。衝撃や磁気に弱いというところが有名ですが、今回の最適化の件でお話すると最初OSや各種ソフト・各種ドライバを一気にインストールした場合は割とどのデータやファイルも数珠つなぎのようにHDD内に収まっている印象ですよね。しかし、PCというものは使用しなくなったり新しいデータが追加されていくものです。ソフトのアンインストールを行ったりアップデートで新しい機能が追加されたりしたり、必要がなくなったデータを削除した場合などHDD内のデータを何らかの形でいじった場合どうなるのでしょうか?HDDはその名の通り内部にディスクがあり、PCの電源を入れている間は常に回転しています(設定で必要に応じて回転を止めることもできますが)。そして、データをいじる場合はレコードの針のような形状のアームを回転しているディスクギリギリに近づけます。磁気が検出されたらそこには何らかのデータが入っています。磁気が検出されなければそこにデータは入っていません。

例えばその状態がPCを購入した直後、つまり工場出荷時の状態だとします。工場で必要なOSや各種ソフトやドライバはすでにインストール済みですので、HDD内部のデータは頭からある一定のところまで連続して(空いている部分がない状態で)データが入っているはずです。そして皆さんが店頭で購入して企業や各家庭でPCを使用することになるわけですが、もともと入っているソフトの中であまり必要がないものがいくつかあったとします。例えば駅の乗り換えを提案してくれるソフトが必要なかったとします。空き容量を増やすためにも不要なソフトはアンインストールしたいと考えるはずです。そこで皆さんはアンインストールの命令をPCに出して、乗換案内ソフトのデータを削除したとします。すると、工場出荷時にインストールされていた乗換案内ソフトの部分のデータがごっそり消えるため、そこに「空き」という形の磁気のない空間が出来上がります。他にもワープロソフトなどで作ったデータがもう使用しない古いものであったりした場合も、作成したデータを削除すると思いますが、そのデータが入っていた部分は「空き」という形で何もデータがない空間ができます。逆にバージョンアップで新しい機能が追加された場合はHDDの空いている部分にデータが入ります。それは何らかのソフトやデータを削除して空いた場所であったり、HDDのデータが入っている最後尾のヶ所に追加されることもあります。

これは何もHDDだけに限った話ではなくSSDでも追加されるデータのヶ所は空いている部分に対して行われます。USBメモリでも同じことが行われています。ですが、構造上SSDやUSBメモリなどのフラッシュメモリを使用しているデバイスの場合はいわゆる半導体であるため、データへのアクセス速度が落ちることはほぼありません。ですが、HDDの場合はディスクが常に回転しており、目的のデータにたどり着くまでに最悪ディスクが1回転し終わるまでデータへアクセスできないという事態になり、なおかつ使っていくにつれてどんどんデータが分断されて断片的にHDD内の様々な場所に保存されていくことになります。そうするとデータアクセスに対して徐々に時間がかかり始めます。なのである程度使用したらデータアクセス速度をある程度戻すという意味でデータの最適化を行ってバラバラに保存された(断片化された)データをある程度関連のあるデータの塊ににまとめてHDD内に再配置する必要が出てきます。ですが最近はHDDの容量が増えたことと、データの最適化に関してHDDにかなりの負担が長時間かかることになったため、あまり話題に上がることはなくなりました。

現在言われている最適化とは?

思い出話に少し時間がかかってしまいましたが、以前最適化というとHDD内に記録されたデータを再配置することであるという意味で使われていたことがおわかりいただけたら嬉しいです。では、現在はどういう意味合いで最適化という言葉が使用されているのかということですが、簡単に申し上げるとどのハードウェアに対してどんなソフトがより効率的に計算を行うことが可能なのか?という意味合いで使用されることが多いです。少し実感がわかないと思いますので具体例を出させていただきます。最近Windows11が正式にリリースされたことは皆さんも記憶に新しいかと思います。ですが、OSはコンピュータを扱うための心臓部とも言えるプログラムであり、OSがカバーする範囲は他のソフトやアプリと比較するととんでもなく広範囲です。例えば電源管理やメモリ管理はもちろん、いくつかソフトやアプリが立ち上がっている場合どれを優先的に処理してどれを実行待ちの状態にして、どれを完全に計算街の状態にするかということ(スケジューリング)を行ったり、ネットワークを使う場合にはどの情報を通信パケットとしてどこへ送ればいいのかという部分も処理しないといけません。他にもやることはたくさんあります。

OSのカバー範囲ということで少しご紹介しましたが、Windows11では既知の不具合の一つとしてAMD製のCPU(APU)を使用したPCの場合に、以前の状態と比較して処理速度が落ちてしまうというものがありました。現在はすでに修正されているようですが、ビジネス向けの使用用途でも表計算ソフトでの計算速度が少し遅く感じたりグラフの作成がWindows10のときよりも遅くなったと感じたりする方もいらっしゃったかも知れません。またゲーム用途の方の場合はゲームの実行そのものが遅くなってしまい、対戦ゲームではなかなか有利に立ち回れなくなるなどの現象が起きてしまった人もいらっしゃるかも知れません。

なぜこのようなことが起きたのか?ということですが、私が調べた結果ではWindowsや各種有名どころのソフトやアプリは、基本的にintel製CPUやNVIDIA製GPUに対して最適化されているものが多いということです。まずWindowsPCのOSであるWindowsそのものが昔からintel製CPUに対して最適化されてきたという歴史があります。無論AMD社もintelに対抗するべくCPUを製作販売してきましたが、なぜかマイクロソフト社は昔からintel社製のCPUに対してプログラムの最適化を行っています。現在は表記が変わっていますが、以前のWindowsはシステム要件にintel社製のCPU名を表記していたこともあります。その後はintel社とAMD社両方のCPU名を乗せたり、CPU名を記述せずクロック周波数のみ記述するようになっていきました。が、今回の処理速度の低下の件を見るにやはりWindowsはintel製CPUに関して最適化を行っているんだなぁと思った次第ですね。最近ではAMD製APUを搭載したPCも数多く販売されているため、ユーザの中でWindows11を導入した方に関しては被害を被った方もいらっしゃるかも知れません。

最近ではハードウェアの処理できる情報量が増えたためビジネス系のソフトではシステム要件を検索しても対応OSやストレージの空き容量が記述されているだけというものも多くありますが、これがゲームソフトになると記述が途端にintel社製CPUに偏り始めます。例えば皆さんも聞いたことがあるかと思いますが、PCでゲームをする場合のプラットフォームソフトとしてSteam(スチーム)というものがあります。このSteamで動作するゲームの動作環境を調べるとCPU欄にはほとんどのゲームでintel社製CPUでの動作条件が記述されています。もちろんAMD社製APUでも動作しないわけではなく、同等の製品であれば動作するはずですがゲーム製作時のプログラムでどちらのCPUに最適化されているかは動作環境を見れば明らかで当然記述されている方に最適化されています。つまり対戦ゲームであればintel社CPUとAMD社APUを使用している場合はintel社製CPUの方が計算しやすいようにプログラムコードを記述しているため、AMD社製APUでは多少不利になる可能性があるということです。無論ゲームによっては両方のCPUに最適化している場合もあり、その場合には動作環境の記述にはintel製とAMD製両方のCPU(APU)が記述されています。同じようにGPUも記述されている方に対して最適化されています。2021年10月現在ではまだほとんどのゲームでCPUはintel社製、GPUはNVIDIA製の組み合わせで最適化されているゲームが多い印象ですね。

まとめ

というわけで、現在では最適化というとHDD内のデータ再配置のことではなくプログラムコード的にどの製品に合わせてソフトやアプリを製作しているのか?ということに使われている印象ですね。データの再配置に関してはフラッシュメモリの製品が増えてきたことによってあまり意識する必要がなくなりつつあるということでしょう。一方でソフトやアプリのプログラムに関してはできれば現在売れているCPUメーカーに対してすべてを網羅してもらうのが本来はいいのですが、それを行うための労力やコードの記述、プログラムのメンテナンス性を考えると結果としてどちらかのメーカーに合わせたほうがよく、合わせるとしたらOS側がおそらく最適化しているであろう側のメーカーに合わせるしかない。というのが現状でしょう。AMD社も手をこまねいているわけではなく自社努力で最適化されていないプログラムコードであっても効率よく計算するAPUをいくつも開発してきましたが、今回のWindows11で現れた処理速度の低下がAMD社のAPUのみで発生するという不具合で、やはりマイクロソフト社はintel社とのつながりが深いのかなぁと個人的には思ってしまいました。さて、次回はまたWindows11についてのお話をしようかと思っています。一度取り上げた内容なのですがそのときはいつリリースされてWindows10がいつサポート終了になるのかというお話をメインに行いました。次回はWindows11とWindows10との差を比較しながらも導入したほうがいいのか?導入するならいつがいいか?というお話をしていこうかと思っています。ご興味がありましたらまたお立ち寄りください。それでは失礼いたします。

いいなと思ったら応援しよう!