問題タブ [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 - Compare And Swap (CAS) をサポートする CPU アーキテクチャはどれですか?
どの CPU アーキテクチャがアトミック プリミティブの比較とスワップをサポートしているか知りたいですか?
c++ - CPU アーキテクチャのコンパイル時間の検出
C または C++ コードをコンパイルするときに CPU アーキテクチャを見つける最も信頼できる方法は何ですか? 私が知る限り、さまざまなコンパイラには独自の非標準プリプロセッサ定義のセットがあります(_M_X86
MSVS、__i386__
GCC__arm__
など)。
私が構築しているアーキテクチャを検出する標準的な方法はありますか? そうでない場合、すべての定型文を含むヘッダーなど、さまざまなコンパイラのそのような定義の包括的なリストのソースはあり#ifdef
ますか?
architecture - 32 ビット CPU では、「整数」型は「短い」型よりも効率的ですか?
32 ビット CPU では、整数は 4 バイトで、短整数は 2 バイトです。提供された短整数の範囲内に常に収まる多くの数値を使用する C/C++ アプリケーションを作成している場合、4 バイト整数と 2 バイト整数のどちらを使用する方が効率的ですか?
メモリから CPU へのバスの帯域幅に適合するため、4 バイト整数の方が効率的であると示唆されていると聞いたことがあります。ただし、2 つの短い整数を加算する場合、CPU は両方の値を 1 つのパスで並列にパッケージ化します (したがって、バスの 4 バイト帯域幅にまたがります)。
c# - 実行可能ファイルがどのプラットフォーム用にコンパイルされているかを確認するにはどうすればよいですか?
x86、x64、および IA64 用に作成された Windows 実行可能ファイルを使用する必要があります。ファイル自体を調べて、プログラムでプラットフォームを把握したいと思います。
私のターゲット言語は PowerShell ですが、C# の例で十分です。必要なロジックを知っていれば、それらのいずれかが失敗しても、それは素晴らしいことです。
build-process - scons で CPU アーキテクチャ (32 ビット / 64 ビット) を検出していますか?
sconsで CPU アーキテクチャを検出するための「標準」プラグインはありますか?
ところで、この質問はすでにここでより一般的な形式で尋ねられました...誰かがこの情報を scons に組み込むためにすでに時間を割いているかどうか疑問に思っています。
embedded - 小さなRISCエミュレーター
私はVMをゲームに組み込むことを検討しており、ロボット、モーター、センサーなど。私の主な関心事は、自分でロールする場合はコンパイラー/アセンブラーを作成する必要があることです。すでに存在するツール、または最も単純な形式のツールを使用して、コンパイルできるCコンパイラを使用するとよいでしょう:-p。
私は本当にここで車輪の再発明をしたくありませんが、仮想世界を走り回る何千ものこれらも必要なので、できるだけシンプルで高速でなければなりません。ある人がすでに述べたように、私はタイミングやバスなどの現実世界の問題も気にしません。彼らの仮想時計はかなり遅いものに制限されると思います。最終的には、ネイティブコンパイルを調べて、それらをさらに高速に実行する必要がありますが、今のところ、一般的な概念実証を得るためにプロトタイプをまとめているだけです。
入力として、円筒形の本体(16個、おそらく32個)の周りに取り付けられた距離、光、材料、およびタッチセンサーを計画し、次に、各側の一種のホイールを制御するための方向出力用の2つのモーターを計画しています。基本的に、処理はそれほど精力的ではなく、世界は十分に単純であるため、マシンは単純なタスクで多くの処理能力を投入する必要がありません。
メモリに関しては、マップの作成や統計の収集に介入することなく、数日間そのままにしておくのに十分なデータを保存できるようにしたいと思います。私は8ビットが処理やメモリのためにそれをカットするのは好きではありませんが、16ビットは間違いなく競争相手です。32ビットと64ビットはそれをプッシュするだけであり、それぞれ1MBを超えるメモリを搭載する方法はありません。おそらく256〜512kに近いでしょう。(ビル1は640kで十分だと言ったのに、なぜ私はできないのですか!!)
linux - Linux のバイナリ ファイル (ライブラリまたは実行可能ファイル) のターゲット ISA 拡張子を決定する
Via C3 プロセッサを搭載した Advantech POS ボード上の (かなり古い) FC3 で実行されている Java アプリケーションに関連する問題があります。Java アプリケーションには、JNI 経由でアクセスされるコンパイル済みの共有ライブラリがいくつかあります。
C3 プロセッサ経由は i686 と互換性があるはずです。少し前に、同じプロセッサを搭載した MiniItx ボードに Ubuntu 6.10 をインストールした後、前の説明が 100% 真実ではないことがわかりました。Ubuntu カーネルは、C3 プロセッサに設定された i686 のいくつかの特定のオプション命令が不足しているため、起動時にハングアップしました。i686 セットの C3 実装にないこれらの命令は、i686 最適化を使用する場合、GCC コンパイラによってデフォルトで使用されます。この場合の解決策は、Ubuntu ディストリビューションの i386 コンパイル バージョンを使用することでした。
Java アプリケーションの基本的な問題は、FC3 ディストリビューションが別の PC (今回は Intel P4) の HD のイメージから複製することによって HD にインストールされたことです。その後、ディストリビューションを実行するには、いくつかのパッケージ (カーネルのものなど) を i386 コンパイル済みバージョンに置き換えるなど、いくつかのハッキングが必要でした。
問題は、しばらく作業した後、システムが跡形もなく完全にハングすることです。いくつかの i686 コードがシステムのどこかに残っていて、いつでもランダムに実行される可能性があるのではないかと心配しています (たとえば、サスペンド モードからの回復後など)。
私の質問は:
- バイナリ ファイル (実行可能ファイルまたはライブラリ) が必要とする特定のアーキテクチャ拡張機能を確認するツールまたは方法はありますか?
file
十分な情報を提供しません。
performance - 最新の CPU は正確にどのくらい「高速」ですか?
組み込みシステムと初期の 8/16 ビット PC (6502、68K、8086) をプログラミングしていたとき、各命令の実行にかかる正確な時間 (ナノ秒またはマイクロ秒) をかなりよく把握していました。ファミリによっては、1 (または 4) サイクルが 1 回の「メモリ フェッチ」に相当し、キャッシュを気にする必要がなければ、関係するメモリ アクセスの数に基づいてタイミングを推測できます。
しかし、最近の CPU では混乱します。それらがはるかに高速であることは知っていますが、見出しのギガヘルツ速度は、各命令に必要なクロックのサイクル数を知らなければ役に立たないことも知っています.
したがって、2GHz Core 2 Duo (としましょう) で、2 つのサンプル命令のタイミングを誰かが提供できますか。最良のケースと最悪のケース (キャッシュに何もない/すべてがキャッシュにあると仮定) が役に立ちます。
命令 #1: 1 つの 32 ビット レジスタを 2 番目に追加します。
命令 #2: 32 ビット値をレジスタからメモリに移動します。
編集:私がこれを尋ねる理由は、単純なコードを見て、最も近い桁までの時間を大まかに測定できるようにする「経験則」を開発しようとすることです。
編集#2:興味深い点を含む多くの回答がありますが、(まだ)誰も時間で測定された数字を書き留めていません. 質問に「複雑さ」があることは承知していますが、おいでください: NYC のピアノ調律師の数を見積もることができれば、コードの実行時間を見積もることができるはずです...
次の (ダム) コードを使用します。
実行にかかる時間をどのように見積もればよいでしょうか... 1 フェムト秒ですか? 1ギガ年?
c# - IL を直接処理できる CPU を設計する意味はありますか?
これを正しく理解していれば:
AMD や Intel などの現在の CPU 開発企業は、機械語 (1G 言語) の上に 2G 言語として見られるものとして、独自の API コード (アセンブリ言語) を持っています。
現在の API 呼び出しの代わりに、そのコアで IL 処理を実行する CPU を持つことは、(パフォーマンスまたはその他の点で) 可能または望ましいでしょうか?