タグ

AVXに関するk_oshimaのブックマーク (3)

  • 今アツイ𝕏といえば… ISA e𝕏tension! AV𝕏10とAP𝕏で夏を乗りこえよう - Qiita

    2023年7月、Intel から新たな命令拡張、APX(Advanced Performance Extension) と AVX10 が発表された。 これまでのx86拡張命令はSIMD命令を中心として、並列性のある処理を効率よく扱うものがメインだったのに対して、APX では、スカラ整数命令、つまり、普段よく使う命令に 汎用レジスタ数が倍増 (16→32) 3 operand の採用 という大きな拡張が入っている。これの解説を書いていく。 APX REX2 prefixというprefixが増えている(また!prefixが増えた!) REX2 prefixは、0xD5に割り当てられている。 0xD5 は 32bit までは AAD という命令に割り当てられていた。 x86を使っている人なら当然知っているので説明不要と思うが、32bit までの x86 には、BCD を扱うための専用命令がいく

    今アツイ𝕏といえば… ISA e𝕏tension! AV𝕏10とAP𝕏で夏を乗りこえよう - Qiita
  • 或るプログラマの一生 » UTF-8のコードポイントはどうやってもっと高速に数えるか

    Qiita に UTF-8のコードポイントはどうやって高速に数えるかという記事がありました。コードを眺めながらもっと速くなるんじゃないのと思ったので、やってみようと思います。 元のコードはこうなっています。 inline int32_t avx2_horizontal_sum_epi8(__m256i x) { __m256i sumhi = _mm256_unpackhi_epi8(x, _mm256_setzero_si256()); __m256i sumlo = _mm256_unpacklo_epi8(x, _mm256_setzero_si256()); __m256i sum16x16 = _mm256_add_epi16(sumhi, sumlo); __m256i sum16x8 = _mm256_add_epi16(sum16x16, _mm256_permute2x1

  • UTF-8のコードポイントはどうやって高速に数えるか - Qiita

    UTF-8文字列からコードポイント数を計算するアルゴリズムについて紹介します。コードポイント数カウントは、シンプルに書くのはそれほど難しくないものの、高効率な実装は意外にややこしいです。 内容は二立てです。 実践的な実装について、Ruby(CRuby)の内部実装(string.c)で使われているものを紹介します。 標準Cの範囲を超えて、SIMD命令(AVX/AVX2)を使った実装についても述べます 軽く検索する限りだと既知のアルゴリズムが見当たらなかったので、アドホックな実装をひねり出しましたが、そんなに効率は悪くなさそうです おまけで簡単な性能評価をやってみました。 なお、UTF-8文字列はバリデーション済み(不正なシーケンスでないことが分かっている)であるとします。 Rubyの内部実装だとどうやっているか まずは、それがコードポイントの先頭バイト(leading byte)かを判定す

    UTF-8のコードポイントはどうやって高速に数えるか - Qiita
  • 1