ZEAM開発ログ v.0.3.5 Elixir 1.7.2 でGPU駆動ベンチマークを実行してみた

# はじめに

ZACKYこと山崎進です。ようやく採点の祭典が終わりました。「採点の祭典」って何かって？ 大学教員の間で流行っているキーワードで，成績評価のことです。大人数なので，なかなか大変なのですよ。私の勤務校である北九州市立大学では，お盆直前まで期末試験をやっていて，お盆明けに成績評価を提出するというスケジュールなので，お盆休み返上で成績評価するのです。

[「ZEAM開発ログ 目次」はこちら](https://qiita.com/zacky1972/items/70593ab2b70d192813df)


# インタビューを受けました

forkwell press にてインタビュー記事が掲載されました！

[「何を成したいのか」を、できる限り早く見つける手伝いを。山崎進（北九州市立大学准教授）〜Forkwellエンジニア成分研究所](https://press.forkwell.com/entry/2018/08/16/090000)

[![ZACKY-3000.jpg](https://qiita-image-store.s3.amazonaws.com/0/55223/71bba474-9274-ce32-eee7-20dabfb6baad.jpeg)](https://press.forkwell.com/entry/2018/08/16/090000)

Personal Vision Co-Creator への想いが色濃く現れる記事の仕上がりになりました。

# さて本題

今回は Elixir 1.7.2 がリリースされたので，さっそくインストールして GPU 駆動ベンチマークを実行してみました。結論からいうと，ソースコードを変更することなく実行可能で，実行時間に大差はないです。

# 使用した機材の仕様

## 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は標準構成です。

# ベンチマーク結果

Elixir 1.7.2 での実行結果です。

## Mac Pro (Mid 2010)

```bash
$ 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|


## iMac Pro (2017)

```bash
$ 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|

速度変化は誤差の範囲内ではないかと思います。

# おわりに

iMac Pro での Elixir のコンパイルは凄まじく速かったです！

Elixir 1.7.2 を使用してみましたが，ソースコードを特に変更する必要はなかったです。ベンチマークの実行速度の差はほぼ誤差の範疇でした。

次回は[「ZEAM開発ログ v.0.3.6 Mac Pro (Mid 2010) をグレードアップしてGPU駆動ベンチマークを実行してみた」](https://qiita.com/zacky1972/items/8a65e3190590287b7526)をお送りします。

というわけで...

[![fukuoka_ex.png](https://qiita-image-store.s3.amazonaws.com/0/55223/7b8e1994-fc90-8f73-54aa-a3108e05b3e5.png)](https://fukuokaex.connpass.com/event/89472/)

[fukuoka.ex #13　夏のfukuoka.ex祭＝技術のパラダイムシフト](https://fukuokaex.connpass.com/event/89472/)は，現在，参加者を募集しています！ 私も 「Pythonを捨ててElixirに移行する日」というタイトルで発表します！