GPUDirectによるPeerアクセスの速度
出典: トータル・ディスクロージャ・サイト(事実をありのままに)
前回扱った、GPUDirectによるPeerアクセスであるが、速度について検証が欲しいという話が出てきたので、今回はこの速度を測定することにした。
目次 |
測定方法
2枚のGPUに、それぞれ1 GBのデバイスメモリを確保し、この間での転送速度を、データサイズを変えながら測定する。測定に使ったプログラムは、以下のものである。
#include <stdio.h>
#include <sys/time.h>
#define LOGN 30
int
main()
{
void *h_a, *d_a[2];
struct timeval tv[2];
double second[2];
cudaHostAlloc(&h_a, 1 << LOGN, cudaHostAllocPortable);
for (ptrdiff_t i = 0; i < 2; ++i) {
cudaSetDevice(i);
cudaMalloc(&d_a[i], 1 << LOGN);
}
for (ptrdiff_t i = 0; i <= LOGN; ++i) {
gettimeofday(&tv[0], NULL);
cudaSetDevice(0);
cudaMemcpy(h_a, d_a[0], 1 << i, cudaMemcpyDeviceToHost);
cudaSetDevice(1);
cudaMemcpy(d_a[1], h_a, 1 << i, cudaMemcpyHostToDevice);
gettimeofday(&tv[1], NULL);
second[0] =
tv[1].tv_sec - tv[0].tv_sec + (tv[1].tv_usec - tv[0].tv_usec) * 1.0e-6;
gettimeofday(&tv[0], NULL);
cudaMemcpyPeer(d_a[1], 1, d_a[0], 0, 1 << i);
cudaDeviceSynchronize();
gettimeofday(&tv[1], NULL);
second[1] =
tv[1].tv_sec - tv[0].tv_sec + (tv[1].tv_usec - tv[0].tv_usec) * 1.0e-6;
printf("%d\t%f\t%f\n", 1 << i, second[0], second[1]);
}
return 0;
}
測定環境
Tesla環境
| CPU: | クアッドコア Xeon W3520 2.67 GHz |
| GPU: | Tesla C2050 × 2 |
| OS: | CentOS 5.7 |
| CUDA: | CUDA 4.0 |
| GPUドライバ: | バージョン270.41開発用ドライバ |
GeForce環境
| CPU: | クアッドコア Xeon W3565 3.20 GHz |
| GPU: | GeForce GTX 580 × 4のうち2枚使用 |
| OS: | CentOS 5.7 |
| CUDA: | CUDA 4.0 |
| GPUドライバ: | バージョン290.10 |
測定結果
| データサイズ(Byte) | Tesla: Peer未使用(秒) | Tesla: Peer使用(秒) | GeForce: Peer未使用(秒) | GeForce: Peer使用(秒) |
| 1 | 0.000094 | 0.000046 | 0.000065 | 0.000034 |
| 2 | 0.000058 | 0.000040 | 0.000026 | 0.000025 |
| 4 | 0.000053 | 0.000039 | 0.000023 | 0.000025 |
| 8 | 0.000052 | 0.000043 | 0.000023 | 0.000025 |
| 16 | 0.000058 | 0.000040 | 0.000023 | 0.000025 |
| 32 | 0.000056 | 0.000040 | 0.000022 | 0.000024 |
| 64 | 0.000052 | 0.000039 | 0.000023 | 0.000025 |
| 128 | 0.000052 | 0.000038 | 0.000023 | 0.000025 |
| 256 | 0.000053 | 0.000038 | 0.000023 | 0.000025 |
| 512 | 0.000052 | 0.000039 | 0.000023 | 0.000024 |
| 1024 | 0.000052 | 0.000039 | 0.000023 | 0.000025 |
| 2048 | 0.000052 | 0.000038 | 0.000023 | 0.000026 |
| 4096 | 0.000053 | 0.000039 | 0.000024 | 0.000025 |
| 8192 | 0.000055 | 0.000040 | 0.000026 | 0.000028 |
| 16384 | 0.000061 | 0.000048 | 0.000032 | 0.000032 |
| 32768 | 0.000064 | 0.000049 | 0.000034 | 0.000034 |
| 65536 | 0.000074 | 0.000058 | 0.000044 | 0.000046 |
| 131072 | 0.000094 | 0.000079 | 0.000065 | 0.000067 |
| 262144 | 0.000136 | 0.000122 | 0.000107 | 0.000109 |
| 524288 | 0.000223 | 0.000210 | 0.000190 | 0.000192 |
| 1048576 | 0.000388 | 0.000373 | 0.000361 | 0.000360 |
| 2097152 | 0.000727 | 0.000622 | 0.000697 | 0.000632 |
| 4194304 | 0.001400 | 0.001114 | 0.001369 | 0.001173 |
| 8388608 | 0.002750 | 0.002102 | 0.002712 | 0.002258 |
| 16777216 | 0.005433 | 0.004081 | 0.005394 | 0.004430 |
| 33554432 | 0.010806 | 0.008046 | 0.010750 | 0.008765 |
| 67108864 | 0.021542 | 0.015965 | 0.021480 | 0.017444 |
| 134217728 | 0.043024 | 0.031767 | 0.042942 | 0.034829 |
| 268435456 | 0.085979 | 0.063421 | 0.085842 | 0.069523 |
| 536870912 | 0.171893 | 0.126739 | 0.171670 | 0.138937 |
| 1073741824 | 0.343748 | 0.253363 | 0.343369 | 0.277693 |
Teslaを使った場合、データサイズに関わらず、Peerアクセスが高速化に寄与していることがわかる。GeForceの場合、データサイズが小さい場合は、むしろわずかに遅くなっているようであるが、1 MB以上のサイズのコピーに関しては、GeForceでも20 %程度速くなっていて、有用性が確認できる。
この記事へのコメントをお寄せください
- サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください 。
- トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
- あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
- コメントを書き込む場合は名前にひらがなを織り交ぜてください。
- あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

