問題タブ [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.

0 投票する
19 に答える
17753 参照

c++ - 32ビットのC++コードを64ビットに移植する-それだけの価値はありますか?なんで?

x64アーキテクチャの明らかな利点(アドレス指定可能なRAMアドレスが高いなど)を認識しています...しかし:

  • プログラムをネイティブ64ビットモードで実行する必要がない場合はどうなりますか。とにかく移植する必要がありますか?
  • 32ビットサポートを終了するための予測可能な期限はありますか?
  • 私のアプリケーションは、ネイティブx64コードとしてより速く/より良く/より安全に実行されますか?
0 投票する
9 に答える
24786 参照

operating-system - プログラムはどのように実行されますか?オペレーティングシステムはどこで機能しますか?

プログラムは、ある言語からASM->マシンコード(直接実行可能)にコンパイルされます。これがプラットフォームに依存すると言われる場合、形成されたバイナリは、x86、x86-64などの同じ命令セットアーキテクチャを備えたCPUでのみ(正しく)実行されることを意味します。ISAの違いにより、他のプロセスで(誤って)実行される場合と(まったく)実行されない場合があります。右?

さて、バイナリの概念は私を混乱させています。すべては「機械語コード」と「CPU」に関するものです。OSはどこで機能しますか?つまり、コンパイルされたバイナリには、メモリにロードされたときにCPUへの直接命令が含まれています。&CPUは一度に1つの命令を実行します。プロセス管理のリンクテキストを除いて、オペレーティングシステムの役割はどこにもわかりませんでした。オペレーティングシステムに関係なく、同じISAのCPUで実行されている必要があります。右?

しかし、そうではありません。Windowsマシンでx86へのコードをビルドした場合。Macx86マシンまたはLinuxx86マシンでは動作しません。

ここに何かが足りません。私の混乱を解消してください。

0 投票する
2 に答える
3864 参照

windows - ハイパースヘディングが有効なシステムでの CPU の番号付け

ハイパースレッディングが有効な環境で、OS (Windows、Linux) が論理 CPU に番号を割り当てる方法を調べようとしています。?

両方の OS は、最初に物理 CPU にシリアル番号を割り当ててから、論理 CPU の番号付けを開始しますか、それとも他の規則に従っていますか? たとえば、ハイパースレッディングを備えた 2 つの物理 CPU システムでは、OS は番号 0,2 を最初の物理 CPU に割り当て、次に 1,3 を 2 番目の物理 CPU に割り当てますか?

どんな参考文献も本当に高く評価されます。

前もって感謝します。

よろしく、 -ジェイ。

編集:アランの質問への回答:これを知る必要があるのは、私の仕事では、コンテキストスイッチを回避するためにさまざまなスレッドを特定のCPUにバインドする必要があり、特定のタスク(スレッド)が個別の物理CPUにバインドされていることを確認したいからです。ありがとう

0 投票する
3 に答える
290 参照

macos - システムアーキテクチャー

現在実行中の Mac OS X システムが 32 ビット マシンか 64 ビット マシンかを判断するにはどうすればよいですか?

0 投票する
4 に答える
554 参照

windows - WindowsPortableExecutablesがマシンアーキテクチャ間でどのように移植可能か

Windows Portable Executableは、マシンアーキテクチャ間で本当に移植可能ですか?もしそうなら、それはどのように機能しますか?そうでない場合、「Portable Executable」とはどういう意味ですか、または実行可能ファイルのどの部分が移植可能ですか?

ありがとう、Siva Chandran

0 投票する
7 に答える
9976 参照

c - CPUキャッシュに収まるようにコードを設計しますか?

シミュレーションを書くとき、私の相棒は、キャッシュに収まるほど小さいプログラムを書こうとするのが好きだと言います。これには本当の意味がありますか?キャッシュはRAMやメインメモリよりも高速であることを理解しています。プログラムをキャッシュから実行するか、少なくとも変数をキャッシュにロードするかを指定することはできますか?私たちはシミュレーションを書いているので、パフォーマンス/最適化の向上は大きなメリットです。

CPUキャッシングを説明する良いリンクを知っているなら、その方向に私を向けてください。

0 投票する
4 に答える
257 参照

c - Cプログラミングとerror_code変数の効率

私が今まで読んだほとんどのコードはint、標準のエラー処理(関数などからの戻り値)にを使用しています。しかし、willコンパイラを使用することで得られるメリットがあるかどうか疑問に思っていますuint_8-読み取り:ほとんどのアーキテクチャのほとんどのCコンパイラ-イミディエートアドレスモードを使用して命令を生成します-つまり、1バイトの整数を命令に埋め込みます?私が考えている重要な命令は、戻り型としてuint_8を使用して、関数が戻った後の比較です。

1バイト型を導入するとアライメントの問題が発生するため、私は間違って考えている可能性があります-コンパイルが4バイトにパックするようにコンパイルするのはおそらく完全に正しい理由であり、これがおそらく誰もがintを使用する理由です-そしてこれはヒープではなくスタック関連の問題であるため、実際のオーバーヘッドはありません。

正しいことをすることが私が考えていることです。しかし、議論のために、これはインテリジェントウォッチに人気のある安価なマイクロプロセッサであり、1kのメモリで構成されていますが、命令セットに異なるアドレッシングモードがあるとしましょう:D

ディスカッション(x86)を少し専門化するためのもう1つの質問は、次のとおりです。

同じタイプ?または、2番目のケースでは、コンパイラは8バイトのリテラルを生成します。その場合、それを使用して、リテラルを即値として、返されたintをレジスタ参照として持つ比較命令を生成できます。CMP命令タイプを参照してください。

x86命令セットのもう1つの参照。

0 投票する
2 に答える
137 参照

c - 実行パイプラインの保持

リターンタイプは頻繁にエラーがチェックされます。ただし、実行を継続するコードは、さまざまな方法で指定できます。

また

ヘビー級CPUが単純な統計を使用して近接/局所で取得されたブランチについて推測できる1つの方法-ゼロが不明で2であるブランチ推測(-2、-1,0、+ 1、+ 2)の4ビットメカニズムを研究しました真のブランチと見なされます。

上記の簡単なテクニックを考えると、私の質問はコードを構造化する方法についてです。主要なコンパイラと主要なアーキテクチャの間には慣習がなければならないと思います。これらは私の2つの質問です

  1. コードが、パイプラインがいっぱいになっているときにブール値がバイアスされる、頻繁にアクセスされるループではない場合はどうでしょうか。
  2. 分岐に関する推測は、true、false、または0のいずれかで開始する必要があります(パイプラインは何かで満たされている必要があります)。どちらになる可能性がありますか?
0 投票する
3 に答える
1311 参照

macos - OSX 上の Intel と PPC CPU の両方のコンパイル

私は 64 ビット Intel Core 2 Duo プロセッサを搭載した MacBook Pro を使用しており、gcc (i686-apple-darwin9-gcc-4.0.1) を使用して、自分のマシンで正常に実行できる実行可能ファイルをコンパイルしています。最近、誰かが私のアプリケーションを PowerBook G4 で実行しようとしたところ、「実行可能ファイルの CPU タイプが正しくありません」というエラーが表示されました。これは、CPU が Intel ではなく PPC である (また、64 ビットではなく 32 ビットである可能性もある) ためだと思います。

gcc を使用して、さまざまな Mac アーキテクチャすべてで動作するバイナリを作成することは可能ですか。

0 投票する
2 に答える
1558 参照

c - 構造体サイズの最適化

フットプリントを最適化したい構造があります。

私が理解しているように、コンパイラは、構造を定義するとメモリ内に構造を作成します。そのため、小さな型がアライメント ホールを埋めることができるように、大きな型を最初に宣言する必要があります。

データ構造のアライメントに関する WikiPedia の記事と、この問題に関する他の記事を読みました。 http://en.wikipedia.org/wiki/Data_structure_alignment

しかし、まだ確信が持てません。現在の注文が最適なのか、何か不足しているのでしょうか。

注: 私のコンパイラは「#pragma pack」をサポートしていません