uct_iface_attr_t の、capabilityに関する値を見ていきます。
ソース:
https://gist.github.com/keisukefukuda/153ec198cf234f0f5b3a43a044523e3a
出力:
Using rc/mlx4_0:1
ib/mlx4_0
component name: ib
max alloc: 18446744073709551615
(17179869184[GiB])
max reg: 18446744073709551615
(17179869184[GiB])
rkey packed size: 16
Devices:
mlx4_0:1/rc
mlx4_0:1/ud
iface_config of rc/mlx4_0:1
device_addr_len = 3
iface_addr_len = 1
ep_addr_len = 4
max_conn_priv = 0
overhead = 7.5e-08
bandwidth = 6.74572e+09
latency = 1e-09 * x + 7e-07
priority = 10
attr.cap.put
max_short = 88
max_bcopy = 8192
min_zcopy = 0
max_zcopy = 1073741824 (=1024 [MiB])
opt_zcopy_align = 512
align_mtu = 2048
max_iov = 6
attr.cap.get
max_bcopy = 8192
min_zcopy = 65
max_zcopy = 1073741824 (=1024 [MiB])
opt_zcopy_align = 512
align_mtu = 2048
max_iov = 6
attr.cap.am
max_short = 87
max_bcopy = 8191
min_zcopy = 0
max_zcopy = 8191 (=0 [MiB])
opt_zcopy_align = 512
align_mtu = 2048
max_iov = 5
attr.cap.tag.recv.min_recv = 0
attr.cap.tag.recv.max_zcopy = 0
attr.cap.tag.recv.max_iov = 0
attr.cap.tag.recv.max_outstanding = 0
attr.cap.tag.eager.max_short = 0
attr.cap.tag.eager.max_bcopy = 0
attr.cap.tag.eager.max_zcopy = 0
attr.cap.tag.eager.max_iov = 0
attr.cap.tag.rndv.max_zcopy = 0
attr.cap.tag.rndv.max_hdr = 0
attr.cap.tag.rndv.max_iov = 0
いろいろな値が取得できておもしろげです。
attr.cap という値は、device/transport layerの各種の上限・下限値(Capability)を示しています。
UCXにおける通信タイプは5種類あり、
- get: 片方向通信 get
- put: 片方向通信 put
- am : Active Message
- タグ付き通信
- recv: Receiveをpostしておく非同期通信
- eager: Eager通信
- rndv: Randezvous通信
があります。この rc/mlx0:1 では、タグ付き通信のCapacityが全てゼロになっていますから、タグ付き通信はできないということだと思われます。Infinibandはタグ付き通信はネイティブにサポートしていないので、それを実装するのはもう1つ上の UCP レイヤだということになるかと思われます(タグ付き通信をネイティブにサポートしているネットワークは有るのだろうか…?)
ちなみに、Eager通信とRandezvous通信については、こちらの資料に解説があります さらに、それぞれの通信タイプにおいて、さらにメモリコピーの方法によって3つに分かれています。
- short : 小さいデータを、通信ヘッダと一緒に一気に送ってしまう方法
- bcopy : Buffered Copy=プログラムが通信しようとしたデータ領域は、一旦UCXの内部バッファにコピーされ、そこから通信される。
- zcopy : Zero Copy=いわゆるRDMA
ちなみに、bandwidth = 6.74572e+09 となっています。このマシンはInfiniband FDR x 4 を搭載しているので、理論ピーク性能は 56Gbps * 0.96 = 53.76 [Gbps] のはずです。 6.74e+09 = 6.28 [GB/s] = 50.26 なので、まあだいたい合っていますね。UCXのソースを見ると、Extra headerの分だけ実行レートが下がっている計算になるっぽいです
次回から、いよいよ通信をしてみます