C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: PCI expressのデータ転送の同時性?


(過去ログ 114 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■67100 / inTopicNo.1)  PCI expressのデータ転送の同時性?
  
□投稿者/ 天真 (1回)-(2013/07/03(Wed) 14:55:38)

分類:[ハードウェア全般] 

こんにちは

PCI expressの特徴に関してお伺いをさせていただきます。
例えば、パソコンにA,B,C三台デバイスがあって、
それぞれに一つのPCI expressスロットを持つとします。

A,B,Cがそれぞれに対応する三つのCPU coreとデータ転送を行う場合、
同時にデータ転送できないでしょうか。



引用返信 編集キー/
■67103 / inTopicNo.2)  Re[1]: PCI expressのデータ転送の同時性?
□投稿者/ しま (10回)-(2013/07/03(Wed) 17:33:27)
No67100 (天真 さん) に返信
> こんにちは
>
> PCI expressの特徴に関してお伺いをさせていただきます。
> 例えば、パソコンにA,B,C三台デバイスがあって、
> それぞれに一つのPCI expressスロットを持つとします。
>
> A,B,Cがそれぞれに対応する三つのCPU coreとデータ転送を行う場合、
> 同時にデータ転送できないでしょうか。
>
同時の定義によると思いますが、複数の CPU core と PCI express と
同時にデーター転送出来るのではないかと考える根拠は何でしょうか?
引用返信 編集キー/
■67107 / inTopicNo.3)  Re[2]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (2回)-(2013/07/03(Wed) 19:03:28)
そうですか。
三つのデバイス A,B,C が独立なので、お互いに知らないため、
まったく同じ瞬間でCPUにデータ転送したら、どうなるのでしょうか。
逆も同じ三つのCPU coreがまったく同時にA,B,Cにデータを送ろうとしたらどうなるのでしょうか。

PCI express バスが混乱になるか、転送は全部不可能になってしまいます?

また何かヒントを頂ければ幸いです。




No67103 (しま さん) に返信
> ■No67100 (天真 さん) に返信
>>こんにちは
>>
>>PCI expressの特徴に関してお伺いをさせていただきます。
>>例えば、パソコンにA,B,C三台デバイスがあって、
>>それぞれに一つのPCI expressスロットを持つとします。
>>
>>A,B,Cがそれぞれに対応する三つのCPU coreとデータ転送を行う場合、
>>同時にデータ転送できないでしょうか。
>>
> 同時の定義によると思いますが、複数の CPU core と PCI express と
> 同時にデーター転送出来るのではないかと考える根拠は何でしょうか?
引用返信 編集キー/
■67108 / inTopicNo.4)  Re[3]: PCI expressのデータ転送の同時性?
□投稿者/ 774RR (92回)-(2013/07/03(Wed) 19:13:14)
「転送」という文言を、何を意図して使っているのか良くわからないけど
普通、データ転送は DMA だから [メインメモリ] [デバイス] 間で行われるものだ。
# キャッシュの無効化とかスキャッタギャザーとか聞いたことあるだろう?
[CPU コア] と [デバイス] 間で転送するようなことはない。

CPU コアが何個あろうとメインメモリは1個しかないから混乱などありえない。

引用返信 編集キー/
■67111 / inTopicNo.5)  Re[3]: PCI expressのデータ転送の同時性?
□投稿者/ しま (11回)-(2013/07/03(Wed) 22:13:51)
No67107 (天真 さん) に返信
> そうですか。
> 三つのデバイス A,B,C が独立なので、お互いに知らないため、
> まったく同じ瞬間でCPUにデータ転送したら、どうなるのでしょうか。
> 逆も同じ三つのCPU coreがまったく同時にA,B,Cにデータを送ろうとしたらどうなるのでしょうか。
>
> PCI express バスが混乱になるか、転送は全部不可能になってしまいます?
CPU が複数あっても、Intel,AMD の(x86/x64)プロセッサーのパッケージにあるデーターバスもアドレスバスも一組しかないのでパッケージ中の複数の CPU が
同一時刻に同時に外部とデーターのやり取りは出来ません。それと同じく、PCI express バスも一つしかない場合、バス上の複数の PCI express 装置が
データーを送出したり、受取ったりすることもありません(傍受することは出来ると思う)

特に、複数のPCI express 装置が同時刻にデーターを出力するとしたら装置Aが 1 で装置Bが 0 の場合バス上の値はどうなると思いますか?
おそらく、オープンドレインでない場合は装置の出力回路は焼けるでしょうし、マザーボード上の他の回路にも影響が出るかもしれません。
引用返信 編集キー/
■67113 / inTopicNo.6)  Re[1]: PCI expressのデータ転送の同時性?
□投稿者/ オショウ (79回)-(2013/07/04(Thu) 06:46:28)
> A,B,Cがそれぞれに対応する三つのCPU coreとデータ転送を行う場合、
> 同時にデータ転送できないでしょうか。

  先に投稿された内容と同じですが・・・
  同時性の定義は?

  まず、PC的には、バスは1本しか無いので、バス上のデバイスとの通信は
  瞬間には、1対1でしか行われません。
  また、バスの転送速度上限を超えることもできません。

  ただ、バス上のデバイスから同時に出力となると、そういう機能を有したデ
  バイスなら可能です。マスター・スレーブ構成としてボード側で同期させる
  結線ができて、1枚のボードに転送開始命令を送りつけると、スレーブ側も
  マスターに同期して転送を開始する・・・

  要は、PC側とデバイスは非同期だが、ボードから接続された機器には同期
  で一斉送信が可能・・・と言うことになります。

  そういう機能を有していないデバイス(ボード)なら無理です。

※ A/Dボード等で、複数枚のA/Dボードをあたかも1枚かのように同期取
  り込みが可能になっているものがありますが、そういうことです。
  ただ、ボード上のバッファに溜め込み、非同期でPC側に転送されることに
  はなりますので、完全な同期性ではありません。

以上。参考まで


引用返信 編集キー/
■67116 / inTopicNo.7)  Re[2]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (3回)-(2013/07/04(Thu) 13:03:36)
良く分かりました!
皆さんに感謝致します。



解決済み
引用返信 編集キー/
■67121 / inTopicNo.8)  Re[3]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (4回)-(2013/07/04(Thu) 14:28:50)

いったんお礼しましたが、やはり、気になること一つあります。
もし、複数のCPU core同時にデータを別々のPCIeデバイスに送ろうとしたら、
どこで待ち列が作られるのでしょうか。
待ち列がなければ、送信失敗CPU coreは時々出るでしょう。





引用返信 編集キー/
■67126 / inTopicNo.9)  Re[4]: PCI expressのデータ転送の同時性?
□投稿者/ 774RR (93回)-(2013/07/04(Thu) 15:59:02)
「転送」は同時に1種類しかできない。だから、
複数のデバイス へ/から 同時に転送したくなったら、
今この瞬間に転送していないデバイスは待たされることになる(当然)

どれが待って、どれが転送するかは bus arbitor という回路/プロトコルが調停している。
確か PCIe の場合、各バスマスタが自分自身にバスアービタを内蔵していて、
1個のデバイス(バスマスタ)がバスを占有しない/占有できないようになっている。

引用返信 編集キー/
■67127 / inTopicNo.10)  Re[4]: PCI expressのデータ転送の同時性?
□投稿者/ しま (12回)-(2013/07/04(Thu) 16:43:09)
No67121 (天真 さん) に返信
>
> いったんお礼しましたが、やはり、気になること一つあります。
> もし、複数のCPU core同時にデータを別々のPCIeデバイスに送ろうとしたら、
> どこで待ち列が作られるのでしょうか。
> 待ち列がなければ、送信失敗CPU coreは時々出るでしょう。
>
待ち行列はOSが用意してくれると理解してください。
Windows OS (2000, Xp 以降)ではアプリケーションプログラムが直接入出力することは出来ません
入出力を担うのはデバイスドライバーですが、アプリケーションはOSに対して入出力の依頼をします。
OSはデバイスドライバーに対して処理を依頼します。
勿論、装置側から入出力の要求も起こりますが、これは割り込みを用いてOSに対して伝えます。
OSはデバイスドライバーに対して処理を依頼します。
引用返信 編集キー/
■67129 / inTopicNo.11)  Re[5]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (5回)-(2013/07/04(Thu) 18:11:48)

皆さんありがとうございます。

一番気になるのは何かと言いますと、
もし複数のCPU coreが同時にそれぞれのPCIeデバイスにデータを送ろうとしたら、
先着のCPU coreのデータ転送量が莫大な場合、ほかのCPU coreがずーと待つしかできないでしょうか。


引用返信 編集キー/
■67131 / inTopicNo.12)  Re[6]: PCI expressのデータ転送の同時性?
□投稿者/ 774RR (94回)-(2013/07/04(Thu) 18:47:06)
CPU CORE が何個あってもデバイスは1個しかない(この場合 PCI バス自体を意味する)ので
いっぺんに入出力が要求されても結局デバイスドライバが「シリアライズ」する
=優先順をラウンドロビンしながら公平に順番に入出力するんだ。

たいていのデバイスってのはそんなに高速ではないので
ハードウエアのレベルで数百 MB とか数 GB とかのデータを一度に送受信することはできない。
大きくて 数百KB 〜数MB 位を扱ったらそれで手一杯だ。

OS(というかデバイスドライバ)は大きなデータを細切れに転送する。
デバイスAに細切れデータを転送し(するとデバイスAは BUSY になるので)
デバイスBに細切れデータを転送し(この間にデバイスAの処理が終わったとする)
デバイスAに続きを転送し(この間にデバイスBの処理が終わり・・・以下略)

大量のデータをいっぺんで受け取れるデバイスがもしあったとしても
バスアービタが占有を許さないので、やはり問題ない。
# デバイスは、バスアービタが許す以上のバッファを持っても無駄ってこと。
引用返信 編集キー/
■67133 / inTopicNo.13)  Re[7]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (6回)-(2013/07/05(Fri) 13:59:24)

丁寧なご指導本当にありがとうございます。

原理的なことを理解するために下記のようなイメージを持っていれば大丈夫かな。

1.CPUは某種類のデータ転送方式を利用するために、その転送方式のドライバーをコールします。
2.ドライバーがデータ転送方式の規格(今の場合はPCIe)に沿って一定大きさのデータパケットを作成します。
3.このデータパケットの中に宛先のアドレスが付与され、そのアドレスで転送先だけの扉を開けられます。
4.PCIeカード(バス)上のコントローラ(バスアービタ)は
  現在PCIeバスを利用してデータ転送しようとするクライアントの数に応じて、
  タイムスライスの大きさを調整しますーーーーあるいは、busy状況に応じて、待ち行列中の各データパケットのサイズを調整します(?) 。

5.待ち行列の各データパケットを順番にひとつずつPCIeバスにブロードキャスト(放送)します。
6.待ち行列中のデータパケットがなくなるまで、5を繰り返します。

概念的に間違い処があれば、是非ご指摘いただきたいです。


引用返信 編集キー/
■67135 / inTopicNo.14)  Re[8]: PCI expressのデータ転送の同時性?
□投稿者/ 774RR (95回)-(2013/07/05(Fri) 18:53:24)
厳密な話をしないのならそんな程度の理解で問題ないだろう。

1つ気になるとしたら 「ブロードキャスト」 で、これは放送と言っているとおり
「一斉同報」すなわち全デバイスに通知するときに使う用語なわけだ。
ここでいう「通知」とは「データを送ること」を意味する。

通常のデータ入出力において、
(ソフトウエアである)デバイスドライバは対象デバイスに対して入出力を指示する。
(ハードウエアである)バス構造は、全デバイスに同じデータ信号を送るが
それを受け取って処理するのは事前に指定された1デバイスのみ。
なので「ブロードキャスト」という単語をここで使うのはミスリーディング。
「データ」は、論理的にはあくまで1対1転送される(一斉同報されるわけではない)

ハードウエアレベルの概念・電気的信号の動きと、
ソフトウエアレベルの概念・論理的データの動きとを、
一緒くたに書いてしまっている&考えてしまっているのでわかりにくくなっているんだと思う。

あと、「転送が始まったら、全データ転送終了までほかのことを一切しない」とか思ってない?
・CPU は周辺回路より圧倒的に高速なこと(CPU は、転送の後のデバイスの実動作を待つ必要はない)
・DMA (転送回路) が RAM を占有してしまうと CPU 自体も動けなくなること
その辺の理由により、大量のデータを転送する場合の動きは
A.CPU は、周辺回路が受け取れる少量のデータを転送したらすぐに別の処理を実行する。
B.周辺装置は、新たな転送が可能になったら CPU (デバイスドライバ) に通知する。
を繰り返すだけだよ。

# 電気的には、バスマスターが DMA するので *** ってあたりの解説は今は略しておこう。

引用返信 編集キー/
■67140 / inTopicNo.15)  Re[9]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (7回)-(2013/07/06(Sat) 14:35:06)
ご指導ありがとうございます。
なるほど!

ただ、「ブロードキャスト」に関しては、自分の理解が間違いないではと思いますが。
だって、PCIeデバイスは皆共通のバスに差し込んでいて、物理的、あるいは電気的に繋がっていますね!

なので、データはCPUより「一斉放送」されて、基本はどの PCIeデバイスも受領できるでしょう。
だが、下記の仕組みのうちどれかの一つによって、実際にデータを受け取れるPCIeデバイスが一つしかないことになります。

1.PCIeデバイス自身が各データパケットに内蔵しているアドレス(または PCIeデバイス ID)が自分に合うかどうかを確認します(ハード的かソフト的)
2.PCIeバスまたはボードのコントローラーが各データパケットの宛先情報を利用して本当の宛先以外のPCIeデバイスの入り口の処に
  データバスを電気的に強制遮断させます(例えば光ダイオードを利用して)

上記の1と2のどれでしょうか。

またご教授お願いします。



引用返信 編集キー/
■67144 / inTopicNo.16)  Re[10]: PCI expressのデータ転送の同時性?
□投稿者/ 774RR (96回)-(2013/07/06(Sat) 20:28:47)
状況というか主語というか、議題の前提をはっきりしておくんなまし。
・論理的データのやり取りの話なのか
・電気的信号の話なのか
・それ以外なのか

論理的データのやりとりは1対1だから、ブロードキャストという用語はミスリーディング
電気的信号はバス上の全機器に送られる(その意味ではブロードキャストと言っていい)
と、既に書いたつもりだったがどこか何か混乱があったりする?

No67135 の答えは1
PCI Express みたいな高速信号を電気的に切断するような回路を設けるのは非現実的。
受け取るけど処理しないだけ。
# USB なども同様だ。
引用返信 編集キー/
■67150 / inTopicNo.17)  Re[11]: PCI expressのデータ転送の同時性?
□投稿者/ 天真 (8回)-(2013/07/08(Mon) 09:48:08)
皆さま 非常に勉強になりました。
PCI Express に対する技術像(概念的にイメージ)は相当明晰になりました。
詳しい処はこれから勉強していきます。
ーーーまあ、当分の間これぐらで十分です。

今後も宜しくお願い致します。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -