バンディング低減MT 高速化版+8
せっかくSkylake-Xがあるので、バンディング低減をAVX512に対応させてみよう、ということで、AVX512を使ったコードにしてみたのだが…。
環境は、こんな感じ。CPUのクロックは固定しないと、測定が安定しなかったので、クロックを完全に4.0GHzに固定してはかっている。
i9 7980XE (18C/36T)
CPU Clock 4.0GHz (Speed Step off, AVX2/AVX512 offset off)
Mesh Clock 3.0GHz
DDR4-3200, 4ch, 16-18-18-38-1
Aviutl 1.00 (スレッド数: 32)
こういう環境で、1080pのフレームをバンディング低減(range=31, mode=1)で256枚処理して、その平均の処理時間をとった。
以前導入した分割ブロックは横8x縦4の32ブロックを各スレッドに分配した。
AVX512にしてもたいして変わらん。
ただ、以前、VC++2017のAVX512のコード生成が怪しい、みたいなことがあって、そのせいかなーと思った。
しょうがないので、gcc 7.2.0でもコンパイルできるようにコードをなおして(結構面倒…)、もう一度測ってみた。
AVX512、やっぱりたいして変わらん。
けど、まあ、VCよりは速くなったし、少しとはいえAVX512のほうが気休め程度速いので、とりあえずこれで。
※今回はAVX512 offsetを切ってるからいいけど、AVX512 offsetが発動してしまうと、AVX512のほうが遅くなってしまう説も…。うーん。
結局のところ、バンディング低減の場合、メモリのランダムアクセスが遅い原因で、別に演算が遅いわけではないので、AVX512にしてもたいして速くならないのかなあ、と思っている。
あと、AVX512の利点として32本になったレジスタというのがあるのだけど、それは64bitプログラムの話で、Aviutlは32bitなプログラムなので、たった8本しか使えない。
そのため、レジスタからあふれた大量の変数をメモリに退避したり、今度はそれをレジスタに戻したり、みたいなコードが大量に出ていて、AVX512のメリットを活かせていないというのも痛い気がする。32本使えれば、あそこまでひどいことにはなるまいに…。
バンディング低減 ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(GDrive)からどうぞ。同じものです。
ソースはこちら
環境は、こんな感じ。CPUのクロックは固定しないと、測定が安定しなかったので、クロックを完全に4.0GHzに固定してはかっている。
i9 7980XE (18C/36T)
CPU Clock 4.0GHz (Speed Step off, AVX2/AVX512 offset off)
Mesh Clock 3.0GHz
DDR4-3200, 4ch, 16-18-18-38-1
Aviutl 1.00 (スレッド数: 32)
こういう環境で、1080pのフレームをバンディング低減(range=31, mode=1)で256枚処理して、その平均の処理時間をとった。
以前導入した分割ブロックは横8x縦4の32ブロックを各スレッドに分配した。
VC2017 (15.5.6) | |
---|---|
avx2 | 0.856 ms |
avx512 | 0.836 ms |
AVX512にしてもたいして変わらん。
ただ、以前、VC++2017のAVX512のコード生成が怪しい、みたいなことがあって、そのせいかなーと思った。
しょうがないので、gcc 7.2.0でもコンパイルできるようにコードをなおして(結構面倒…)、もう一度測ってみた。
VC2017 (15.5.6) | gcc 7.2.0 | |
---|---|---|
avx2 | 0.856 ms | 0.772 ms |
avx512 | 0.836 ms | 0.758 ms |
AVX512、やっぱりたいして変わらん。
けど、まあ、VCよりは速くなったし、少しとはいえAVX512のほうが気休め程度速いので、とりあえずこれで。
※今回はAVX512 offsetを切ってるからいいけど、AVX512 offsetが発動してしまうと、AVX512のほうが遅くなってしまう説も…。うーん。
結局のところ、バンディング低減の場合、メモリのランダムアクセスが遅い原因で、別に演算が遅いわけではないので、AVX512にしてもたいして速くならないのかなあ、と思っている。
あと、AVX512の利点として32本になったレジスタというのがあるのだけど、それは64bitプログラムの話で、Aviutlは32bitなプログラムなので、たった8本しか使えない。
そのため、レジスタからあふれた大量の変数をメモリに退避したり、今度はそれをレジスタに戻したり、みたいなコードが大量に出ていて、AVX512のメリットを活かせていないというのも痛い気がする。32本使えれば、あそこまでひどいことにはなるまいに…。
バンディング低減 ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(GDrive)からどうぞ。同じものです。
ソースはこちら
スポンサーサイト