![](https://cdn-ak-scissors.b.st-hatena.com/image/square/0d1bcb5a4a76ca19273a8bb42cd1a934e68830b7/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QVZYLTUxMiVFMyU4MSVBNyVFMyU4MiU4NCVFMyU4MiU4MCVFMyU4MSVBQSVFMyU4MSU4Rm1pbiUyRm1heCVFNiVCQyU5NCVFNyVBRSU5NyVFMyU4MSVBRSVFNCVCQiVBMyVFNiU5QiVCRiVFNSVBRSU5RiVFOCVBMyU4NSVFMyU4MiU5MiVFNCVCRCU5QyVFMyU4MiU4QiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZjhiMjI2MjI2YjY0ZjU2ZjdlMTQ0YjRlMjgwYzBmNTg%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBzYWthMV9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0wMWVhYTg4Zjc1NGE0OGUwMDgwNzJmMzNmMjdhZjNkMg%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-IOODieODr-ODs-OCtA%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%2523212121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3D8db9c3946459da3f8dd5d68b4f622888)
エントリーの編集
![loading...](https://b.st-hatena.com/bdefb8944296a0957e54cebcfefc25c4dcff9f5f/images/v4/public/common/loading@2x.gif)
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
AVX-512でやむなくmin/max演算の代替実装を作る - Qiita
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
![アプリのスクリーンショット](https://b.st-hatena.com/bdefb8944296a0957e54cebcfefc25c4dcff9f5f/images/v4/public/entry/app-screenshot.png)
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
AVX-512でやむなくmin/max演算の代替実装を作る - Qiita
非常にニッチな実装の話題ですが先日必要になったのでメモ書き程度に。 ベクトルの各要素に対して8bit要... 非常にニッチな実装の話題ですが先日必要になったのでメモ書き程度に。 ベクトルの各要素に対して8bit要素のmin/maxを計算したい場合、専用のmin/max命令( vpminub / vpmaxub など)を使うのが普通だと思います。 void f(__m512i x, __m512i y, __m512i &result) { result = _mm512_min_epu8(x, y); } ほとんどの場合はこれで十分なはずです。 素直な解法で発生した問題点 上記の専用命令は非常に高速ですが、強いて言うなら命令レベルの並列性がないという問題があります。Agner fogのInstruction tablesによると、vpmin/max系の命令はレイテンシ1、スループット1、実行portは0のみのようだと伺えます。 つまり、min/maxを大量に行う場合は、ここが性能上のボトルネックに