はじめに

ZACKYこと山崎進です。

季節外れのアドベントカレンダーは終わりましたが,今後も不定期だが割と頻繁に開発の進捗をレポートしたいと思います。

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

情報処理学会にて研究発表してきました!

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

GPU-SWoPP-2018.png

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

LCB-SWoPP-2018.png

さて本題

今回は iMac Pro (2017) を入手できたので,さっそくロジスティック写像のGPU駆動ベンチマークを走らせてみました。 Elixir と Rust です。

使用した機材の仕様

Mac Pro (Mid 2010)

    • Processor: 2.8 GHz Quad-Core Intel Xeon (プロセッサ数 1,物理コア数 4,論理コア数8)

 

    • Memory: 16 GB 1066 MHz DDR3

 

    • Graphics: ATI Radeon HD 5770 1024MB

 

    • SSD (BlackMagic)

Write 473.9MB/s
Read 507.4MB/s

近日中にアップグレードする予定です。

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)

stagesbenchmarks1benchmarks3benchmarks8
pure Elixirpure ElixirElixir/Rustler
loopinlining inside of Flow.maploop, passing by list, with Window147.90471336.5584847.690833222.64005819.06741124.836797413.70183512.30896522.318805812.14991413.06387219.5506251612.25277211.19658721.6620093212.40766310.57851023.7496376412.27378810.78451229.40224712812.17749211.05248238.949820
benchmarks_g2benchmarks_t1benchmarks_emptyElixir/RustlerElixir/RustlerElixir/RustlerOpenCL(GPU), inliningrayonRuslter empty2.3881711.7481671.859177
Rust CPURust OpenCLRust rayonRustRustRustCPU(1), loopOpenCL(GPU), inliningCPU(multi), loop2.9262701.5456930.669060

iMac Pro (2017)

stagesbenchmarks1benchmarks3benchmarks8
pure Elixirpure ElixirElixir/Rustler
loopinlining inside of Flow.maploop, passing by list, with Window123.29363316.3141114.488194210.5976768.44821513.36521446.1672455.16639811.18532483.8221163.9462769.242530163.4850683.6307949.967291323.9965123.71017512.547183644.1263384.81267015.3664541284.0665354.09880822.587284
benchmarks_g2benchmarks_t1benchmarks_emptyElixir/RustlerElixir/RustlerElixir/RustlerOpenCL(GPU), inliningrayonRuslter empty0.9319360.6420101.075443
Rust CPURust OpenCLRust rayonRustRustRustCPU(1), loopOpenCL(GPU), inliningCPU(multi), loop1.2125080.7072000.251875

iMac Pro は最もナイーブなbenchmarks1の最速で4秒切っちゃうんだから,ものすごいスピードです。最も速いRust rayon は0.25秒台ということで,凄まじ過ぎます。

比較考察

Mac Pro / iMac Probenchmarks1ElixirCPU(m)3.486benchmarks3ElixirCPU(m)3.084benchmarks8RustlerCPU(1)1.714benchmarks_g2RustlerGPU2.563benchmarks_t1RustlerCPU(m)2.723emptyRustler
1.729Rust CPURustCPU(1)2.412Rust OpenCLRustGPU2.186Rust rayonRustCPU(m)2.656

速度向上の恩恵は,Rust よりも Elixirの方が大きいようです。Elixir の方がコア数が増えた時に伸びるということなので,Elixir の方が並列処理でかかる同期・通信や排他制御のオーバーヘッドが少ないのだろうと考えられます。

おわりに

研究費で iMac Pro を購入させていただいたので,これまで以上に Elixir の開発に邁進したいと思います!

次回ですが,「Elixir 1.7.2 でGPU駆動ベンチマークを実行してみた」をお送りします。お楽しみに。

というわけで…

fukuoka_ex.png

fukuoka.ex #13 夏のfukuoka.ex祭=技術のパラダイムシフトは,現在,参加者を募集しています! 私も 「Pythonを捨ててElixirに移行する日」というタイトルで発表します!

广告
将在 10 秒后关闭
bannerAds