3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ZEAM開発ログ v.0.3.7 Windows PC サーバーでGPU駆動ベンチマークを実行してみた

Last updated at Posted at 2018-09-07

はじめに

ZACKYこと山崎進です。また夜中に研究助成申請書を書いています。研究者にとって最重要な仕事の1つですね。

「ZEAM開発ログ 目次」はこちら

追記: 「ZEAM開発ログ v.0.3.7.1 Linux PC サーバーでGPU駆動ベンチマークを実行してみた」 を書きました! 期待通りの結果が得られました!

SWEST20で3件のポスター発表をしました!

fukuoka.ex 福岡 Elixir コミュニティ

SWEST_fukuoka_ex-2.jpg

Hastega: Elixirプログラミングにおける超並列化を実現するためのGPGPU活用手法

SWEST_Hastega.jpg

Nodeプログラミングモデルを活用した C++ および Elixir の実行環境の実装

SWEST_Node.jpg

ポスターデザインはザキ研卒業生のまりまりこと山田麻里衣さんです!

研究構想についても発表しました。

Elixir-proposal-2018.png

SWEST20でElixir分科会を主催し,micro Elixir / ZEAM 構想を発表しました!

「耐障害性が高くマルチコア性能を最大限発揮できるElixir(エリクサー)を学んでみよう」という分科会を主催しました。

zeam-SWEST-2018-pr.png

※ 当日は高瀬先生のセッションもありました。高瀬先生の資料も含む全ての講演資料は近日SWESTホームページで公開予定です。

さて本題

ありがたいことに FAIS から研究助成をいただき,前回の Mac Pro (Mid 2010) 用のCPUユニットに加えて,Intel Xeon x2 + NVIDIA GeForce GTX 1080 Ti のユニットコム製GPGPUサーバーも購入できました。今回は,このマシンで Windows 10 のセットアップをしてGPU駆動ベンチマークを実行してみました。

使用した機材の仕様

GPGPUサーバー ユニットコム UCGPU-E2630V4-32GB

  • Processor: 2.20GHz Intel Xeon E5-2630 v4 (プロセッサ数 2 物理コア数 10コア x 2,論理コア数 20コア x 2)
  • Memory: 32 GB 2400 MHz DDR4
  • Graphics: NVIDIA GeForce GTX 1080 Ti
  • OS
    • Windows 10 Pro

iMac Pro に迫るスペックです。コア数は本GPGPUサーバーの方が多く,クロックはiMac Proの方が若干高い,世代はiMac Proの方が1つ新しい,という感じです。グラフィックボードは iMac Pro 搭載の Radeon Pro Vega 64 よりも GPGPUサーバー搭載の NVIDIA GeForce GTX 1080 Ti の方が処理能力が高いと言われています。

予想としては pure Elixir だとコア数の多いGPGPUサーバーの方が有利で,ネイティブコードが入ると iMac Pro の方が有利,GPU駆動はGPGPUサーバーが優勢と見ましたが,果たして結果はいかに?

参考: iMac Pro (2017)

  • Processor: 2.3 GHz Intel Xeon W (プロセッサ数 1,物理コア18,論理コア36)
  • Memory: 32 GB 2666 MHz DDR4
  • Graphics: Radeon Pro Vega 64 16368MB
  • SSD (BlackMagic)
    • Write 2980.3MB/s
    • Read 2465.1MB/s

CPUとGPUは最高性能の構成,メモリとSSDは標準構成です。

参考: Mac Pro (Mid 2010)

  • Processor:
    • グレードアップ前: 2.8 GHz Quad-Core Intel Xeon (プロセッサ数 1,物理コア数 4,論理コア数8)
    • グレードアップ後: 2 x 3.46 GHz 6-Core Intel Xeon (プロセッサ数 2,物理コア数 6 x 2,論理コア数 12 x 2)
  • Memory: 16 GB 1066 MHz DDR3
  • Graphics: ATI Radeon HD 5770 1024MB
  • SSD (BlackMagic)
    • Write 473.9MB/s
    • Read 507.4MB/s

CPUが最強構成になりました。

ベンチマーク結果

Elixir 1.7.2 での実行結果です。

GPGPUサーバー ユニットコム UCGPU-E2630V4-32GB

Elixir は Windows インストーラーからインストールしました。

$ elixir -v
Erlang/OTP 21 [erts-10.0.1] [64-bit] [smp:40:32] [ds:40:32:10] [async-threads:1]

Elixir 1.7.3 (compiled with Erlang/OTP 19)

Erlang/OTP 19 とかなっているのが気になりますね。あと,HiPE (High Performance Erlang) が有効になっていないようにも見えます。一抹の不安。。。

stages benchmarks1 benchmarks3 benchmarks8
pure Elixir pure Elixir Elixir/Rustler
loop inlining inside of Flow.map loop, passing by list, with Window
1 42.188 29.703 7.922
2 20.875 21.938 24.047
4 11.500 10.750 16.797
8 8.891 8.421 19.187
16 8.578 12.110 21.938
32 9.156 8.453 21.562
64 13.328 9.156 23.219
128 9.875 12.969 26.187
benchmarks_g2 benchmarks_t1 benchmarks_empty
Elixir/Rustler Elixir/Rustler Elixir/Rustler
OpenCL(GPU), inlining rayon Ruslter empty
2.109 1.625 1.531
Rust CPU Rust OpenCL Rust rayon
Rust Rust Rust
CPU(1), loop OpenCL(GPU), inlining CPU(multi), loop
1.859367 1.343743 0.453128

なんか,思ったより速くないですね。HiPE が効いていないせいかもしれませんが,Rust でもそれほど速くなっていないので,HiPEのせいばかりとは言えなさそうです。

pure Elixir で benchmark1 と benchmark3 で stages 1 の時に大きく差がついているのが特徴的です。インライン展開が有効ということでしょうか。

参考: iMac Pro (2017)

$ elixir -v
Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:36:36] [ds:36:36:10] [async-threads:1] [hipe] [sharing-preserving]

Elixir 1.7.2 (compiled with Erlang/OTP 21)
stages benchmarks1 benchmarks3 benchmarks8
pure Elixir pure Elixir Elixir/Rustler
loop inlining inside of Flow.map loop, passing by list, with Window
1 22.823357 17.263715 4.577052
2 11.232475 8.647210 13.938190
4 5.954148 5.409378 10.471390
8 3.954989 4.129163 9.647276
16 4.225692 4.130425 10.081226
32 4.311388 3.965232 11.729024
64 4.157024 3.902033 15.635729
128 4.008359 4.323282 23.133601
benchmarks_g2 benchmarks_t1 benchmarks_empty
Elixir/Rustler Elixir/Rustler Elixir/Rustler
OpenCL(GPU), inlining rayon Ruslter empty
1.23860 0.67441 0.81719
Rust CPU Rust OpenCL Rust rayon
Rust Rust Rust
CPU(1), loop OpenCL(GPU), inlining CPU(multi), loop
1.212508 0.707200 0.251875

iMac Pro の速度には大差をつけられていますね。

参考: Mac Pro (Mid 2010)

グレードアップ前:

$ elixir -v
Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Elixir 1.7.2 (compiled with Erlang/OTP 21)
stages benchmarks1 benchmarks3 benchmarks8
pure Elixir pure Elixir Elixir/Rustler
loop inlining inside of Flow.map loop, passing by list, with Window
1 47.653314 37.392453 7.726425
2 23.946650 19.162682 25.177824
4 13.690849 12.417391 19.870013
8 12.361272 13.123296 18.489603
16 12.178206 11.210884 19.965729
32 12.540539 10.591330 22.487094
64 12.470190 10.878797 28.189323
128 12.262785 11.103630 38.555434
benchmarks_g2 benchmarks_t1 benchmarks_empty
Elixir/Rustler Elixir/Rustler Elixir/Rustler
OpenCL(GPU), inlining rayon Ruslter empty
2.423294 1.784261 1.313502
Rust CPU Rust OpenCL Rust rayon
Rust Rust Rust
CPU(1), loop OpenCL(GPU), inlining CPU(multi), loop
2.926270 1.545693 0.669060

さすがにグレードアップ前の Mac Pro (Mid 2010) には勝ちましたね。

グレードアップ後:

$ elixir -v
Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:24:24] [ds:24:24:10] [async-threads:1] [hipe]

Elixir 1.7.2 (compiled with Erlang/OTP 21)
stages benchmarks1 benchmarks3 benchmarks8
pure Elixir pure Elixir Elixir/Rustler
loop inlining inside of Flow.map loop, passing by list, with Window
1 40.904522 32.825059 6.467740
2 18.963229 16.029738 22.610193
4 10.753609 9.113769 17.479965
8 6.362842 6.490303 18.599809
16 5.778699 5.820455 17.680624
32 6.820108 6.515120 19.793970
64 7.082667 6.924904 26.567416
128 7.124302 7.131452 39.737620
benchmarks_g2 benchmarks_t1 benchmarks_empty
Elixir/Rustler Elixir/Rustler Elixir/Rustler
OpenCL(GPU), inlining rayon Ruslter empty
1.733477 1.267730 1.842386
Rust CPU Rust OpenCL Rust rayon
Rust Rust Rust
CPU(1), loop OpenCL(GPU), inlining CPU(multi), loop
2.456480 0.900843 0.365043

しかしグレードアップ後の Mac Pro (Mid 2010) には負けています。なぜだろう?

考察

最初は設置場所の関係で気温が高かったせいかと思ったのですが,冷房を効かせてみて実験してもそう大差なかったので,気温のせいとは言えないような気がします。もっと涼しくなったら確かめられますね。

次に HiPE が無効になっている説が考えられますが,Elixir や Elixir / Rustler の実行だけでなく,Rust での実行も速くなっていないので,このせいばかりとは言えません。しかしながら,この説が成立しているか見極めるには,Elixir / Erlang をソースコードビルドして確かめる必要があります。もし HiPE が無効になっているとしたら,Elixir の Windows インストーラーは HiPE が無効になっているということなので,これはちょっとした一大事です。

次に考えられるのは,ハードウェア的に何かしらのボトルネックがあるのか,あるいは macOS と Windows の違いということが考えられます。どちらなのかを見極めるためには,GPGPU サーバーに Linux をインストールして試してみたり,iMac Pro / Mac Pro に Windows や Linux をインストールして試してみたり,というのが要りますね。

いずれにせよ,すぐにできる状態ではなかったので,今後追試してみたいと思います。

おわりに

GPGPUサーバーが期待した性能を発揮できなかったのが残念です。今後も実験を継続し,何が原因なのかを特定したいと思います。

ちなみに,Windows マシンであっても,GPU駆動ベンチマークのインストールはとても楽勝でした! 私たちが開発した Hastega の優位性と言えます。これが Python / CUDA だと環境構築に一苦労ですからね。

次回は新シリーズで「ZEAM開発ログ v.0.4.0 型多相かつ型安全なNIFをC言語で書いてみる」です。お楽しみに!

:stars::stars::stars: お知らせ:Elixirもくもく会(リモート参加OK、入門トラック有)を9月28日に開催します :stars::stars::stars:

「fukuoka.ex#14:Elixir/Phoenixもくもく会~入門もあるよ」を2018年9月28日金曜日に開催します

前回は,ゲリラ的に募った「Zoomによるリモート参加」を,今回から正式に受け付けるようになりましたので,福岡以外の首都圏や地方からでも参加できます(申し込みいただいたら、追ってZoom URLをconnpassメールでお送りします)

また,これまではElixir/Phoenix経験者を対象とした,もくもく会オンリーでしたが,今回から,入門者トラックも併設し,fukuoka.exアドバイザーズ/キャストに質問できるようにアップグレードしました

私,山崎も参加します! さて,何を作ろうかな。。。

お申込みはコチラから
https://fukuokaex.connpass.com/event/100659/
image.png

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?