- ベストアンサー
一部のOSではCコンパイラーの最適化が制限されている理由とは?
- 一部のOSではCコンパイラーの最適化が制限されている理由とその影響について解説します。
- 最適化の結果としてのサイズの削減や不要な命令の実行防止などが挙げられます。
- また、インテルコンパイラーについても同じような制限があるのかについても触れます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
最適化がOSに占める割合次第ですが最適化された分、他の処理が動作して食いつぶすって事はありそうですね。 あとサイズ最適化と速度最適化は往々にして両立しません。 >により、1マイクロW以下でも構わないので、それが本当に >今の電力事情の日本や、地球の温暖化対策もなるのでしょうか? 通常のパソコンの使い方だと命令の消費するパワーよりもGPUやモニタやHDDやCPU自体の待機動作パワーの方が食っている気がします。短時間でスタンバイに入るほうが省電力でしょうね。 >インテルコンパイラーは同じようなことを言えるでしょうか? 質問の意味がわかりません。
その他の回答 (6)
- Gotthold
- ベストアンサー率47% (396/832)
1マイクロWって適当に挙げた例だと思っていたのですが 本気で1マイクロWですか? たとえ1億台あってもたった100Wの節約にしかならないのですが、 これって規模に対してほとんど誤差みたいなものではないです?
お礼
ありがとうございます。 CPU製造メーカーも、どの命令が何Wかかるというのは、一切公表されていない どころか、公表不能な数字なはずです。 代わりに相当古いCPUであれば、1命令あたりの必要クロック数というのが 公表されていた時期も・・・ 今でもあるものはありますね。 この必要クロック数を減らすと、アイドル状態が存在するOSであれば そのクロック分(=命令分)同一のCPUであれば、相応に 電力が節約できるのではないでしょうか? 例えで、、1命令で1μWと仮定しましたが、いくつかの要素が重なって アイドル状態が増えれば、1命令ですまない最適化も可能かもしれません。 ちなみに、ほぼ同時期に出ているCPUであれば、高速なCPUでアイドル状態が 多いよりも、低速なCPUで負荷がかかっているほうのが、電力は食わないはずです。 (普通に節電設定するだけでも同じことですが)
- kmee
- ベストアンサー率55% (1857/3366)
評価は難しいですね。 ・消費電力は、命令によって違います。ある1命令より、同等の2命令の方が電力が少ない、ということもありえます。 ・サイズ最適と速度最適は背反なところがあります。 瞬間の電力が下っても、トータルの電力量は時間が延びた分増える可能性があります。 ・HDD等はある程度のまとまった量で処理するので、数バイトの削減では効果が無い。 また、キャッシュ等のしくみがあり、転送量=実際のアクセスとは限らない マイコンレベルの小規模回路なら総合的な評価もできるでしょうけど、サーバークラスになると複雑すぎますね。
お礼
ありがとうございます。 >消費電力は、命令によって違います。ある1命令より、同等の2命令の方が電力が少ない、ということもありえます。 これは、CPUメーカーが精密な試験をすれば、ある程度の値が出てくるかもしれませんが・・・ これは言えるかもしれませんね。 2×3=6の計算をするより、おそらく 2+2+2=8の計算のが、電力が食わないという可能性もあるでしょう。 (かつ、相当古いCPUのうち、掛け算命令がないものですと、 2×3=6より、2+2+2=6のが、掛け算ライブラリを経由しないため、高速です) >・サイズ最適と速度最適は背反なところがあります。 サイズ最適はによる高速化、厳密には、下手にサイズを増やす最適化を行なわずに 普通に実行させたほうが、L3キャッシュのような広大なキャッシュがある場合 高速になるのでは?という実証結果が、個人的にわずかにでています。 gccコンパイルオプション -funroll-loopsの有無で、 同じCPUのL2キャッシュ512kでは、最適化ありのが高速で、ちょっとだけ早い キャッシュ1Mでは、最適化なしのが高速でした。 これは、L2キャッシュにもともとおさまりにくいものを、ループを削減化して 高速化するのと、L2キャッシュにおさめて、メモリアクセスを減らしてキャッシュ内で 完結できたという違いですが、後者ではメモリアクセスが削減できる分 メモリ読み出しにかかる電力が節約できるのでは。。と トータルの電力量が延びないようにするのは、未来のコンパイラの仕事かも しれないですね。(命令ごとの概算電力量が公表されることを前提) >・HDD等はある程度のまとまった量で処理するので、数バイトの削減では効果が無い。 元々、高速化させるために、昔から256バイト?512バイトを最低アクセス単位と していましたが、そのような仕組みがなく1バイトごとにシステムコールにアクセス していたら、そのオーバーヘッド分もあるかもしれません。 でも、このあたりは、もともとの言語の仕様でほとんどバッファリングするように できているはずですので、あまり問題ないかと
- dscripty
- ベストアンサー率51% (166/325)
サーバーの省エネを考えるなら、コンピュータの消費電力より、冷却にかかる消費電力を解決した方がはやいよ? 北極圏にデータセンターを移すだけでかなりの省エネ。 日本なら北海道か東北? でも質問には関係ないかなぁ。。。
補足
ありがとうございます。 移転とかしてしまえば、確かに省エネですが、(実際に石狩に・・・) そういうのを全くしないのを前提での省エネになるかのことです。
- ys_captain
- ベストアンサー率29% (242/821)
OSを再ビルドするのに人力、お金がかかりすぎてペイしないと思います。
補足
一度、OSを再ビルドする環境が整ってしまえば、 OS再ビルドは、OSがもっている簡単なバッチでできます。 言ってしまいますと、FreeBSDですが 以下システム cd /usr/src make buildkernel KERNCONF=GENERIC make buildworld to...syngle mode... make installkernel KERNCONF=GENERIC make installworld インストールされたソフトは cd /usr/ports/ports-mgmt/pkg_replace; make install clean; pkg_replace -aRf か cd /usr/ports/ports-mgmt/portupgrade; make install clean; portupgrade -aRf のような感じです Linuxであれば、SRPMも似たような形で再ビルドできるはずです。 時間がかかるだけの手間ですので、実際に仮想16サーバーを1日もかけずに再ビルドをしています。
- notnot
- ベストアンサー率47% (4900/10359)
質問文は日本語として意味をなしてない部分が多いのですが、キーワードだけ拾って、回答すると、 ・コンパイル時に最適化を指定するかしないかで消費電力の差はゼロか? →原理的にはゼロでは無い ・コンパイル時に最適化を指定するかしないかで消費電力の差は意味があるか? →あまりに小さいので意味が無い
補足
質問文には、確かに、1マイクロWとかかれています。 ですので、これを1Wで何台分に換算しなおすと、100万台分の PCやサーバーに該当することになります。 ですが、既に日本国内だけで、調査によると、298万台のサーバーが ありますので、単純に1マイクロワットを、298万台で節約すれば、ここで 2.98W普通に節約できることになります。 ※サーバーとして使われているCPU数はこれよりも上回ります もちろん、サーバーを節電型に更新すれば話ははやいのですが、性能型が 必要な場合もあることを考えれば、全部が節電型にいけるわけでもありません。 ここで質問しているのは、本当に、その「あまりに小さい」ことに対する 積み重ねで本当に効果があるか?ってことを質問しています
- OKWavex
- ベストアンサー率22% (1222/5383)
なるわけねーだろ
補足
ありがとうございます。 この質問は、どちらかといいますと、意識して節電することができる 普通のPCのことではなく、OSのデーモンだけが節電の便りとなってしまう 遠隔でのデータベースサーバーを含むことです。 もし、OS、及び、アプリケーションのセット(例えば、OS+Apache+PHP)が 最適化されていないのと、全部ひっくるめて最適化がされている場合では やはり違うのでしょうか? もちろん、一般的にスタンバイやディスプレイ、HDDの回転をとめれば 話は速いのですが、そうではなく 使用中で、ある程度の高負荷がPCにかかっている時も含みます。 インテルコンパイラーを1つ上げたのは、容量を犠牲にするかわりに 非常に速度を向上させるコンパイラですので、CPU上で1命令にかかる 電力が等しいと考えて、削減された命令数分、節電になるのかな?と 考えた所です。 今は、どちらかといえば、パソコンの普及率よりも、携帯電話(スマホ除く)の 普及率のが高いですから、サーバーに対してはパソコンよりも携帯電話から アクセスする機会が普通に増えてくるはずですので。。。。