7

ムーアの法則が当てはまり、CPU/GPU がますます高速になった場合、ソフトウェア (およびそれに関連してソフトウェア開発者) は、コードを最適化する必要があるほど境界を押し広げますか? それとも、あなたのコード (など) には単純な階乗解で十分でしょうか?

4

26 に答える 26

31

処理能力が 2 倍になっても、お粗末な n^2 検索のひどさはあまり改善されません。

于 2009-06-13T00:04:22.837 に答える
18

貧弱なコードは常に CPU 速度を上回る可能性があります。

優れた例については、このCoding Horrorコラムにアクセスし、本Programming Pearlsについて説明しているセクションまでスクロールしてください。特定のアルゴリズムについて、4.77MHz 8 ビット プロセッサを搭載した TRS-80 が 32 ビット Alpha チップに勝る方法を示すグラフが再現されています。TRS-80 対 アルファ

スピードアップの現在の傾向は、コアを追加することです。個々のコアを高速化するのは難しいからです。そのため、全体の速度は上がりますが、線形タスクが常に恩恵を受けるとは限りません。

「暴力と無知が克服できない問題はない」ということわざは、必ずしも真実ではありません。

于 2009-06-13T00:11:06.363 に答える
13

ビデオゲームのポリゴン数を増やすためのコードの高速化であろうと、金融市場での取引のためのアルゴリズムの高速化であろうと、高速化による競争上の優位性があれば、最適化は依然として重要です。あなたとあなたの相棒を追いかけているライオンを追い越す必要はありません。

于 2009-06-13T00:06:04.893 に答える
13

コンピュータが高速になればなるほど、より多くのことをコンピュータに期待するようになります。

于 2009-06-13T00:00:51.253 に答える
12

すべてのプログラマーが最初から最適なコードを書くまでは、常に最適化の余地があります。一方で、本当の問題は次のとおりです。最初に何を最適化する必要がありますか?

于 2009-06-13T00:02:09.457 に答える
10

ワースの法則:

ソフトウェアは、ハードウェアが速くなるよりも速く遅くなります。

PS より深刻な注意: コンピューティング モデルが並列処理に移行するにつれて、コードの最適化がより重要になります。コードを 2 回最適化し、1 つのボックスで 10 分ではなく 5 分実行された場合、それほど印象的ではないかもしれません。2 倍速の次のコンピュータは、これを補います。しかし、1000 個の CPU でプログラムを実行することを想像してみてください。次に、最適化により、マシン時間が大幅に節約されます。そして電気。最適化して地球を救え!:)

于 2009-06-13T00:12:43.613 に答える
10

ムーアの法則は、1 つのチップにいくつのトランジスタを搭載できるかについて述べていますが、これらのトランジスタがますます高速にスイッチングできるようになることについては何も述べていません。実際、ここ数年、クロック速度は多かれ少なかれ停滞しています。チップあたりの「コア」(本質的には完全な CPU) の数が増え続けています。それを利用するには、コードの並列化が必要です。したがって、「素朴に」書いている場合、将来の魔法のオプティマイザーは、コード内の隠れた並列処理を見つけるのに忙しくなります。近い将来、あなたはコンパイラを大いに助けなければならないでしょう;-)。

于 2009-06-13T00:06:16.903 に答える
6

計算タスクは、大まかに 2 つのグループに分けられるようです。

  1. 限られた計算ニーズの問題。
  2. 無制限の計算ニーズの問題。

ほとんどの問題は、最初のカテゴリに当てはまります。たとえば、リアルタイムの 3D ラスタライズです。かなり長い間、この問題は一般的な家電では手の届かないものでした。Apple でリアルタイムの世界を作り出すことができる説得力のある 3D ゲームやその他のプログラムは存在しませんでした][. しかし、最終的にテクノロジーが追いつき、この問題は達成可能になりました。同様の問題は、タンパク質の折り畳みのシミュレーションです。ごく最近まで、既知のペプチド配列を結果のタンパク質分子に変換することは不可能でしたが、最新のハードウェアを使用すると、数時間または数分の処理でこれが可能になります。

ただし、その性質上、利用可能なすべての計算リソースを吸収する可能性があるといういくつかの問題があります。これらのほとんどは動的物理シミュレーションです。明らかに、たとえば天気の計算モデルを実行することは可能です。これは、コンピューターが登場して以来ずっと行われてきました。ただし、このような複雑なシステムでは、精度が向上するというメリットがあります。より細かい空間と時間の解像度でのシミュレーションは、ビットごとに予測を改善します。しかし、特定のシミュレーションの精度がどれだけ高くても、さらに精度を上げる余地があり、それに伴うメリットがあります。

どちらのタイプの問題も、あらゆる種類の最適化に非常に大きな用途があります。2 番目のタイプはかなり明白です。シミュレーションを実行するプログラムが少し改善されると、実行速度が少し速くなり、結果が少し早く得られるか、もう少し正確になります。

ただし、最初のものはもう少し微妙です。一定期間、最適化に十分な速度のコンピュータが存在しないため、最適化を行う価値はありません。しばらくすると、最適化を実行するハードウェアが必要以上に高速になるため、最適化はやや無意味になります。しかし、最適なソリューションが現在のハードウェア上で問題なく動作し、最適ではないソリューションが実行されないという狭い期間があります。この期間中、慎重に検討された最適化は、最初に市場に投入された製品と同様に実行された製品の違いになる可能性があります.

于 2009-06-13T00:34:21.783 に答える
3

ムーアの法則を緩和する要因はブロートウェアであるため、最適化は常に必要です。

于 2009-06-13T00:06:29.417 に答える
3

最適化にはスピード以上のものがあります。ムーアの法則はコンピュータのメモリには適用されません。また、最適化は、多くの場合、CPU 固有の命令を利用するためにコードをコンパイルするプロセスです。これらは、私が考えることができる最適化のほんの一部であり、より高速な CPU では解決できないものです。

于 2009-06-13T00:00:23.533 に答える
2

他の回答は、問題の速度面に集中しているようです。それはいいです。私が見ることができる本当の問題は、コードを最適化すると、実行に必要なエネルギーが少なくなるということです。データセンターはより低温で動作し、ラップトップは長持ちし、電話は充電で 1 日以上使用できます。市場のこの端には、本当の選択圧力があります。

于 2009-06-13T00:13:19.990 に答える
1

最適化は、特に次のような多くの状況で引き続き必要になります。

  • CPU時間が貴重なリアルタイムシステム

  • メモリがメモリである組み込みシステム

  • 多くのプロセスが同時に注意を要求しているサーバー

  • ゲーム: 3D レイ トレーシング、オーディオ、AI、およびネットワーキングが非常に要求の厳しいプログラムを実現する可能性があります

于 2009-06-13T00:10:44.350 に答える
1

世界は変化しており、私たちはそれに合わせて変化する必要があります。私が最初に始めたとき、優れたプログラマーであることは、C でポインターを操作することによってルーチンからさらに 0.2% を絞り出すために実行できる小さなマイクロ最適化をすべて知っていること、およびそのようなことのすべてでした。今では、アルゴリズムをより理解しやすくすることに多くの時間を費やしています。長い目で見れば、その方が価値があるからです。しかし - 常に最適化すべきものがあり、常にボトルネックがあります。リソースが増えるということは、人々が自分のシステムにより多くを期待するということです。

ただし、使用する速度/メモリ/リソースを追加すると、最適化戦略は変化します。

一部の最適化は速度とは関係ありません。たとえば、マルチスレッド アルゴリズムを最適化する場合、共有ロックの総数を減らすように最適化することができます。現在の処理能力がロックの待機に費やされている場合、速度 (またはさらに悪いことにプロセッサ) の形で処理能力を追加しても、何の効果もない可能性があります. . この場合の最適化とは、ロックの数を減らし、命令の数を減らそうとするのではなく、ロックの粒度をできるだけ細かく保つことを意味します。

于 2009-06-13T00:31:50.853 に答える
1

過剰なリソースを使用する遅いコードを書く人がいる限り、コードを最適化してそれらのリソースをより速く提供し、速度を取り戻す必要がある人もいます。

一部の開発者が最適ではないコードを作成できるほど創造的であることは驚くべきことです。私の前の仕事で、ある人が、たとえば、1 つの日付をインクリメントし続けて比較することにより、2 つの日付間の時間を計算する関数を作成しました。

于 2009-06-13T00:33:00.193 に答える
1

コンピューターはティーンエイジャーの部屋のようなものです。

すべてのがらくたを保持するのに十分な大きさになることはありません。

于 2009-06-19T18:07:17.207 に答える
1

コンピューターの速度は、人為的エラーを常に克服できるとは限りません。質問は、「 CPU は十分に高速になり、コンパイラが実装の問題をキャッチ (および修正) するのに時間をかけることができるようになるか?」と表現されるかもしれません。明らかに、 Shlemiel のペインタータイプの問題を修正するには、コードの最適化が (当面の間) 必要になります。

ソフトウェア開発は依然として、コンピュータに何をすべきかを正確に伝える問題です。「ますます高速な」CPU が私たちに与えるものは、ますます抽象的で自然なプログラミング言語を設計する能力であり、最終的にはコンピューターが私たちの意図を取り、すべての低レベルの詳細を実装するようになります... いつか.

于 2009-06-13T00:54:20.550 に答える
0

CPUに宇宙の亜原子粒子の数と同じ数のトランジスタがあり、その時計が硬い宇宙線の周波数で動作していると仮定すると、それでも打ち負かすことができます。

最新のCPUクロックを先取りしたい場合は、ループに別のレベルのネストを追加するか、サブルーチン呼び出しに別のレベルのネストを追加します。

または、本当にプロフェッショナルになりたい場合は、抽象化レイヤーをもう1つ追加します。

それは難しいことではありません :-)

于 2009-06-13T13:51:29.183 に答える
0

CPUはどんどん速くなっていますが、いつでも最適化できます

  • ネットワークスループット、
  • ディスクシーク、
  • ディスクの使用状況、
  • メモリ使用量、
  • データベーストランザクション、
  • システムコールの数、
  • スケジューリングとロックの粒度、
  • ガベージコレクション。

(これは、過去半年間に見た実際の例です)。

複雑なコンピュータシステムのさまざまな部分は、コンピューティング履歴のさまざまな時点で高価であると見なされます。ボトルネックを測定し、どこに努力するかを判断する必要があります。

于 2009-06-13T14:06:52.810 に答える
0

CPU に追いつくのに十分なデータをネットワーク経由でシャベルできるように、ネットワーク速度が維持されることを祈りましょう...

前述のように、ボトルネックは常に存在します。

于 2009-06-13T07:49:44.030 に答える
0

はい、私たちは最適化が重要なポイントにあり、予見可能な将来にそこにあるでしょう. なぜなら:

  • RAM の速度は、CPU の速度よりも遅いペースで増加します。したがって、CPU と RAM のパフォーマンスのギャップは依然として拡大しており、プログラムが RAM に頻繁にアクセスする場合は、キャッシュを効率的に活用するためにアクセス パターンを最適化する必要があります。そうしないと、超高速 CPU は 90% の時間アイドル状態になり、データが到着するのを待つだけになります。
  • コア数がどんどん増えていきます。あなたのコードは、追加されたコアごとにメリットがありますか、それとも単一のコアで実行されますか? ここでいう最適化とは並列化を意味し、目の前のタスクによっては難しい場合があります。
  • CPU の速度は、指数関数的アルゴリズムやその他のブルート フォースに追いつくことは決してありません。この回答でうまく説明されているように。
于 2009-06-13T07:06:27.237 に答える
0

最終的には高速化できなくなり、最終的にはスペースによって制限されるため、3GHZ およびマルチコア以下の新しいプロセッサが表示される理由..そうです、最適化は依然として必要です。

于 2009-06-13T00:07:47.760 に答える
0

正しいか間違っているかにかかわらず、私の意見では、それはすでに起こっており、必ずしも悪いことではありません. ハードウェアが優れていると、開発者はメモリ使用量が 10% 増えることを心配するよりも、目前の問題を解決することに多くのエネルギーを集中できるようになります。

最適化は議論の余地がありませんが、必要な場合のみです。追加のハードウェア パワーは、それが本当に必要なインスタンスを単純に減らしているだけだと思います。ただし、スペースシャトルを月に打ち上げるためのソフトウェアを書いている人は誰でも、コードを最適化する必要があります:)

于 2009-06-13T00:06:11.397 に答える
0

コンピューターが数十年前よりも約 1000 倍高速になっていることを考えると、最適化について心配するのをやめるまでには長い道のりがあると言えます。問題は、コンピューターがより強力になるにつれて、より高いレベルの抽象化で作業できるように、コンピューターがより多くの作業を行うようになることです。抽象化の各レベルでの最適化は引き続き重要です。

そうです、コンピューターは多くのことをはるかに高速に処理します。以前はコンピューターで何日もかかっていたマンデルブロを数分で描くことができます。GIF は、画面に表示されるのに数秒かかるのではなく、ほぼ瞬時に読み込まれます。多くのことがより高速です。しかし、たとえば、ブラウジングはそれほど高速ではありません。ワード プロセッシングはそれほど高速ではありません。コンピュータがより強力になるにつれて、私たちはより多くを期待し、コンピュータにより多くのことをさます.

近い将来、最適化が重要になります。ただし、マイクロ最適化は以前ほど重要ではありません。最近の最も重要な最適化は、アルゴリズムの選択かもしれません。O(n log n) または O(n^2) .... を選択しますか?

于 2009-06-13T00:06:22.100 に答える
0

最適化のコストは非常に低いため、削除する必要が生じるとは思えません。本当の問題は、そこにあるすべての計算能力を活用するタスクを見つけることです。そのため、最適化をやめるのではなく、物事を並行して行う能力を最適化します。

于 2009-06-13T00:06:31.520 に答える
0

コードの最適化は、実行速度の高速化とメモリ使用量の削減だけでなく、常にある程度必要になります。たとえば、データセンターでは、最適なエネルギー効率の高い情報処理方法を見つけることが主要な要件となります。プロファイリングのスキルがますます重要になってきます!

于 2009-06-13T00:31:40.650 に答える