スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« Ubuntu版の性能問題 | トップページ | メール環境の移行とか »

Ubuntu版が遅い理由と解決法

昨日書いたように、ソースコード的には同等のWindows / macOS / Ubuntu版AGMConvで同じ処理を行わせると、Ubuntu版だけ、処理が遅くなっていた原因を調べていたのだが、やっと判った。解決方法もあったので、その気になれば、Ubuntu版を最速にもできる。

結論から書くと、Ubuntu環境でUbuntu版AGMConvを動作させた場合、同じマシン上のWindows環境でWindows版を動作させた場合と比べて、処理時間が1.5倍くらいかかっていた原因は、Ubuntu環境では、処理実行時にCPUのクロック周波数が低く設定されていたからだ。

と、言うことで、Ubuntuを使っている人の中には、PCスキルが高い人もいれば低い人もいる筈なのだが、作者はどうなのか、というと、PCスキルはある筈ではあるのだが、普通は呑気にしているので、高いPCスキルを要求されると、普通にしている時には、その要求レベルには達していないかもしれない。

何が言いたいのか、というと、Windowsには省電力設定に「電源」の項目があって、「バランス」だとか「省電力」だとか「高パフォーマンス」だとかの設定がある訳なので、作者的にも、性能測定をする時には、「高パフォーマンス」を選択していた訳だ。

しかし、Ubuntuには、そんな設定は無かったので、何も設定せずに使っていたのだが、今回、Ubuntu版AGMConvのみ性能が出なかったので、少し真面目に、Ubuntuでは、その辺がどうなっているのかを調べてみた所、AGMConv実行時のクロック周波数は、1600MHzだとか、高くても2200MHzしか出ていなかった訳だ。

性能測定環境のCPUである所のCore i7-2600の定格周波数は3.4GHzなので、そんな低いクロックで動作していれば、定格周波数で動作している筈のWindows環境と比べて処理性能が低くなるのは当然の事だった訳だ。

で、上記の周波数は端末で、「cat /proc/cpuinfo | grep MHz」、というコマンドを打ち込んで見ていたのだが、ネットで調べてみると、Ubuntuでは、CPUの周波数を設定できるツールもある様だった。

具体的には、「indicator-cpufreq」、というツールなのだが、これをインストールするためのコマンドは、「sudo apt-get install indicator-cpufreq」、で、このコマンドを使ってインストールした後、ログインし直すと、メニューバーの右側にアイコンが追加された。

そのアイコンをクリックすると、CPUの周波数が切り替えられるのだが、前述の様に、作者環境のCPUはCore i7-2600なので、1.6GHz〜3.4GHzまで、0.2GHz毎に選択可能になっていた。

もっとも、別に、「Conservative」/「Ondemand」/「Powersave」 /「Performance」の選択が可能になっているので、CPUを最高速で動作させたければ、「Performance」を選択すれば良い様だ。

Ubuntuのデフォルト設定では、「Ondemand」が指定されていて、このモードでは、通常は低クロックで動作させておき、高負荷が発生した時に、クロック周波数を上げる事になっているのだが、前述の様に、このモードが設定されている状況だと、AGMConvの処理速度はWindows環境よりも1.5倍程度低速になってしまっていた訳だ。

このため、この設定を「Performance」に変更し、AGMConvを動作させてみたのだが、その結果、前述のコマンドで見てみると、クロック周波数は常時3.4GHzに固定され、処理性能も、丁度、Windows環境と同じ1分30秒程度になった。

と、言うことなので、Ubuntu版は、Ubuntuのデフォルト環境で動作させると、Windows環境で動作させるよりも、数割低速になる可能性があるのだが、その原因は、Ubuntu環境では、デフォルト設定では、CPUのクロック周波数が抑え気味にされるのが原因なので、Windows環境並の性能を出したければ、上記の様なツールでCPUクロックを上げれば良い、という事になる。

ちなみに、冒頭に書いたように、作者的には、Ubuntu版をWindows/macOS版よりも高速に動作させる事も可能である事が判った。

具体的には、まず、昨日書いたように、Ubuntuでは、メモリアロケーションが遅いので、自前メモリプールを作成して、処理実行中のメモリアロケーションをなくすと、1分32秒の処理時間が1分28秒にまで縮まった。

そして、Ubuntu環境で使用しているコンパイラの最適化フラグとして、「-march=native」というのがあるのだが、これを指定すると、1分28秒の処理時間は1分22秒にまで縮まった訳だ。

前述の自前メモリプールを作成するコードはWindows環境でも試してみたのだが、Windows環境では、そもそも、メモリアロケーションは遅くはないので、効果は全くといってよいほど無かったし、Visual StudioだとかXcodeには、-march=nativeに相当する最適化フラグは存在しない。

なので、Windows版の速度が1分35秒であるのに対し、Ubuntu版は最高速にチューニングすると1分22秒で処理できるので、明らかに最速になる訳なのだが、前述の「-march=native」というフラグは、ビルドしている環境のCPUの特性を細かく使って最適化を行わせるフラグになる。

このため、ソースコードを配布して、ユーザー環境でビルドさせる場合には使えるのだが、作者の様に、不特定多数のユーザーに向けてバイナリを配布する場合には、作者環境と異なるCPUが使われている場合に、処理性能が低下するリスクがある。

と、言うことなので、配布バイナリでは「-march=native」フラグは指定できないのだが、それでも、メモリアロケーションを減らした分、若干だが、Ubuntu版はWindows版よりも高速に動作する事になる筈だ。

もっとも、その前提条件としては、CPUクロックを最高に上げる必要があるので、そういうツールをインストールして使わない場合、Ubuntuマシンでは、同一CPUで動作しているWindowsマシンよりも、ずっと、低速でしか動作しない可能性もある。

« Ubuntu版の性能問題 | トップページ | メール環境の移行とか »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/65120529

この記事へのトラックバック一覧です: Ubuntu版が遅い理由と解決法:

« Ubuntu版の性能問題 | トップページ | メール環境の移行とか »

2017年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google