タグ

2023年2月9日のブックマーク (2件)

  • 高速UTF-8バリデーションの世界 - Qiita

    参照: http://www.unicode.org/versions/Unicode6.0.0/ch03.pdf の "Table 3-7. Well-Formed UTF-8 Byte Sequences" アルゴリズムを理解する上で重要なUTF-8の特徴について述べます。 1コードポイントは1-4バイトのシーケンスで表現される 上位ニブル(1バイト8ビットのうち、上位4ビット)を確認することでシーケンスの情報が得られる そのバイトがシーケンス先頭バイトかどうかわかる もしそれがシーケンス先頭バイトだったなら、何バイトのシーケンスかわかる 先頭でないバイトは基的に0x80..0xBFの範囲が許容されているが、何箇所か例外があるのでそれもバリデーションしなければならない 例外の箇所は表では太字で示した 例えば、表を見て分かるように、先頭バイトが0xE0のとき2バイト目は0xA0..0x

    高速UTF-8バリデーションの世界 - Qiita
  • AVX/AVX2による整数のShuffleとPermute - Qiita

    Zen2,Zen3のメモリからのshuffleはUopsが1です.他は2になります. 説明 floatとは異なり,1つのレジスタの値を,128ビットの壁を超えずにintの整数を並べ替えます. floatの場合のpermute_psと同じ挙動をするため,immによる指定によってXMMとYMMの並びは同じになります. 同様に_MM_SHUFFLEでの指定が便利です. 以下にサンプルコードを示します. void test_shuffle_epi32() { __m256i a, d; a = _mm256_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7); print_m256i_int(a); printf("\n"); d = _mm256_shuffle_epi32(a, _MM_SHUFFLE(3, 2, 1, 0)); print_m256i_int(d); d =

    AVX/AVX2による整数のShuffleとPermute - Qiita