2023/08/23 グラフ修正
ZEN3世代のTR5995WXがZEN2世代の3990X(PROなら3995WX)からどのくらい性能が向上しているのかを調べるため、fastqのマッピングにかかる時間を比較する簡単なベンチマークを行いました。使用したのは線虫の全ゲノムショートリードシークエンシングデータで、bwa mem1を使って線虫のリファレンスゲノムアセンブリに全てのリードがマッピングされるまでにかかった時間をそれぞれの計算機で測定するだけの単純なものです。bwaのversion 0.7.17を使用しています。OSやCPU以外のPCパーツは揃ってないので、純粋にどこまでCPUの性能差が見えているのかは不明ですが、実行時間の参考にはなると考えて行っています。詳細は下の方で説明しています。
結果が図1です。凡例にある8種類のCPUを使用しています。使用スレッド数によって時間は変わり、1スレッドでは比較した中で最も世代が新しいRyzen 7700X(青色、2022年発売)が最速で(7700Xはwindows 11のWSL環境で測定)、次点で5950X(緑色、、2020年11月発売)と5995WX(赤色)が早く終わりました。ZEN3に続いて、ZEN2世代の3990X(黄土色、2020年2月発売)が早く終わりました。それに続いてXeon v.4の2680(黒色、2016年発売)となり、最も遅いのは、比較中で最も世代が古いxeon E5 v2 2690dual(ピンク色、2013年発売)でした。xeon E5 v2 2690dualと7700Xとの差は2.1倍~2.5倍ほどでした。この傾向は使用スレッドを増やしていって10スレッド付近までは変わりませんが、8コア16スレッドの7700Xが不在になった20スレッドを超えたくらいからは、5995WXが最も短時間でマッピングを終えて最速となりました。20スレッド指定時は、3990Xより5950Xが早くマッピングを終えていますが、5950Xは5995WXには負けていました。同じZEN3世代でも5950Xは物理16コアしかないためと考えられます。
Macに目を向けると、Macmini 2018モデルのcore i7 8700B(6コア12スレッド)は、1-6スレッドでは3990Xと同程度のマッピング時間でした。さらにスレッド数を上げると3990Xより顕著に遅くなりました。
2022年発売のMacStudioのM1max(水色)は、1スレッドでは3990Xの0.8倍程度の時間でマッピングを終えました。しかしより新しいzen3世代の5950Xと5995WXと比べると、1.1倍前後のマッピング時間がかかりました(native環境の結果)。M1maxは、ネイティブ環境で使えばZEN2.5くらいの性能があると言えます。M1maxのランタイムとスレッド指定値を比較した時の特徴として、8スレッドと比較して10、12スレッド指定時の時間短縮効果が鈍化している点が挙げられます。M1maxには8個の高性能コアと、バックグラウンドタスクのための2コアの省電力コアが搭載されており、8スレッドまでは高性能コアが優先して使用され、10スレッド指定時は省電力コアも使用されたからと推測されます(12は飽和値指定した時の影響を見るため)。また、それぞれのCPUで最大スレッド+αの指定値では、時間短縮が見られなくなって、実行時間が増加する傾向が見えています(例;ピンクのxeon E4 v3 2690 dual)。これは物理CPU数以上の使用スレッドを指定したことやハイパースレッディングの影響が出たからと考えられます。最大64スレッドまでしか測定していないためか、3990Xと5995WXではこの現象が観察されていません。
図1BWA MEM1のマッピング時間。線虫ゲノムアセンブリにゲノムサイズの55xのデプスのショートリードをマッピングし、完了するまでの時間を測定した。それぞれ5回測定。結果は安定していたため、エラーバーは無しで平均値をプロット。グラフの縦軸は実行時間(秒)、横軸はBWA MEM1の指定スレッド数。プロット間の直線はフィッティング結果ではなく、プロット間を単純に直線で結んだもの。
図1のカーブは冪乗分布に見えるので、図1のデータの両軸を対数変換して、最小二乗法で近似直線をプロットし、フィッティングするか確認しました(method="lm")。結果が以下です。
図2BWA MEM1のマッピング時間のlog-logプロット。グラフの縦軸はlog10時間(秒)、横軸はlog10指定スレッド数。凡例は図1と同じ。
(注;直線の傾きはプログラムの並列化効率とCPUの特性によって決まるので、本来このようなプロットは、1つの計算機で複数のマッパー間の並列化効率を比較するのに適していると思われる)
傾向は無論図1と変わりませんが、使用スレッドを増やした時、64コアある3990Xと5995WXが安定してマッピング時間が短くなっていく結果が見えています。直線の間隔から、5995WXと3990Xの差は3990Xとxeon E5 v4 2680dualの差ほど著しいわけではないものの、ZEN2からZEN3に更新された効果はそれなりにあることが確認できます。
グラフの細かい部分に目を向けると、使用スレッド数が小さい時は回帰直線によく乗っていますが、スレッド数の上限値近くまで指定すると、直線からの乖離が大きくなっていることが分かります。この傾向は3990Xと5995WXでも同様で、物理64コアあるにも関わらず、56スレッド、64スレッドまで増やすと直線からのばらつきが大きくなっています。bwa memの並列処理のボトルネックが発生しているのかもしれません。また、ほとんどのCPUの直線の傾きが同じことから、bwa memのマッピングに関しては、IntelとAMD、appleの各年代のCPUは、ものすごく大雑把に言うと同じ並列処理特性があると言えます。
以上、5995WXが順当に高速化していて、ショットガンシークエンシングのデータ解析でも十分活躍するだろうことが分かりました。実際のマッピング時間は下に掲載しています。興味がある方は確認して下さい。
雑感(misc)
bwa以外にターミナルでgeekbenchベンチマークを走らせたりしています。geekbenchのCLI環境のgeekbenchベンチマークでは、計測後に自動でデータが送信されます。5995WXの計算機でgeekbench5をラン後、geekbench5ランキングページを見てみると、何と既にZEN4世代の7995WX PROのマルチコアスコアが登録されている事に気づきました。スコアは81400となっており、5995WXの平均42000と比べると倍近いスコアです(3990Xは35000くらい)。Zen4はZen3と比較してIPCの増加とクロックの増加で30%近く性能が伸びていると言われていますが、コア数増加分の96/64=1.5もかけると、42000*1.3*1.5=81900となり、現在公開されているスコアは順当な値に見えます(GeekbenchのCPUベンチが何を測定しているかイマイチ分かりませんので、偶然の一致かも)。コア数が増えれば、解析したいシークエンシングデータが何百や何千個もある人は単純な並列処理で確実に高速化できます。秋くらいと言われる7995WXの発表が楽しみですね*1。
方法
ベンチマーク時のハードウエア設定
5995WX測定時の部屋の温度は30度。他は春に測定したデータのため不明。他のジョブは実行しない。再起動して10分後に測定開始。
使用したデータ
C. elegans(ゲノムサイズ100.3Mb)の150bpx2ペアエンドシークエンシングデータ; SRR9925849 (link) を使用した。ファイルサイズはgzip圧縮で3.5GB x 2。累積リード長は27,370,205 x 2。55xデプスに相当。
測定方法
計測には Rustのhyperfine(紹介)を使用。bwaのマッピングタイムを1,2,4,6,8スレッドでそれぞれ5回測定する時は以下の通り。
#indexing
bwa index -a is ref.fna
#bwa mapping (benchmark)
for cpu in 1 2 4 6 8
do
hyperfine -r 5 "bwa mem -t $cpu ref.fna SRR9925849_1.fq.gz SRR9925849_2.fq.gz 1> /dev/null 2> ${cpu}errorlog" > --export-csv bwa_${cpu}.csv
done
sam書き出しがボトルネックにならないように標準出力は/dev/nullに捨てる。終わると平均タイム、最大タイム、最小タイムがまとめられる。
使用したプログラム
bwaのv0.7.17を使用。M1max chipのmacstudioは、https://github.com/smikkelsendk/bwa-for-arm/tree/master/binのbwa0717-mac-aarch64.tar.gzを使用。
使用した計算機
1、TR5995WX自作(まだ調整中)
- CPU: TR5995WX (合計128スレッド)
- CPUクーラー: Toughliquid 360 argb trx40 edition
- memory: DDR4 2400MHz 8GB x 8 (合計64 GB)*3
- GPU: GTX1080
- motherboard: wrx80 creator(ASRock)
- storage: Hanye SSD 2TB PCIe Gen4x4 M.2 NVMe 2280
- PCケース: Fractal Design Define 7 XL
- OS: ubuntu22.04LTS
2、Ryzen7700X自作
- CPU: Ryzen7700x 8コア (合計16スレッド)
- CPUクーラー: unknown(280mmラジエータ付き簡易水冷)
- memory: DDR5 5600MHz 16B x 4 (合計64 GB)
- GPU: GTX660Ti
- motherboard: MPG B550 GAMING PLUS(MSI)
- storage: Crucial M2 SSD 1TB x1
- PCケース: Fractal Design Define R6
- OS: windows11 (WSL2上のubuntu20.04環境)
3、Ryzen5950x自作
- CPU: Ryzen5950x 16コア (合計32スレッド)
- CPUクーラー: TH360 ARGB Sync Snow Edition
- memory: DDR4 3600MHz (CL16) 16B x 4 (合計64 GB)
- GPU: GTX660Ti
- motherboard: MPG B550 GAMING PLUS(MSI)
- storage: Crucial M2 SSD 1TB x1
- PCケース: Fractal Design Define R6
- OS: ubuntu20.04LTS
4、TR3990x自作機
- CPU: Ryzen Threadripper 3990X 64コア (合計128スレッド)
- CPUクーラー: ROG RYUJIN 360
- memory: DDR4 3000MHz 32GB x 8(合計256 GB)
- GPU: GTX 1600
- motherboard: TRX40 Taichi
- storage: Crucial M2 SSD 1TB
- PCケース: Thermaltake Core V51
- OS: ubuntu18.04LTS
5、Mac Studio 2022下位
- CPU: M1 MAX (SoC) (合計10コア10スレッド)
- memory: 32GB LPDDR5-6400 (*1) (SoC)
- GPU: M1 MAX 24コア (SoC)
- system: drive: SSD 512 GB
- OS: macOS Monterey 12.4
6、mac mini 2018上位
- CPU: core i7 8700B 6コア (合計12スレッド)
- memory: DDR4 2667MHz 16GB x 2 (合計32 GB)
- GPU: CPU内蔵グラフィック
- storage: M.2 SSD 512 GB
- OS: OSX mojave
7、MousePro
- CPU: xeon E5 2680 v4 2.4 GHz/14コア x 2 (合計56スレッド)
- memory: DDR4 ECC Registered 64GB x 8(合計512 GB)
- GPU: quadroK620
- system: drive: SATA3 SSD:1TB x2 (RAID0)
- OS: ubuntu18.04LTS
- CPU: xeon E5 2690 v2 3.0 GHz/10コア x 2 (合計40スレッド)
- memory: DDR4 ECC Registered 8GB x 8(合計64 GB)
- GPU: unknown
- system: drive: SATA3 SSD
- OS: ubuntu20.04LTS
*1 シークエンシングデータをそれほどたくさん持っている人は少ないと思うかもしれませんが、自分の周りでも何百個もバクテリアを読んだり数千のRNA-seq の生データをダウンロードして解析したり、メタゲノムを膨大な数読んだりと言った研究は聞きます。データの爆発的増加はシークエンスコストの低下と手法の発展と研究の多様化によって珍しくなくなってきつつあると感じます。そのような時に、一次データ解析、すなわちデータを分析することができるまでの下準備をどれだけ短時間で完了できるかは重要な課題であり続けると考えています(例;メタゲノムのfastq 1000個の一次解析にはワークステーション1つだと頑張っても1ヶ月はかかる。その間は頭でやり方を考えるのみで何もできない)。
*2 ラージゲノムを扱う人はラボのクラスタ環境やスパコン利用申請、商用のクラウドサービスを使うかもしれませんが、ゲノムサイズが小さい生き物の研究では、主に資金的な理由でワークステーションクラスの計算機を使うことが多いと思います。頑張って自作クラスタを作っているすごい方も聞きますが、今や汎用パーツでも値段はそこまで安くならないんじゃないでしょうか。ThreadripperはそのためのCPUです(クラスタならEPYC)。
*3 以前からWSL環境ではI/Oが遅いという話があって、以前WSL2環境でマッピングのベンチマークを行った時も、この現象が確認されています。今回のベンチマークでは、ディスクへの書き出しはしていませんので、sam書き出しをした時にWin11のWSL環境で行った7700Xのマッピング速度がどのくらい影響を受けるかは分かりません。
図1のデータ
CPU | Thread | Time | S.D |
M1 max | 1 | 2387.9 | 17.6 |
M1 max | 2 | 1236.3 | 8.7 |
M1 max | 4 | 657.6 | 2.4 |
M1 max | 6 | 454.7 | 1.8 |
M1 max | 8 | 368.4 | 6.1 |
M1 max | 10 | 353.8 | 11.5 |
M1 max | 12 | 347.1 | 1.4 |
xeon E5 v4 2680dual | 1 | 3906.8 | 66.5 |
xeon E5 v4 2680dual | 2 | 2146.2 | 38.7 |
xeon E5 v4 2680dual | 4 | 1092.6 | 6.3 |
xeon E5 v4 2680dual | 6 | 762.2 | 6.1 |
xeon E5 v4 2680dual | 8 | 592.7 | 1.4 |
xeon E5 v4 2680dual | 10 | 482.7 | 3.2 |
xeon E5 v4 2680dual | 12 | 411.0 | 2.5 |
xeon E5 v4 2680dual | 16 | 327.9 | 0.9 |
xeon E5 v4 2680dual | 20 | 283.3 | 0.9 |
xeon E5 v4 2680dual | 24 | 256.4 | 2.3 |
xeon E5 v4 2680dual | 28 | 232.2 | 3.8 |
xeon E5 v4 2680dual | 32 | 217.4 | 1.3 |
xeon E5 v4 2680dual | 40 | NA | |
xeon E5 v4 2680dual | 48 | NA | |
3990X | 1 | 2801.9 | 24.1 |
3990X | 2 | 1534.8 | 13.5 |
3990X | 4 | 820.9 | 7.2 |
3990X | 6 | 571.2 | 4.410 |
3990X | 8 | 455.9 | 2.7 |
3990X | 10 | 374.7 | 3.9 |
3990X | 12 | 314.3 | 0.2 |
3990X | 16 | 247.5 | 0.3 |
3990X | 20 | 204.1 | 0.3 |
3990X | 24 | 176.3 | 0.5 |
3990X | 28 | 156.1 | 0.4 |
3990X | 32 | 141.1 | 0.2 |
3990X | 40 | 123.8 | 0.2 |
3990X | 48 | 112.0 | 0.2 |
3990X | 56 | 108.3 | 0.1 |
3990X | 64 | 103.4 | 1.5 |
xeon E5 v2 2690dual | 1 | 4444.9 | 30.9 |
xeon E5 v2 2690dual | 2 | 2326.8 | 3.1 |
xeon E5 v2 2690dual | 4 | 1247.1 | 2.3 |
xeon E5 v2 2690dual | 6 | 866.1 | 1.6 |
xeon E5 v2 2690dual | 8 | 665.3 | 3.3 |
xeon E5 v2 2690dual | 10 | 541.3 | 2.5 |
xeon E5 v2 2690dual | 12 | 476.2 | 1.6 |
xeon E5 v2 2690dual | 16 | 385.6 | 0.6 |
xeon E5 v2 2690dual | 20 | 334.0 | 1.6 |
xeon E5 v2 2690dual | 24 | 305.2 | 1.2 |
xeon E5 v2 2690dual | 28 | 284.7 | 1.7 |
xeon E5 v2 2690dual | 32 | 271.5 | 0.7 |
xeon E5 v2 2690dual | 40 | 268.9 | 2.4 |
xeon E5 v2 2690dual | 48 | 292.5 | 3.1 |
5950X | 1 | 2126.4 | 40.7 |
5950X | 2 | 1175.1 | 2.4 |
5950X | 4 | 609.0 | 1.5 |
5950X | 6 | 415.7 | 1.1 |
5950X | 8 | 320.5 | 0.6 |
5950X | 10 | 265.6 | 0.8 |
5950X | 12 | 231.4 | 0.9 |
5950X | 16 | 184.2 | 0.6 |
5950X | 20 | 174.0 | 0.6 |
5950X | 24 | 163.2 | 0.3 |
5950X | 28 | 154.6 | 0.4 |
5950X | 32 | 152.3 | 0.3 |
5950X | 40 | 162.6 | 0.4 |
Ryzen 7700X | 1 | 1844.5 | 23.7 |
Ryzen 7700X | 2 | 1016.6 | 34.2 |
Ryzen 7700X | 4 | 536.0 | 2.0 |
Ryzen 7700X | 6 | 377.4 | 2.2 |
Ryzen 7700X | 8 | 305.9 | 0.4 |
Ryzen 7700X | 10 | 268.8 | 1.4 |
Ryzen 7700X | 12 | 237.2 | 0.6 |
Ryzen 7700X | 16 | 212.3 | 0.2 |
5995WX | 1 | 2235.6 | 10.7 |
5995WX | 2 | 1206.2 | 15.4 |
5995WX | 4 | 672.7 | 2.3 |
5995WX | 6 | 490.6 | 1.9 |
5995WX | 8 | 387.9 | 1.9 |
5995WX | 10 | 313.8 | 2.1 |
5995WX | 12 | 263.8 | 1.1 |
5995WX | 16 | 203.4 | 0.6 |
5995WX | 20 | 165.4 | 1.0 |
5995WX | 24 | 141.0 | 0.4 |
5995WX | 28 | 122.7 | 0.3 |
5995WX | 32 | 109.1 | 0.4 |
5995WX | 40 | 93.1 | 0.4 |
5995WX | 48 | 83.2 | 0.4 |
5995WX | 56 | 79.7 | 0.3 |
5995WX | 64 | 75.1 | 0.6 |