これは少し「誰にとっても1メガバイトで十分です」ですが...
64ビットフラットアドレススペースでは、32ビットアドレススペースよりも最大43億倍多くのスペースが可能です。それは17,179,869,184 GiBです。
明らかに、8ビットから16ビットへの移行は非常に迅速でした(私は、80年代の10代の方法で物事を表示しており、Eliteのポートを実行できなかったため、これらのメインフレームとミニをすべて無視しています)。 16ビットから32ビットへの移行には少し時間がかかり、32ビットは実際にはかなり長く続きました。
これで64ビットになりました。「17,179,869,184 GiBで十分です)」と言うのは馬鹿でしょうか?
私は本当にプログラミングの視点を考えているので、これはプログラマーの質問です。ある日にコンピュータに一見無限に見える作業メモリがある場合でも、アプリケーションが一見無限に見えるフラットなアドレス空間を見る必要があるという意味ではありません。
基本的に、プログラマーは安堵のため息をついて、「まあ、整数や浮動小数点数がどんなことをしても、少なくともポインタが増えることを心配する必要はありませんか?」と言うことができます。
将来的には、2 ^ 64バイトを超えるマシンでRAM=のマシンを使用するつもりはないと思いますが、アドレススペースが役立つとは限りません。
いくつかの目的では、アドレス空間に他のものをマップすると便利です。ファイルは重要な例です。では、近い将来、2 ^ 64バイトを超える任意の種類のストレージをコンピュータに接続することは妥当でしょうか?
はいと言わなければなりません。テラバイトのハードディスクを使用しているのは約1700万人しかないため、2 ^ 64バイトをはるかに超えるストレージが必要です。数年前から数ペタバイトのデータベースがあり、2 ^ 64は約17000ペタバイトにすぎません。
今後数十年以内に、2 ^ 64を超えるアドレス空間が使用される可能性が高いと思います。
研究室でさえまだ存在しないいくつかの画期的な技術をコンピュータが使い始めない限り、64 アドレス可能な空間は現在のシリコン技術では物理的に不可能です。テクノロジーは物理的な限界に達しています。速度(GHz)の制限は、すでに数年前に達しています。小型化の限界も非常に近いです。現在、生産における最も高度な技術は20 nmですが、研究室では7原子で作られたトランジスタで4 nmです。
新しいテクノロジーの開発にかかる時間を概観すると、現在のコンピュータは1925年に発明されたトランジスタをベースにしており、現在のシリコンテクノロジーは1954年にさかのぼります。
代替技術に関しては:
リンクされたスーパーコンピューターThorbjoernは、約2 ^ 47 Bの物理メモリを備えています。
ムーアの法則がスーパーコンピュータのメモリに当てはまると仮定すると、わずか34年で2 ^ 64 Bの物理メモリになります。これは「OMG、私たちはそれを見るために生きます!!!!」のようなものです。多分。そして確かに、それは魅力的です。しかし、無関係です。
問題は、2 ^ 65 Bの物理メモリを使用するために128ビットのアドレス空間が必要ですか?
答えは[〜#〜] no [〜#〜]です。 単一プロセスから2 ^ 65 Bの virtual メモリをアドレス指定するには128ビットのアドレス空間が必要です。
それが /の質問の要点です。「実際のアプリケーションはこれまで必要 128ビットフラットアドレス空間ですか?」 。 "Need"絶対的ではありませんが、アドレス空間をマップ(フラットではない)にすることで、より少ないリソースで問題を解決できます。ただし、「128ビットのフラットなアドレス空間」はありません。
例として、地球上の原子に物理メモリアドレスを割り当てたいとします(何らかの理由で、主に this 簡単な例を提供するため)、ゼロから開始してカウントを続けます(getあなたが終わったら私に戻ってください)。今度は、誰かが同じことを Kepler-10c (568離れたところ)で実行したいと考えています。
あなたはアドレスの衝突を望まないので、他の人がハイメモリアドレスをフラットメモリスペース使用可能に割り当てます。これにより、あなた、彼ら、そして次の人々は直接になります=メモリをマッピングせずにアドレス指定。それを行わない場合、またはメモリとそのアドレスの間に1対1の関係がなければ(スパース配列を実装してもかまわない)、64ビット以下のメモリで問題が解決する場合があります。
誰かが " Xの量のYで十分です "を提案するときはいつでも、そのような予測はしばしば短命です。
だから問題は:2/65 Bのメモリを使用する単一のプロセスがどれくらい早くできるかです。絶対に望みません。
私たちの時代の大きな問題は、単一のCPUの処理能力が制限されていることです。原子のサイズによって定義されるサイズには制限があり、特定のサイズの場合、光の速度、つまり磁場の変化に関する情報が私たちの宇宙で伝播する速度によって、クロックレートに制限があります。
実際、数年前に制限に達し、以前のクロックレート以下で解決しました。 CPUパワーは線形的に拡大しなくなります。パフォーマンスは、順不同の実行、分岐予測、より大きなキャッシュ、より多くのopコード、ベクトル演算などによって強化されています。 アーキテクチャの最適化がありました。
そして重要なアイデアは並列化です。並列化の問題は、スケールアップしないことです。 20年前に遅いコードを書いた場合、10年前の方がずっと速く動作しました。遅いコードを今書いたとしても、10年間でそれほど速くはなりません。
2 ^ 65 Bのメモリを使用するプロセスは、最大の愚かさを示しています。これは、アーキテクチャ最適化がないことを示しています。このデータを適切に処理するには、約1,000万個のコアが必要です。実際にリソースを取得したコアは完全に別のマシン上のイーサネット経由で物理メモリを使用しているため、そのほとんどがリソースが利用可能になるのを待つのに費やします。大きくて複雑な問題に対処するための鍵は、それらを小さく単純な問題に分解し、これまでより大きくて複雑なシステムを構築しないことです。データのsh * tloadを処理する場合は、水平分割が必要です。
しかし、想定していても、この狂気は続くはずです。安心してください128ビットは十分です:
128ビットのアドレス空間を使用するには、2 ^ 133ビットが必要なので、[2 ^ 152アトムが必要]です。地球上の原子の分布が等しいと仮定して、それらを取得するためにどれだけのクラストを取得する必要があるかを見てみましょう。
let
q := ratio of atoms needed to atoms present = 2^-14
Vc := volume of the crust to be used
Ve := volume of the earth
re := the radius of the earth = 6.38e6
tc := the required thickness of the crust
k := 0.75*pi
thus
Vc / Ve = q
(k*re^3 - k*(re-tc)^3) / (k*re^3) = q
1 - ((re-tc) / re)^3 = q
(re-tc)/re = root3(1-q)
tc = re * (1 - root3(1-q))
tc = 6.38e6 * (1 - (1 - 2^-14)^(1/3))
tc = 129.804073
だから、あなたは130メートルのを全面に渡って(水、砂、または氷で覆われた80%を含む)を持っています。それは起こりません。あなたがそれを掘ることができると仮定しても(笑)、 all この問題はチップに処理するのに適していますが、どこでエネルギーを得ますか?
まあ、私たちは間違いなく大きなアドレス空間を使用することができました。
これを想像してみてください:
アドレス空間は1台のコンピューターに限定されません。代わりに、アドレスは、ユニバーサルアドレス空間でメモリセルを一意に識別します。したがって、世界中の任意のコンピュータのメモリセルへのポインタを持つことができます。リモートメモリからの読み取りを可能にするプロトコルが必要ですが、それは実装の詳細です。 :-)
メモリは1回書き込み、多数読み取りです。つまり、メモリアドレスにデータを書き込むことができるのは1回だけです。変更可能な値の場合、変更するたびに新しいメモリを割り当てる必要があります。私たちのプログラマーは不変性とトランザクションメモリの長所を見始めているので、メモリの上書きさえも許可しないハードウェア設計は、そんな不可能な考えではないかもしれません。
これら2つのアイデアを組み合わせると、巨大なアドレス空間が必要になります。
コンピュータの能力が高くなるほど、処理する必要のある問題が複雑になります。
Top500.orgにリストされている最大のスーパーコンピューターは http://www.top500.org/system/10587 で、約220 Tb RAMおよび180000コアです。つまり、 、それがこのプラットフォームで「現実のアプリケーション」が機能するものです。
今日のコンピューターは、10〜15年前のスーパーコンピューターと同じくらい強力です(グラフィックスカードに計算能力が隠されている場合でも)。
したがって、10〜15年でメモリの係数100は、現在の傾向が維持されている場合、64ビットのアドレス空間が約100年で制限要因になることを意味します(log(1億)/ log(100)は約6であるため)。
このスレッド全体は読むのがかなりおかしく、賛成と反対の非常に強い意見です...
ここに何か..
それは技術にとらわれず、時間に拘束されないという質問から理解します。したがって、シリコン、量子コンピューター、または無限猿のそろばんそろばんの現在の開発は事実上無関係です。
計算と外挿もかなりおもしろいですが、back2dosからの回答は、この数値が表すものの純粋なサイズを示すのに非常にうまく機能します。それで作業しましょう。
人間がその小さな惑星の閉じ込めにもはや拘束されない将来を心に留めてください。現実的な輸送手段は、非常に長い距離を移動できるように開発され、社会構造(経済、政治など)は世代を超えて進化しました。ファラオニックプロジェクトは、一般的な場所になっています。この遠い将来のビジョンの2つの側面に焦点を当てましょう。すべての詳細を説明するために時間を費やしたいのであれば、現在のテクノロジーに関する一連のもっともらしい進化を通じて、そのすべてを合理化できると確信しています。言い換えれば、ありそうもない未来ではあるが、もっともらしい...とにかく...
最初のプロジェクトは、最初のプラネタリーコンピューターであるので、その最初の電子コンピューターを記念して巨像と呼ばれました。コロッサスブラザーフッドは、実際に小さなプラネタイドをキャプチャし、それを動作するコンピューターに変換する手段を見つけました。特に可溶同位体が豊富でエネルギー的に自律的であるカイパーベルトで最近発見され、コンピューターシステムの自己修復と自己構築を行うプローブ、ロボットなどにより、建設プロセスを完全に自律的にしました。この状態では、2 ^ 64アドレススペースがこのプロジェクトにいくらか限定的であると考えられます。継続的なアドレススペースを取得して、別のプロジェクト用に既に存在するアプリケーションも簡単に移植できるようにするためです。
もう1つのプロジェクトは、物理システムよりもネットワーキングの実験に近いものですが、より大きなアドレス空間が必要であることがすぐにわかりました。 540年前、若いハッカーが巨大なボットネットを作成するという考えをいじっていました。核融合発電の大きな進歩により、インターネットはすでに、太陽系の建物の周りの初期のコロニーを含むように拡大されていました。彼のアイデアは基本的には、ネットワーク全体に小さなボットを配置することでしたが、ペイロードは、すべてのボットのすべての能力を組み合わせたものと想定してコードが記述される統合仮想マシンを提供することを目的としていました。ラグと最適化を試みるコンパイラとデプロイメントには多大な労力が費やされ、基礎となる媒体の固有の信頼性を考慮に入れて設計された高度なアルゴリズムが設計されました。同時実行性に重点を置いたこの新しい「コンピューター」をターゲットとする言語が特別に作成されました。このボットネットは攻撃を配信しなかったため、発見するのに何年もかかりました。代わりに、ハッカーが傘下の会社を作り、コンピューティング能力を落札者に売りました。彼が亡くなったとき、彼はこのボットネットとすべてのテクノロジーを財団に寄付しました。その時点で、ボットネットは既に64年間実行されており、かなり前に2 ^ 64アドレススペースを使い果たしており、1000年以上前の大規模なアドレススペースは必要ないという考えを打ち砕いてきました。現在、2 ^ 128が標準であり、Colossusに使用されますが、これを2 ^ 256に拡張する計画がすでにあります。
たぶん、もっと確かなシナリオを考え出すことができるでしょう。そうですね...ある日、これより大きなアドレス空間が必要になる可能性は十分にあります。
とはいえ、私がこれで眠りを失うとは思いません。アプリケーションが正しく動作するために特定のアドレス空間が必要な場合は、おそらくVM必要なすべてを提供します) ..
したがって...短い答え...
はい、可能性が高い
だが
問題が発生したときにこれに対処しないでください...個人的に私は自分のプログラムで仮定を行うことは決してないので、驚きはありません。
アドレスの場所には、アドレス幅に関して 対数コスト があるため、問題のパラメーターに基づいて上限を考慮することができます。
64ビット地球上の砂の粒子= 7.5x10 ^ 18
128-bit観測可能な宇宙の星= 10 ^ 24
256ビット地球の粒子= 10 ^ 50
512-bit観測可能な宇宙の粒子= 10 ^ 82
1024-bitは、観測可能な宇宙の立方板の長さ= 4.65×10 ^ 185
6.6106 ...×10 ^ 122-bit観測可能な宇宙の可能な粒子構成= 10 ^(10 ^ 122)
可能な構成を、物理的に可能な最大の構築可能なメモリアドレスの上限と見なすことができます。
それはアドレス空間です。使用するポインターをreallocで変更できないようにC標準を変更するとします。今日2 ^ 33のメモリブロックを割り当てることができます(私のMacでは192GBのRAM、8バイトのポインタに80億を割り当て、16バイトの割り当てられたスペースが必要になるため、今はこれを行うことができません。しかし、私は新しい住宅ローンを持ち出さなくてもそれができるMacを買うことができました)。
そして、これらのポインタを再割り当てして、2 ^ 33バイトを保持できます。同時に多くはありませんが:-) reallocがポインタの移動を許可せず、2 ^ 33バイトが許可されている場合、元のポインタは2 ^ 33バイト離れている必要があります。つまり、2 ^ 66バイトのメモリが必要です。
すべてのメモリの場所にグローバルに一意のアドレスがある場合はどうなりますか?
FILE
、fopen()
など.ええと、私は数年後にはあなたはおそらく安堵のため息をつくことができると思います。ハードウェアの革新の速さを見ると、過去数年間に大きな進歩は起こっていないことがわかります。 2.x GHz周波数のCPUはしばらく前から存在しており、最近の処理能力の向上は、より多くのコアをチップに搭載することによってもたらされています。ドライブ容量はまだ増加していますが、10年前と同じ速度ではありません。
私たちの現在の技術は物理学の限界に近づいていると思います。
それは将来にとって何を意味しますか?情報処理の新たな飛躍を実現するためには、まったく新しい技術を活用する必要があると思います。これらのテクノロジーはおそらく「ソフトウェア」を使用するでしょう。そして、彼らが持っている、または提供できるアドレス空間の要件を知っているのは誰ですか?または、アドレススペースがそのテクノロジで意味のある概念でさえあるかどうか。
だから、まだこれで引退しないでください。
はい、あります。 (ゲーム?人工知能関連のもの?)
しかし、より適切な質問は、それが典型的なプログラマーに数えるかどうかかもしれません。 Rubyが自動的に数値をFixNumからBigNumに変換し、必要に応じて元に戻す)を考えてみてください。他の言語(少なくとも動的言語)が最終的に同じことを行わない場合、私は驚きます。
この量の情報を保存することと、有用なことを行うことは別のことです。私の観点からは、私たちがそれを利用する処理能力を持っていない限り、このストレージの必要性はないと思います。おそらく、巨大なデータベースをキャッシュすることは1つのことですが、数値処理では、最初にプロセッサが必要だと思います。
アプリケーションはこれほど多くのメモリを必要としますか?かなり可能。天気予報、一般的な物理シミュレーション、暗号化などのアプリケーションは、おそらく、より多くのメモリとより多くの処理能力から常に恩恵を受けるでしょう。そして、50-100年後のキラーアプリがどうなるか誰が知っていますか?ホログラムディスプレイ?可能なすべての100文字のパスワード用のレインボーテーブル?
それだけのメモリを物理的に表すことはできますか?間違いなく可能です。たとえば、100キュービットの量子コンピューターは、従来の2 ^ 100ビットコンピューターと同じ数の状態を表すことができます。 ウェイ現在のアドレス空間の2 ^ 67ビットを超えています。 (私は知っています、100キュービットの量子コンピューターはSFのように聞こえます。それを構築することは決して不可能だとは思いません。しかし、一方で、同じことがおそらく使用されるあらゆるテクノロジーについても言えるでしょう。50または今から100年後。)
しかし、そのときまでに「フラットなアドレス空間」が主な心配になることを真剣に疑っています。 「アドレス空間」の概念があまり意味をなさない場合には、おそらくそれまでに量子アルゴリズムを開発するでしょう。コンピュータが「クラシック」のままであっても、不均一なメモリが接続された恐ろしい数の処理ユニットに対処する必要があるでしょう。
ここでは単に「大声で考える」だけですが、128ビットのコンピューターなど、残りの64ビットで興味深い意味論的なことができることに気づきました。 Cf. IPの仕組み。
きっとこのような使い方ができると思います。 :) PS3が128ビットのアドレスを何に使用するのか誰もが知っていますか?確かに、余分なメモリをすべて無駄にすることはありません(実際のアドレスのメモリではなく、それらのアドレスが指しているメモリについて話しているだけです)。データとしてのアドレス。また、アドレス自体にブランチをエンコードすることもできます。つまり、0x [ifAddress] [elseAddress]マルチコアシステムも、このタイプのセグメンテーションの恩恵を受ける可能性があります。そして...そして...
64ビットアーキテクチャを超える理由はありますか? (アドレス可能なメモリの18,446,744,073,709,551,615バイト)
デジタルエレクトロニクスとコンピューティングに関連する測定単位のバイナリ倍数のプレフィックスの使用に関するIEEE 1541-2002標準を使用すると、次のことがわかります。
1バイト= 8ビット、1キロバイト= 1024バイト、1メガバイト= 1024 KB、1ギガバイト= 1024 MB、1テラバイト= 1024 GB、1 Petabyte = 1024 TB、1エクサバイト= 1024 PB
ゼタバイト、ヨッタバイト、ゼノッタバイト、シレントノバイト、ドメゲメグロッテバイト、イコセバイト、モノイコセバイトについても同様です。
Earthドライブの総ストレージ容量は、2016年時点で約2,500エクサバイトと推定されています。
64ビットのレジスタは、15エクサバイトのメモリに直接アクセスできます。 128ビットのレジスターは3.40282367×10 ^ 35ゼタバイトに直接アクセスできます。または295,147,905,247,928,000 Monoicosebytes。
したがって、128ビットのレジスタは、地球のすべてのメモリ、インターネット上で送信されたすべて、今までに話されたり書かれたすべてのWord、すべての映画などにアクセスするのに適した位置にあることがわかります。 。
したがって、答えはyesであり、これまでに存在した、またはこれから存在するであろうデジタルアイテムを指し示すことができるフレームワークが保留になるまでです。
平均的な人間の脳のニューロン数について私が見つけることができる最良の見積もりは、約860億です。 RAMを一般にニューロンと直接比較することはできませんが、ニューラルネットワークでは一種のことができます。ニューロンまたはシナプスの状態を表すには、いくつかのアドレスが必要です。そのため、大げさな推測を捨てて、人間の脳に匹敵するニューラルネットワークを作成するために1兆のアドレスのようなものを検討しているとしましょう。そのため、それが可能なら、なぜそれができないのかわかりません。そのようなネットワークが想定できるような種類の問題は、私たちが理解する能力を超えているだけでなく、なぜそうするためにそれらがそれほど大きい必要があるのかを超えています。