「パフォーマンスについて言えば、ZigはCよりも速いです。」 この一文は Zig 言語の公式サイトの詳細な概要に実際に書いてある文章です。 その理由としていくつか挙げた上で最後にちらっと「Zig は SIMD ベクトル型を直接公開しており、移植性の高いベクトル化コードを簡単に記述することができます。」と書いてあります。今回の記事では画像処理っぽいお題を使って実際に SIMD 最適化される様子を検証してみます。 ベンチマーク環境 OS: Ubuntu20.04 on WSL2 on Windows11 CPU: AMD Ryzen 9 5900X 12-Core Processor お題 一般的な画像データ構造の表現である、幅×高さ×4(RGBA)の長さを持つ8bit整数の配列を受け取り、in-placeでRGBの値を 10 加算して明るくするという関数を考えます。Aの値は元のままとします。
![「ZigはCよりも速いです。」をVector/SIMD最適化で検証する](https://cdn-ak-scissors.b.st-hatena.com/image/square/f38dc0c36c1504996e61efdc5d63051a0e5f1526/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--QUQ4v41j--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252580%25258CZig%2525E3%252581%2525AFC%2525E3%252582%252588%2525E3%252582%25258A%2525E3%252582%252582%2525E9%252580%25259F%2525E3%252581%252584%2525E3%252581%2525A7%2525E3%252581%252599%2525E3%252580%252582%2525E3%252580%25258D%2525E3%252582%252592Vector%25252FSIMD%2525E6%25259C%252580%2525E9%252581%2525A9%2525E5%25258C%252596%2525E3%252581%2525A7%2525E6%2525A4%25259C%2525E8%2525A8%2525BC%2525E3%252581%252599%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252581%252593%2525E3%252583%2525BC%2525E3%252581%2525AE%2525E3%252581%252584%2525E3%252581%252591%252Cx_203%252Cy_98%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2hXSTk5UFQ1Y2xNSjNhM3U3TU5TQnN2d21NSkt6VDM2V3B1Y05LRFE9czI1MC1j%252Cr_max%252Cw_90%252Cx_87%252Cy_72%2Fog-base.png)