無料のランチオーバーですか?[閉まっている]


12

2005年の有名なThe Free Lunch Is Overの記事で、Herb Sutterは並行プログラミング革命がオブジェクト指向革命と同じくらい大きいと予測しました。この革命は2005年から2013年に本当に起こったのですか?


記事のキーポイント:

  • プロセッサメーカーは、CPUパフォーマンスを向上させるための従来のアプローチのほとんどを使用してスペースを使い果たしました。クロックスピードをこれまで以上に高速化する代わりに、ハイパースレッディングとマルチコアアーキテクチャを採用しています。

  • CPUスループットの向上を十分に活用したい場合、アプリケーションはますます並行する必要があります。

  • 「ああ、パフォーマンスはそれほど重要ではありません。コンピューターは高速化を続けるだけです」と言うのは間違っているでしょう。

  • 効率性とパフォーマンスの最適化は、重要性がますます大きくなります。すでに高度な最適化に適している言語は、新しい命を見つけるでしょう。そうでない人は、競争する方法を見つけ、より効率的で最適化できるようにする必要があります。パフォーマンス指向の言語とシステムに対する長期的な需要の増加を期待してください。

  • プログラミング言語とシステムは、ますます並行性に対処することを余儀なくされます。並行性のために、現在の言語よりも高いレベルのプログラミングモデルが必要です。


15
お使いの携帯電話にはいくつのコアがありますか?
マットD

6
Nokia 2700には1つのコアがあります。
cpp

5
@MattD申し訳ありませんが、なぜ「アップグレードの時間」であり、cppの電話のコア数はそれと何の関係がありますか?Nokia 2700がニーズに十分ではないことをどのように確認しますか?
アンドレスF.

2
完全に非科学的な観察により、ハードウェア側でこのような革命があったが、ソフトウェア革命は非常に遅いと記録するつもりです。すべてのプログラマーに高品質のコンカレントツールを提供することは依然として困難な作業であり、並行性は、再現の難しい方法でベテランの並列開発者でさえもトリップするものです。
ジェシーC.スライサー

2
予測のタイミングが間違っているからといって、必ずしも予測が間違っているとは限らないことを指摘したいと思います。上記の重要なポイントが意味する重要性を獲得していないことは明らかですが、これらの各ポイントの方向にステップがあります。したがって、上記の予測は真実になると思います。それはいつの問題なのでしょうか。WHENは、それが単なる欲望ではなく要件になるときです。いつそのしきい値を超えるかを知ることが、いつ予測するのが難しいのかという理由です。
ダンク

回答:


23

はい、しかし依存します。

並列ハードウェアを利用し、プログラムの構造化手法として並行性を使用しない限り、重要な高性能ソフトウェアを書くことは期待できません。しかし、ほとんどのソフトウェアは些細なものであり、パフォーマンスクリティカルではありません。Webアプリはそれほど多くの計算を行いません。また、CRUDアプリには、一部のシミュレーションおよび医療ソフトウェアの厳しいタイミング制限のようなものはありません。

特にゲーム開発者は、これに注意する必要があります。ゲームはソフトリアルタイムの要件を持つ最も一般的なタイプのアプリケーションだからです。問題は、2つのCPUコアと低電力GPUを備えた統合チップから可能な限り多くのコンピューティングおよびレンダリングパワーを絞りたい携帯電話で顕著です。これが、多くの開発者がHaskellを見て、Rustのような言語が成熟するのを待っているもう1つの理由です。最新のハードウェアでの安全性パフォーマンスが必要です。

2005年以来、OpenCL、CUDA、OpenMP、ベクトル命令セットなどの新しい改善されたツールを取得し、確立された言語で並行性とデータ並列性を操作しました。ただし、相対的な新参者は、並行処理でより多くの興味深いことを行うように早い段階から設計されています。

Haskellのコンカレントランタイムにより、言語は軽量の並列処理(スパーク)および同時実行の抽象化(スレッド、チャネル、共有可変参照)の豊富なサポートを提供できます。Go and Rustは、軽量タスク、チャネルを使用したGo、メッセージパッシングを使用したRustも提供します。

これらのシステムは、メモリの安全性、パフォーマンスの実行時間、特定の種類のレースに対する静的保護を提供します。HaskellとRustのデフォルトの不変性により、人間は並行処理をはるかに簡単に管理できます。Erlang 80年代にすでにこれ行っていましたが、ソフトウェアのニーズとプログラミングシステムの設計方法に関する知識も改善されました。

最後に、多くの既存の言語(名前は付けません)は、新しいソフトウェアを作成するための信頼できる選択肢として辞退する準備ができています。複雑さや同時実行性の抽象化の負担が大きいため、最新のアプリケーションの検討には不向きです。私たちは単に成熟した選択肢を待っています。


2
特定の言語の衰退についてはよくわかりませんが、依存関係を最小限に抑えることに重点を置いて記述されたコードが他の何よりも見られることを期待しています。結局のところ、実際に障害となっているのは言語ではなく、その使用方法です。そして、その使用の「低いぶら下げ果物」は、もはやマルチスレッド/並行性と整合していません。
マットD

6
@MattD:言語の使用方法言語自体の両方に問題がある可能性があります。プログラムが間違っているとしましょう。あなたはそれを間違って書いた人ですが、言語は必ずしもあなたがそれを正しく書くのを助けませんでした、そしてそれは同様に重要です。
ジョンパーディ

6

ここにいくつかのデータポイントがあります。それが革命としてカウントされる場合、自分で決める。

並列化されたハードウェア

2005年頃、IntelとAMDはともに、クロックスピードが約3 GHzの2コアデスクトップx86 CPU(Pentium DとAthlon 64)の量産を開始しました。

2006年には、3.2 GHzで8 + 1コアのCellプロセッサを搭載したPlayStation 3がリリースされました。

2006年、GeForce 8シリーズがリリースされました。グラフィックス固有のユニットとは対照的に、多数(〜100)の汎用「ストリームプロセッサ」で構成されます。2007年頃、CUDA 1.0仕様がリリースされ、超並列NVidiaハードウェア上で汎用計算を実行できるようになりました。

それ以来、傾向は続きました。

現在、2013年には、IntelとAMDの両方が4、8、および16コアのCPUを提供し、クロック速度はわずか4 GHzをわずかに上回ります。デュアルコアおよびクアッドコアの設計は、ラップトップやスマートフォンなどの低電力デバイスで一般的です。

これらはすべて、大量生産された消費者レベルの日常的なコンピューターハードウェアです。

ソフトウェア

CUDAは2007年にリリースされ、その後2008年にOpenCLがリリースされ、一般的な(グラフィカルではない)計算で超並列GPUを使用できるようになりました。モデルが人気になります。多くのホスティング会社(Amazonなど)は、一般的なコンピューティングタスク用のGPUを提供しています。

行くは2009年にリリースされ、非常に安価なプリエンプティブスレッド(「ゴルーチン」)を備えており、高度な並行アルゴリズムを効率的に表現できます。

Akkaツールキットは2009年にJavaとScala向けにリリースされ、アクターベースの同時実行を可能にします。

Erlang(高度な並行言語)では、使用量がいくらか増加します。

並行性と並列性

並列ハードウェアを利用するために、必ずしもソフトウェアの同時実行性、つまり、計算内の実行スレッドとのジャグリングが必要ではないことに注意してください。多くの問題は、各プロセスが従来のシーケンシャルプログラムである、並列の相互作用しないプロセスによって解決されます。

並列処理では、map-reduce、MPC、OpenMPなどの従来の言語と並列フレームワークを利用できます。このようなフレームワークの場合、同じCPUクリスタル上に複数のコアが存在することは、クラスター内にCPUを追加することと概念的にそれほど変わりません。違いは主に速度です。

今のところ無料のランチはありません

CPU速度は、ハイエンドで5 GHz前後のままです。グラフェントランジスタのような優れた技術が登場すれば、将来的には周波数が再び上昇する可能性がありますが、おそらくすぐにではないでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.