タグ付けされた質問 「x86」

x86は、Intel 8086 CPUから派生したアーキテクチャーです。x86ファミリには、32ビットのIA-32アーキテクチャと64ビットのx86-64アーキテクチャ、およびレガシー16ビットアーキテクチャが含まれています。後者に関する質問には、[x86-16]や[emu8086]のタグを付ける必要があります。質問が64ビットx86-64に固有の場合は、[x86-64]タグを使用します。x86 FPUの場合、タグ[x87]を使用します。SSE1 / 2/3/4の場合、AVX *も[sse]を使用し、[avx] / [avx2] / [avx512]のいずれかを適用します

10
32ビットのループカウンターを64ビットで置き換えると、Intel CPUで_mm_popcnt_u64を使用すると、パフォーマンスが大幅にずれる
popcount大規模なデータ配列への最速の方法を探していました。私が遭遇した非常に奇妙な効果を:からループ変数を変更するunsignedにuint64_t私のPC上で50%で作られたパフォーマンスの低下を。 ベンチマーク #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = reinterpret_cast<char*>(buffer); for (unsigned i=0; i<size; …

11
Collat​​z予想を手書きのアセンブリよりも速くテストするためのC ++コード-なぜですか?
Project Euler Q14のこれら2つのソリューションは、アセンブリとC ++で作成しました。これらは、Collat​​z予想をテストするための同じ同一の力ずくのアプローチです。組み立てソリューションは、 nasm -felf64 p14.asm && gcc p14.o -o p14 C ++は g++ p14.cpp -o p14 アセンブリ、 p14.asm section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rdi, rdi ; max i xor rsi, rsi ; i l1: dec …



4
Intel SandybridgeファミリCPUのパイプライン用のプログラムの最適化解除
私はこの割り当てを完了するために一週間頭を悩ませてきました、そして私はここの誰かが正しい道に向かって私を導くことを望んでいます。インストラクターの指示から始めましょう: あなたの割り当ては、素数プログラムを最適化することでした最初のラボの割り当ての逆です。この割り当ての目的は、プログラムを悲観的にすること、つまりプログラムの実行を遅くすることです。これらは両方ともCPUを集中的に使用するプログラムです。ラボPCでの実行には数秒かかります。アルゴリズムを変更することはできません。 プログラムを最適化解除するには、Intel i7パイプラインの動作方法に関する知識を活用してください。WAR、RAW、およびその他の危険性を導入するために命令パスを並べ替える方法を想像してみてください。キャッシュの効果を最小限に抑える方法を考えてください。悪魔のような能力がない。 この割り当てでは、砥石またはモンテカルロのプログラムを選択できました。キャッシュ効果のコメントは、ほとんどがWhetstoneにのみ適用されますが、私はモンテカルロシミュレーションプログラムを選択しました。 // Un-modified baseline for pessimization, as given in the assignment #include <algorithm> // Needed for the "max" function #include <cmath> #include <iostream> // A simple implementation of the Box-Muller algorithm, used to generate // gaussian random numbers - necessary for the Monte Carlo method below …

12
TensorflowをSSE4.2およびAVX命令でコンパイルする方法は?
これは、Tensorflowが機能しているかどうかを確認するスクリプトの実行から受け取ったメッセージです。 I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use …

3
レトポリンとは何ですか?
カーネルまたはクロスプロセスメモリの開示(Spectre攻撃)を緩和するために、Linuxカーネル1は、いわゆるretpolineを介した間接呼び出しを実行するために-mindirect-branch=thunk-extern導入された新しいオプションでコンパイルされます。gcc これは、Googleの検索でごく最近の使用のみが検出されるため(通常はすべて2018年)、新しく発明された用語のようです。 retpolineとは何ですか?それは最近のカーネル情報開示攻撃をどのように防ぎますか? 1 Linux固有ではありませんが、他のOS での緩和策の一部として、類似または同一の構造が使用されているようです。

10
マルチコアアセンブリ言語はどのように見えますか?
昔々、たとえばx86アセンブラを作成するには、「EDXレジスタに値5をロードする」、「EDXレジスタをインクリメントする」などの指示があります。 4コア(またはそれ以上)を備えた最新のCPUでは、マシンコードレベルで4つの別個のCPUがあるように見えますか(つまり、4つの異なる「EDX」レジスタしかない)。もしそうなら、「EDXレジスタをインクリメントする」と言うとき、どのCPUのEDXレジスタがインクリメントされるかを決定するものは何ですか?現在、x86アセンブラに「CPUコンテキスト」または「スレッド」の概念はありますか? コア間の通信/同期はどのように機能しますか? オペレーティングシステムを作成している場合、ハードウェアを介して公開されているメカニズムによって、さまざまなコアでの実行をスケジュールできますか?特別な特権付きの指示ですか? マルチコアCPU用の最適化コンパイラ/バイトコードVMを作成している場合、すべてのコアで効率的に実行されるコードを生成するために、たとえばx86について特に何を知る必要がありますか? マルチコア機能をサポートするためにx86マシンコードにどのような変更が加えられましたか?
243 assembly  x86  cpu  multicore  smp 

3
オペレーティングシステムなしでプログラムを実行する方法
オペレーティングシステムを実行せずに、プログラムを単独でどのように実行しますか?コンピュータを起動時にロードして実行できるアセンブリプログラムを作成できますか?たとえば、フラッシュドライブからコンピュータを起動し、CPU上のプログラムを実行しますか?

8
正確にベースポインターとスタックポインターは何ですか?彼らは何を指していますか?
WikiSquare()がDrawLine()を呼び出すウィキペディアからのこの例を使用すると、 (この図の下部には高いアドレスがあり、上部には低いアドレスがあることに注意してください。) 誰かが私に何ebpを説明してくれespますか? 私が見るところから、スタックポインターは常にスタックの先頭を指し、ベースポインターは現在の関数の先頭を指していると思いますか?または何? 編集:これはWindowsプログラムのコンテキストでこれを意味します edit2:また、どのように機能しeipますか? edit3: MSVC ++からの次のコードがあります。 var_C= dword ptr -0Ch var_8= dword ptr -8 var_4= dword ptr -4 hInstance= dword ptr 8 hPrevInstance= dword ptr 0Ch lpCmdLine= dword ptr 10h nShowCmd= dword ptr 14h それらはすべてdwordのようで、それぞれ4バイトを使用します。したがって、hInstanceから4バイトのvar_4へのギャップがあることがわかります。彼らは何ですか?ウィキペディアの写真に見られるように、私はそれが戻りアドレスだと思いますか? (編集者のメモ:質問に属さないマイケルの回答から長い引用を削除しましたが、フォローアップ質問が編集されました): これは、関数呼び出しのフローが次のとおりであるためです。 * Push parameters (hInstance, etc.) * Call function, which pushes …
225 c++  c  assembly  x86 

5
ARMアーキテクチャとx86の違いは何ですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4年前休業。 この質問を改善する ARMがモバイルであることを期待している間、x86アーキテクチャはキーボードで動作するように特別に設計されていますか?2つの主な違いは何ですか?
192 x86  arm 

3
GCCがほぼ同じCコードに対して、このように根本的に異なるアセンブリを生成するのはなぜですか?
最適化されたftol関数を書いているとき、私はいくつかの非常に奇妙な動作を見つけましたGCC 4.6.1。最初にコードを示します(明確にするために、違いを示しました)。 fast_trunc_one、C: int fast_trunc_one(int i) { int mantissa, exponent, sign, r; mantissa = (i & 0x07fffff) | 0x800000; exponent = 150 - ((i >> 23) & 0xff); sign = i & 0x80000000; if (exponent < 0) { r = mantissa << -exponent; /* diff */ } else { r …

4
コンピュータプログラムが実行されるとどうなりますか?
私は一般的な理論を知っていますが、詳細に合わせることができません。 プログラムがコンピュータの二次メモリに常駐していることを知っています。プログラムが実行を開始すると、完全にRAMにコピーされます。次に、プロセッサは一度にいくつかの命令(バスのサイズによって異なります)を取得し、それらをレジスターに入れて実行します。 また、コンピュータープログラムは2種類のメモリを使用することも知っています。スタックとヒープは、コンピューターのプライマリメモリの一部でもあります。スタックは非動的メモリに使用され、ヒープは動的メモリに使用されます(たとえば、newC ++の演算子に関連するすべてのもの) 私が理解できないことは、これらの2つのものがどのように関連しているかです。命令の実行にスタックはどの時点で使用されますか?命令は、RAM、スタック、レジスターに行きますか?



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