問題タブ [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.
performance - サイクル/バイト計算
暗号コミュニティでは、アルゴリズムのパフォーマンスをサイクル/バイトで測定するのが一般的です。私の質問は、CPUアーキテクチャのどのパラメータがこの数に影響を与えているかということです。もちろんクロックスピードを除いて:)
python - Python:WindowsOSのバージョンとアーキテクチャを取得する
まず第一に、この質問はPythonでの64ビットOS(Windows)の検出と重複しているとは思いません。これは、
完全に回答されていないためです。
唯一の近づいてくる答えは次のとおりです。
sys.getwindowsversion()
PROGRAMFILES(X86)の使用または存在(if 'PROGRAMFILES(X86)' in os.environ
)
だが:
- Windows環境変数は
PROGRAMFILES(X86)
信頼できますか?システムに存在していなくても、誰でも作成できるのではないかと心配しています。 sys.getwindowsversion()
アーキテクチャを取得するためにどのように使用しますか?
についてsys.getwindowsversion()
:
リンクhttp://docs.python.org/library/sys.html#sys.getwindowsversion
からhttp://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29にアクセスできます。 aspx
ですが、アーキテクチャ(32ビット/ 64ビット)に関連するものは何も表示されません。
さらに、返されたタプルのプラットフォーム要素はアーキテクチャから独立しているようです。
最後の注意:Python2.5とWindowsXP以降のWindowsバージョンの両方を使用したソリューションを探しています
ありがとう!
編集:
関連情報はここ
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
で入手できます
が、Pythonでこれを取得するにはどうすればよいですか?
Edit2:64ビットウィンドウで、32ビットPythonインタープリターを使用:
- os.environ["PROCESSOR_ARCHITECTURE"]は
- 'x86'
- platform.architecture()は
- (「32ビット」、「WindowsPE」)
computer-science - チューリングマシンとフォンノイマンマシン
バックグラウンド
Von-Neumannアーキテクチャは、命令とデータがメモリに格納され、マシンが内部状態を変更することによって動作するストアドプログラムコンピュータを記述します。つまり、命令は一部のデータを操作し、データを変更します。したがって、本質的に、システムには状態が維持されます。
チューリングマシンのアーキテクチャは、テープ上のシンボルを操作することによって機能します。つまり、スロットの数が無限のテープが存在し、任意の時点で、チューリングマシンは特定のスロットにあります。そのスロットで読み取られたシンボルに基づいて、マシンはシンボルを変更して別のスロットに移動できます。これはすべて決定論的です。
質問
これら2つのモデルの間に何か関係はありますか?フォンノイマンモデルはチューリングモデルに基づいているか、チューリングモデルに触発されましたか?
チューリングモデルはフォンニューマンモデルのスーパーセットであると言えますか?
関数型プログラミングはチューリングモデルに適合しますか?もしそうなら、どのように?関数型プログラミングはフォンノイマンモデルにはうまく役立たないと思います。
c - mallocが割り当てることができる最大メモリ
私は自分のマシン(1 Gb RAM 160 Gb HD Windowsプラットフォーム)で最大の範囲でmallocできるメモリの量を把握しようとしていました。
mallocが割り当てることができる最大メモリは(ヒープ上の)物理メモリに制限されていることを読みました。
また、プログラムがメモリの消費量を特定のレベルに超えると、他のアプリケーションが必要なメモリを十分に取得できないため、コンピュータは動作を停止します。
確認のために、Cで小さなプログラムを作成しました。
メモリの割り当てが失敗してループが壊れる時期があることを期待していましたが、無限ループであったため、コンピュータがハングしました。
私は約1時間待って、最終的にコンピューターを強制的にシャットダウンしなければなりませんでした。
いくつかの質問:
- mallocはHDからもメモリを割り当てますか?
- 上記の行動の理由は何でしたか?
- なぜどの時点でもループブレークしなかったのですか?
- 割り当てに失敗しなかったのはなぜですか?
x86 - レジスタが 4 つしかないのはなぜですか?
最も一般的な CPU (x86) にレジスタが 4 つしかないのはなぜですか? レジスタを追加すると、速度が大幅に向上するのではないでしょうか? レジスターはいつ追加されますか?
memory - キャッシュメモリのパフォーマンス
キャッシュメモリに関する一般的な質問があります。キャッシュベースのシステムでプログラムのパフォーマンスが低下するのはなぜですか?、キャッシュメモリは、要求されたメインメモリからのアドレスと、メインメモリからコピーされたアドレスとほぼ同じアドレスの範囲のアドレスを格納するためです。
performance - CUDA はどのようなデータ処理の問題に役立ちますか?
私は多くのデータ マッチングの問題に取り組んできましたが、非常に多くの場合、ハミングや編集距離などの CPU 集中型アルゴリズムの多くの実装を迅速かつ並行して実行することになります。これはCUDAが役立つようなものですか?
どのような種類のデータ処理の問題を解決しましたか? 標準のクアッドコア インテル デスクトップを超える向上は本当にありますか?
クリス
multithreading - キャッシュの一貫性とスレッドの生成
バックグラウンド
私はさまざまな本や記事を読んで、同時実行のコンテキストでのプロセッサキャッシュ、キャッシュの一貫性、およびメモリバリアについて学びました。しかし、これまでのところ、私の一般的なコーディング手法が厳密な意味で安全であるかどうかを判断することはできませんでした。
仮定
次の擬似コードは、2プロセッサマシンで実行されます。
/li>main()はプロセッサ1(P1)で実行され、myThread()はP2で実行されます。
最初、sharedVarはP1とP2の両方のキャッシュに存在し、初期値は0です(上記に示されていない「ウォームアップコード」のため)。
質問
厳密に言えば、できれば特定のタイプのCPUを想定せずに、myThread()は1を出力することが保証されていますか?
プロセッサキャッシュに関する私の新たな知識により、print()ステートメントの時点で、P2がmain()でのP1の割り当てによって引き起こされたsharedVarの無効化要求を受け取っていない可能性があります。したがって、myThread()が0を出力する可能性があるようです。
参考文献
これらは私が読んでいる関連記事と本です:
multithreading - SMPコア、プロセス、およびスレッドはどのように正確に連携しますか?
シングルコアCPUでは、各プロセスはOSで実行され、CPUはあるプロセスから別のプロセスにジャンプして、それ自体を最大限に活用します。プロセスは多くのスレッドを持つことができます。その場合、CPUは、それぞれのプロセスで実行されているときにこれらのスレッドを実行します。
現在、マルチコアCPUでは:
コアはすべてのプロセスで一緒に実行されますか、それともコアは特定の時点で異なるプロセスで別々に実行されますか?たとえば、プログラムAが2つのスレッドを実行しているとします。デュアルコアCPUはこのプログラムの両方のスレッドを実行できますか?OpenMPのようなものを使用している場合、答えは「はい」になるはずです。しかし、コアがこのOpenMP組み込みプロセスで実行されている間に、コアの1つを他のプロセスに切り替えることはできますか?
シングルコア用に作成されたプログラムの場合、100%で実行すると、各コアのCPU使用率が分散されるのはなぜですか?(たとえば、80%と20%のデュアルコアCPU。この場合、すべてのコアの使用率は常に合計で100%になります。)コアは、いくつかの方法で、各プロセスの各スレッドを実行することによって、互いに助け合うようにしますか? ?
c - CPU とデータのアライメント
これが何度も回答されていると思われる場合はご容赦ください。ただし、次の質問に対する回答が必要です。
なぜデータを (2 バイト / 4 バイト / 8 バイト境界で) 揃える必要があるのですか? ここで私の疑問は、CPU にアドレス ライン Ax Ax-1 Ax-2 ... A2 A1 A0 がある場合、メモリ位置を順番にアドレス指定することがかなり可能であるということです。では、なぜ特定の境界でデータを揃える必要があるのでしょうか?
コードをコンパイルして実行可能ファイルを生成するときにアライメント要件を見つけるにはどうすればよいですか?
たとえば、データ アライメントが 4 バイト境界である場合、連続する各バイトがモジュロ 4 オフセットに配置されていることを意味しますか? 私の疑問は、データが 4 バイトにアラインされている場合、それはバイトが 1004 にある場合、次のバイトが 1008 (または 1005) にあるということですか?