問題タブ [cpu-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - CPU スレッドとは何ですか? また、コード内の論理スレッドとどのように関連していますか?
Intel Xeon "Nehalem-EX"などの新しい CPU の一部の文献で、 8 コアと 16 スレッドを搭載しているのを見てきました。彼らはここで何について話しているのですか?参照でこれについての言及を見たので、SPARCSも、確かにこれはコードによって生成された種類の論理スレッドではありませんか? このハイパースレッディングは名前が変更されていますか?
programming-languages - 特定の言語には、設計による固有のプロセッサアーキテクチャがありますか
特定の言語が、設計上、特定のプロセッサアーキテクチャに適しているかどうかを知りたいです。私がアーキテクチャと言うとき、私はARM / PPC / MIPSを意味するのではなく、より多くのスタック、アキュムレータ、またはレジスタベースのアーキテクチャを意味します。
たとえば、スタックアーキテクチャであるForthについて考えることができます。他のもの?
assembly - ネイティブ実行可能ファイルのどの部分が (具体的には) 移植不可能になっていますか?
これは最初はばかげた質問のように聞こえますが、ご容赦ください。
ある CPU アーキテクチャのバイナリが他のアーキテクチャでは実行されないことはよく知られています。たとえば、sparc64 チップ上で x86 バイナリを実行することは (ある種の互換性レイヤーなしでは) 不可能です。命令セットが異なるため、明らかに機能しません。
しかし、バイナリが同じ CPU 用であるが、別のオペレーティング システム用である場合、コードのどの部分が実行を妨げているのか。たとえば、x86 Linux ボックスで x86 Solaris バイナリを実行するとします。ランタイム リンカーまたはプロセス スケジューラに関連するプラットフォーム固有のスタブがあると思いますか?
知りたいです。ありがとう。
multithreading - マルチコアプロセッサのクリティカルセクション
すべてのスレッドが単一のCPUから実行されるシングルコアプロセッサでは、メモリ内のミューテックス(またはセマフォなど)でアトミックテストアンドセット操作を使用してクリティカルセクションを実装するというアイデアは、十分に簡単に思えます。プロセッサはプログラムのある場所からテストアンドセットを実行しているため、他のスレッドを装ったプログラムの別の場所からテストアンドセットを実行することはできません。
しかし、実際に複数の物理プロセッサを使用している場合はどうなりますか?単純な命令レベルの原子性では不十分なようです。2つのプロセッサが同時にテストアンドセット操作を実行する可能性があるb/cで、原子性を維持するために本当に必要なのは、の共有メモリ位置へのアクセスです。ミューテックス。(そして、共有メモリの場所がキャッシュにロードされている場合は、キャッシュ全体の一貫性も処理する必要があります。)
これは、シングルコアの場合よりもはるかに多くのオーバーヘッドが発生するように思われるので、ここに質問の要点があります。それはもっと悪いですか?私たちはそれと一緒に住んでいますか?または、プロセスグループ内のすべてのスレッドが同じ物理コア上に存在する必要があるというポリシーを適用することによってそれを回避しますか?
c++ - ポインターが逆参照されない場合でも、最後から3番目のポインターのハードウェアトラップはどのように発生しますか?
2005年11月1日のC++コラムで、ハーブサッターは次のように書いています...
[O]現在のCPUアーキテクチャを含む一部のCPUアーキテクチャでは、前述のコードにより、ポインタが逆参照されているかどうかに関係なく、最後から3番目のポインタが作成された時点でハードウェアトラップが発生する可能性があります。
CPUはビットパターンをどのようにトラップしますか?どうですか...
ボーナスの質問:「一部の現在のCPUアーキテクチャ」というフレーズは、通常、製品の出荷のみを指すと理解する必要がありますか、それとも、それらが説明または暗示されているフィクションの作品に最近の発行日がある場合は、架空のアーキテクチャも含まれますか?
theory - 特別に細工されたCPUを使用して多数の素因数を見つける
私の理解では、最近の多くの公開鍵暗号化アルゴリズムは、鍵を構成するために大きな素数に依存しており、2つの素数の積を因数分解するのが難しいため、暗号化が破られにくくなっています。また、このような大きな数値を因数分解することが非常に難しい理由の1つは、使用される数値のサイズが非常に大きいため、32ビットと64ビットの非常に小さいCPUが一致しないため、CPUが数値を効率的に操作できないことを意味することも理解しています。 1024、2048、さらには4096ビット数の場合。これらの数値を処理するには、特殊なBig Integer数学ライブラリを使用する必要があります。また、CPUは一度に小さなチャンク(32ビットや64ビットなど)しか保持(および処理)できないため、これらのライブラリは本質的に低速です。
それで...
8ビットから16ビット、32ビットから64ビットのCPUにスケーリングしたのと同じように、2048ビットレジスタと巨大な算術回路を備えた高度に特殊化されたカスタムチップを構築できないのはなぜですか。このチップは、従来のCPUのほとんどの回路を必要とせず、結局のところ、仮想メモリ、マルチスレッド、I/Oなどを処理する必要はありません。保存された命令をサポートする汎用プロセッサである必要はありません。膨大な数に対して必要な算術計算を実行するための最低限のことです。
ICの設計についてはよくわかりませんが、論理ゲートのしくみ、半加算器、全加算器の作成方法、および多数の加算器をリンクしてマルチビット演算を行う方法について学んだことを覚えています。スケールアップするだけです。多くの。
さて、上記が機能しないという非常に正当な理由(または17)があることはかなり確信しています(そうでなければ、私よりも賢い多くの人々の1人がすでにそれを行っているため)が、その理由を知りたいと思っていますそれは動作しません。
(注:質問が理にかなっているかどうかはまだわかりませんので、この質問にはいくつかのやり直しが必要な場合があります)
serialization - 異なるCPUアーキテクチャ間でダブル?
ネットワーク経由で倍精度浮動小数点値 (もちろん正しいバイト順序に調整) を送信し、異なる CPU アーキテクチャ、特に i386、mips (いくつかの異なるコア)、powerpc (e300、e500) でそれらを交換可能に使用しても問題ありませんか。極端に古いハードウェアはありません。
すべてのアーキテクチャーで -Os を指定して gcc 4.2.1 をコンパイラーとして使用。
おそらくそれはどこでもIEEE-754標準です(そうですか?)が、ウィキペディアが言うように:
IEEE 754-1985 では、実装において多くのバリエーションが許可されていました (一部の値のエンコードや特定の例外の検出など)。IEEE 754-2008 はこれらの多くを強化しましたが、いくつかのバリエーションがまだ残っています (特にバイナリ形式の場合)。
NaN やその他の特別なものを渡すつもりはありません。有効な 10 進数だけです。
cpu-architecture - SSE プリフェッチ命令のサイズを決定する方法は?
SSE プリフェッチ命令のインライン アセンブリを含むコードを使用しています。プリプロセッサ定数は、32 バイト、64 バイト、または 128 バイトのプリフェッチの命令が使用されるかどうかを決定します。このアプリケーションはさまざまなプラットフォームで使用されており、これまでのところ、特定の CPU に最適なオプションをそれぞれのケースで調査する必要がありました。これがキャッシュ ライン サイズであることは理解しています。この情報は自動的に取得されますか? /proc/cpuinfo に明示的に存在していないようです。