問題タブ [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.
x86 - x86/x64 チップはまだマイクロプログラミングを使用していますか?
これら 2 つの記事を理解していれば、Intel アーキテクチャは、最も低いレベルで、Intel で知られている従来の CISC 命令セットではなく、RISC 命令を使用するように移行しました。
http://www.hardwaresecrets.com/article/235/4
http://www.tomshardware.com/reviews/intel,264-6.html
その場合、x86/x64 チップはまだマイクロプログラムされているのでしょうか、それとも従来の RISC チップのようにハードワイヤード制御を使用しているのでしょうか? まだマイクロプログラムされていると思いますが、確認したかったのです。
assembly - アセンブラ : なぜ BCD が存在するのですか?
バイナリがわからない場合、BCD はより直感的なデータ型のようなものです。しかし、このエンコーディングを使用する理由がわかりません.4ビットでの表現が無駄になるため(表現が9より大きい場合)、あまり意味がありません。
また、x86 は add と sub のみを直接サポートしていると思います (FPU 経由で変換できます)。
これが古いマシンまたは他のアーキテクチャに由来する可能性はありますか?
performance - アセンブリ:なぜ私たちはレジスターに悩まされているのですか?
組み立てについて基本的な質問があります。
レジスタがメモリでも機能するのに、なぜレジスタに対してのみ算術演算を実行する必要があるのでしょうか。
たとえば、次の両方が(本質的に)同じ値を回答として計算する原因になります。
スニペット1
スニペット2
私が見ることができることから、ほとんどのテキストとチュートリアルは主にレジスターで算術演算を行います。レジスターを操作する方が速いですか?
編集:それは速かった:)
いくつかの素晴らしい答えが与えられました。最初の良い答えに基づいて最良の答えが選ばれました。
vhdl - シングル サイクル データパスでハーフ ワードをロードし、バイトをロードする
データ メモリを変更せずにロード バイトをシングル サイクル データパスに実装することについて尋ねられたこの問題があり、解決策は次のようなものでした。
代替テキスト http://img214.imageshack.us/img214/7107/99897101.jpg
This is actually quite a realistic question; most memory systems are entirely word-based, and individual bytes are typically only dealt with inside the processor. When you see a “bus error” on many computers, this often means that the processor tried to access a memory address that was not properly word-aligned, and the memory system raised an exception. Anyway, because byte addresses might not be a multiple of 4, we cannot pass them to memory directly. However, we can still get at any byte, because every byte can be found within some word, and all word addresses are multiples of 4. So the first thing we do is to make sure we get the right word. If we take the high 30 bits of the address (i.e., ALUresult[31-2]) and combine them with two 0 bits at the low end (this is what the “left shift 2” unit is really doing), we have the byte address of the word that contains the desired byte. This is just the byte’s own address, rounded down to a multiple of 4. This change means that lw will now also round addresses down to multiples of 4, but that’s OK since non-aligned addresses wouldn’t work for lw anyway with this memory unit. OK, now we get the data word back from memory. How do we get the byte we want out of it? Well, note that the byte’s byte-offset within the word is just given by the low-order 2 bits of the byte’s address. So, we simply use those 2 bits to select the appropriate byte out of the word using a mux. Note the use of big-endian byte numbering, as is appropriate for MIPS. Next, we have to zero-extend the byte to 32 bits (i.e., just combine it with 24 zeros at its high end), because the problem specifies to do so. Actually, this was a slight mistake in the question: in reality, the lbu instruction zero-extends the byte, but lb sign-extends it. Oh, well. Finally, we have to extend the MemtoReg-controlled mux to accept one new input: the zero-extended byte for the lb case. The MemtoReg control signal must be widened to 2 bits. The original 0 and 1 cases change to 00 and 01, respectively, and we add a new case 10 which is only used in the case of lb.
I don't quite actually understand on how this works even after reading the explanation, especially about left shift the ALU result by 2 would give the byte address... how is this possible?? so if I would like to load a half word then I would do one left shift and I would get the address of the half word?? what would be a better way to do load byte, load half word by modifying the data memory? (the question above puts constraints that we can't modify the data memory)
memory - メモリアドレスを理解する
MIPS でのメモリ アドレッシングに問題があります。アドレッシングはワードで整列されていると書かれています...下のテキストでは、アドレスの最下位2ビットを見ている理由がわかりませんか? なぜ?誰かがここでのポイントを明確/説明する例を教えてもらえますか...では、有効なハーフワードアドレスはすべて、最下位2ビットが00または10のいずれかであると言っていますか?
では、ワード アラインされたメモリからバイトをロードしたい場合はどうすればよいでしょうか?? これどうやってするの?左に 2 シフトする必要がある、つまり、最下位 2 ビットを 0 にする必要があると言われています。
assembly - プログラマーの「見えない」レジスターはどうですか?
これらは「ProgrammerVisible」 x86-64レジスタです。
(ソース:usenix.org)
見えないレジスタはどうですか?ちょうど今、MMUレジスタ、割り込み記述子テーブル(IDT)がこれらの非表示レジスタを使用していることを知りました。私はこれらのことを難しい方法で学んでいます。全体像を一度に知ることができるリソース(本/ドキュメントなど)はありますか?
私はプログラマーの目に見えるレジスターを知っており、それらを使ったプログラミングに慣れています。見えないレジスタとその機能について知りたいだけです。全体像を把握したい。この情報はどこで入手できますか?
編集:
全体像を把握したい。この情報はどこで入手できますか?
これらは、これらすべての低レベルの詳細を理解するのに役立った2冊の本です。
assembly - P6 アーキテクチャ - レジスタの名前変更はさておき、制限されたユーザー レジスタによって、スピル/ロードに費やされる操作が増えますか?
動的言語 VM 実装に関する JIT 設計を研究しています。私は 8086/8088 の頃からあまり組み立てを行っていません。ほんの少しだけです。
私が理解しているように、x86 (IA-32) アーキテクチャには、今日でも以前と同じ基本的な制限付きレジスタ セットがありますが、内部レジスタの数は大幅に増加していますが、これらの内部レジスタは一般的には利用できず、レジスタの名前変更で使用されます。他の方法では並列化できないコードの並列パイプライン化を実現します。私はこの最適化をかなりよく理解していますが、これらの最適化は全体的なスループットと並列アルゴリズムに役立ちますが、制限されたレジスターセットがまだ残っているため、x86 でレジスターが 2 倍または 4 倍になると、レジスターの流出オーバーヘッドが増加します。通常の命令ストリームでは、プッシュ/ポップ オペコードが大幅に少ない可能性があります。または、私が気付いていないこれを最適化する他のプロセッサの最適化がありますか? 基本的に私なら
研究、またはさらに良いことに、個人的な経験への言及はありますか?
編集:x86_64には16個のレジスタがあり、これはx86-32の2倍です。修正と情報に感謝します。
cpu-architecture - Mips データ レイアウトの計算
私はミシガン大学でコンピューター アーキテクチャのオファーを独学しています。d のメモリ レイアウトが 308 http://www.flickr.com/photos/45412920@N03/4442695706/ ではなく 312 から 319 で始まる理由がわかりません。( http://www.flickr.com/photos/45412920@N03/4442695706/ )指定された黄金律を理解していなかったのかもしれませんhttp://www.flickr.com/photos/45412920@N03/4441916461/sizes/l /こちら( http://www.flickr.com/photos/45412920@N03/4441916461/sizes/l/ ) そうですね。
assembly - 分岐予測
単一の静的ブランチの実際の結果の次のシーケンスを検討してください。Tは分岐が行われることを意味します。Nは、分岐が行われないことを意味します。この質問では、これがプログラム内の唯一のブランチであると想定します。
TTTNTNTTTNTNTTTNTN
1ビットの分岐履歴を使用する2レベルの分岐予測子、つまり1ビットのBHRを想定します。プログラムにはブランチが1つしかないため、BHRをブランチPCと連結してBHTにインデックスを付ける方法は重要ではありません。BHTが1ビットカウンターを使用し、ここでもすべてのエントリがNに初期化されていると仮定します。このシーケンスのどのブランチが誤って予測されるでしょうか。以下の表を使用してください。
今、私はこの質問に対するガイドや指針ではなく、この質問に対する答えを求めているのではありません。2レベルの分岐予測器とは何を意味し、どのように機能しますか?BHRとBHTは何の略ですか?
performance - アトミック操作コスト
アトミック操作 (コンペア アンド スワップまたはアトミック アド/デクリメントのいずれか) のコストはいくらですか? どのくらいのサイクルを消費しますか? SMP または NUMA 上の他のプロセッサを一時停止しますか、それともメモリ アクセスをブロックしますか? 順不同の CPU でリオーダー バッファをフラッシュしますか?
キャッシュにはどのような影響がありますか?
x86、x86_64、PowerPC、SPARC、Itanium などの最新の人気のある CPU に興味があります。