問題タブ [pci]
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.
linux - Linux で拡張 PCIE 構成スペースを読み取るには?
/proc/bus/pci ディレクトリの下のユーザー空間 pci エントリの読み取りと、ドライバーでのカーネル空間 API pci_read_config_word() の呼び出しの両方を試みました。しかし、どちらも pci の基本構成スペースしか読み取れないようで、オフセットは 0x100 未満です。
読み取りたいオフセットが 0x100 を超えています。Linux でそれを行う方法を誰か教えてもらえますか? カーネル空間で行う場合は、どの API を呼び出すかを教えていただければ幸いです。どうもありがとうございました!
pci - バス上のPCIデバイスは他のデバイスデータをリッスンできますか?
スパイデバイス、送信側PCIデバイス、受信側デバイス(PCIからCPUへのブリッジなど)の3つのデバイスを備えたPCIバス(PCI-PCIブリッジなし)がある場合はどうなりますか?
送信者は受信者へのデータ転送を開始します。スパイデバイスの送信機の状態はZ(バスから切断されている)です。スパイデバイスはバスをリッスンし、送信者から送信されたすべてのデータをコピーできますか?
更新:PCIアダプター付きの特別なFPGAを購入してプログラムする準備ができました。
cluster-computing - PCI を使用してマザーボードを相互接続する
私はいくつかの古いモボを持っており、相互接続ワイヤを備えた 1 組の PCI ヘッダー カードを作成し、相互接続カードを駆動するソフトウェアを作成して、モボの 1 つが CPU と RAM にアクセスできるようにすることが可能かどうか疑問に思っていました。他?ヘッダー ボード用のデバイス ドライバーを作成してから、相互接続を利用するアプリケーションを作成するのは大変な作業になると思います。おそらく、各プロセッサで実行されるスレッドと両方の RAM セットの使用を示す簡単なデモで、32 ビット mobo 上の 2x3gb RAM を単一の 6 GB アドレス空間にマップするミニ仮想マシンを作成します。トランスレータとして機能するために、各 pci ヘッダー カードにマイクロコントローラが必要になる場合があります。
mobo にはほとんどの場合複数の pci スロットがあるため、これらの相互接続されたカードのペアを使用して、ある種の高速 beowulf クラスターで mobo をデイジーチェーン接続できるのではないかと考えています。
私は各モボにdebianを使用し、おそらく各カードにatmega128を使用し、相互接続用のリボンケーブルを2本使用します。
pci は基本的に単なる io バスなので、なぜこれが不可能なのかわかりません (しかし、かなり難しいでしょう)。
誰かアドバイスがありますか、またはこの種のことは以前に行われましたか?
アップデート:
ありがとうマーティン。あなたの言うことは理にかなっていますし、もしそれが可能であれば、それは以前にすでに行われているようにも思えます.
代わりに、「ふりをする」起動可能なストレージデバイス(ハードディスク、USBスティックなど)を使用して起動することにより、スレーブCPUを間接的に制御することは可能でしょうか? スレーブ mobo が、実際のデバイス上のオペレーティング システムによって操作されていると考える限り、動作するはずです。
これは、任意のインターフェイス (sata、ide、usb など) に拡張される可能性があります。2 台の PC を sata/ide/usb ケーブルで接続した場合 (ide リボンの一端を 1 つの mobo に接続し、もう一方の端を別の mobo に接続する)、必要なハードウェアはこれだけです。重要なのは、マスターPCでそのインターフェース用の新しいドライバーを作成することです。そのため、マスターPCがそのインターフェースをストレージデバイスとして扱うのではなく、スレーブコンピューターのダミーの起動可能なハードディスクとして駆動されます。私はこれまでデバイスドライバーをやったことがないので、これはまだかなり難しい仕事ですが、少なくともはんだごては必要ありません(私をはるかに超えているでしょう)。Linux 用のオープン ソース ide ドライバーを取得して研究し、それを肉屋にして逆に動作するものを作成できるかもしれません (データを取得するのではなく、アプリケーションは、スレーブマシンがハードディスクのようにアクセスできるようにデータをそこに置きます)。次に、基本的な Linux カーネルを使用して、マスター コンピューター上のアプリケーションからスレーブ コンピューターを起動してみることができます (解体されたマスター pc ide/sata/usb デバイス ドライバーを介して)。安全のために、私はおそらく、マスター PC の他のものに使用されていないインターフェイスをターゲットにすることで、カスタマイズしたドライバーを可能な限り分離しようとします (マスター PC は、通常は使用されない ide バスを持つすべての sata ハードディスクを使用する可能性があります。カスタム ide ドライバーを作成すると、ホスト システムで問題が発生しにくくなる可能性があります (これは sata 駆動であるため)。
このようなこと (別の PC から起動可能なハードディスクを偽造すること) がこれまでに試みられたことがあるかどうか知っている人はいますか? YouTube でかなりクールなハッカデーになるだろうが、有望であることが証明されれば、並列コンピューティングに新しい次元を追加することも真剣に考えられる.
reset - FPGA(PCIボード)からPCをリセットする方法
PCIボード上のFPGAからPC(マザーボード)をリセットする方法(BIOS操作なし) Subj.
opencl - マルチ GPU システムで PCI ベンダー、デバイス、およびバス ID を指定して OpenCL デバイスを特定の GPU と一致させるにはどうすればよいですか?
PCI ID で識別されるマルチ GPU システム上のシステムで、OpenCL デバイスを GPU と一致させたいと考えています。
たとえば、システムに複数の GPU (おそらく異なるベンダー製) がある場合、PCI バスを列挙することでデバイスを一覧表示できます。これにより、PCI ベンダー、デバイス、およびバス ID が得られます。いくつかの選択基準に基づいて OpenCL 計算に使用するこれらの (GPU) PCI デバイスの 1 つを選択した場合、それを OpenCL デバイスに一致させるにはどうすればよいですか?
clGetDeviceIDs()を使用して OpenCL で GPU デバイスを列挙できますが、OpenCL デバイスを PCI デバイスに一致させる明らかな方法はありません。OpenCL 関数clGetDeviceInfo()は、PCI ベンダー ID とデバイス名へのアクセスを提供しますが、PCI デバイスまたはバス ID へのアクセスは提供しません。PCI デバイス名と OpenCL デバイス名を一致させることはできますが、同じタイプのデバイスが複数ある可能性があり、名前が常に同じであるとは限りません。
なぜこれが必要なのですか?プログラム X が GPU A で CUDA などを実行していることを知っているとします。OpenCL 操作に GPU A も使用することを避けたいので、GPU B を選択します。次に、どの OpenCL デバイスが GPU A で、どれが GPU であるかを把握する必要があります。 B. PCI ID は、GPU デバイスを識別する唯一の一貫したクロス プラットフォームの方法のようです。
ところで、CUDA API は PCI、バス、およびスロット ID (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID、CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) を提供しますが、CUDA は NVidia デバイスでのみ動作します。
理想的には、C または C++ を使用したソリューションが必要です。
concurrency - プロセッサの同時 PCI 読み取り
私は LEON2 (SparcV8) プロセッサを使用するプロジェクトに取り組んでおり、他の FPGA とプロセッサを接続する PCI バスがあります。
これを実行すると、RTEMS を使用し、C で記述されたマルチタスク アプリケーションが作成されます。
今、私はプロセッサと pci アーキテクチャにまったく慣れていないので、啓発のために皆さんのところに来ました。
問題は次のとおりです。PCI バス上でメモリの読み取りを実行する 1 つの RTEMS タスクがあるとします。私たちのボードでは、PCI アクセスの長さは約 2us です。さて、私の同僚が問題を提起しました。その PCI 読み取り中に、RTEMS のタスク スケジューラが、別のタスクが起動する時間であり、このタスク ジョブも PCI 読み取りを実行すると判断した場合はどうなるでしょうか。彼のポイントは、タスク切り替えの前に実行された最初の PCI 読み取りが、最初のタスクが実行される前に 2 番目のタスクによって実行される 2 番目の PCI 読み取りによって破損するということです。
このケースはありえますか?
私の見解では、この問題は発生してはならないということです。私にとって、PCI 読み取りは他のメモリ読み取りと同じであり、たとえばアドレス 0x4000'0000 にあるローカル RAM を読み取る代わりに、アドレス 0xA020'0000 を読み取るだけだからです。次に、プロセッサはこれを PCI バス上のアドレスとして変換し、バスを介してこの読み取りを実行します。確かに、この読み取りはローカル メモリの読み取りよりも長くなりますが、このプロセスは途中で中断できません。私の理解が完全にずれている可能性があります。その場合は、お気軽に修正してください。
windows - WindowsCEおよびWindowsデスクトップ用のPCIeドライバー
カスタムPCIeドライバーの開発について少しアドバイスが必要です。ドライバは、Windows CE6.0とWindowsDesktopの両方をサポートしている必要があります(準備ができている場合はxp、7、および8)。
Windows CE用のドライバーの開発には多くの経験がありますが、WindowsDesktop用のドライバーはありません。優れた堅牢なWindowsCEドライバーを開発できると確信していますが、外部の支援がなければ、Windowsデスクトップでも同じことを行うことはできないと思います。2つの選択肢があると思います。
1)Jungo WinDriverなどの既存のドライバーフレームワークを使用します。これにより、ドライバーを一度開発して、複数のプラットフォームにコンパイルできます。これには、開発のほとんどがユーザースペースで行われるという利点もあるため、開発プロセスが簡単になるはずです。
2)すべての配管が行われ、ボードと通信するコードを追加して関連するIOControlを公開するだけで、優れたWindowsデスクトップドライバーをセットアップするための外部ヘルプを入手できます。おそらく、コードを可能な限りユーザースペースライブラリに移動します。
各オプションのメリットとデメリットは何ですか?別のアプローチをお勧めしますか?
c - PCI 入出力制御のプログラミング
私の仕事は、pci (express または mini ではない) i/o で操作できるプログラムを開発することです。これを始めるにはいくつかの参照が必要です。私は C でプログラミングしており、Linux と Windows プラットフォームの両方でこれを行っています。
pci - 「リアルモード」でPCIカード(32ビット)にアクセスできますか?
「リアルモード」でPCIカード(32ビット)にアクセスできますか?「リアルモード」は16ビットではありませんか?リアルモードでのみハードウェアにアクセスできると主張する開発者がいます。しかし、PCIは32ビットです...
pci - PCI デバイスの IO アドレスを変更する
新しい (ページにアラインされた) アドレスを BAR0/1 に書き込むことにより、PCI デバイスの IO アドレスを変更したいと考えています。BIOS機能を使用してそれを行ったとき、新しいアドレスのPCIデバイスにアクセスできませんでした。
それを機能させるために他に何かする必要がありますか?アセンブラをリアルモードで使用しています。