概要
- StringZilla v4 は初のCUDA対応で、CPUだけでなくGPUでも高速動作を実現
- Levenshtein距離などの動的計画法アルゴリズム のGPU高速化を達成
- 新しいハッシュ関数 やバイオインフォマティクス向けの指紋生成機能を搭載
- Apache 2.0ライセンス で商用利用も無料
- 大規模な情報検索、DB、データレイク、バイオインフォマティクス用途をターゲット
StringZilla v4: CUDA対応SIMDファースト文字列処理ライブラリ
- StringZilla v4 はSIMD最適化文字列処理ライブラリの最新バージョン
- CUDAによるGPUアクセラレーション に初対応、CPUとGPU両方で高速化
- pipでインストール可能なパッケージとして500+ GigaCUPSの編集距離計算性能
- 情報検索、データベース、データレイク、バイオインフォマティクス 向け機能強化
- Apache 2.0 のオープンソースライセンスで商用利用も制限なし
v4新機能一覧
- 非暗号化ハッシュ関数、AESベースの文字列PRNG追加
- DBMSのJOINやORDER BY向けの新しい 交差・ソートアルゴリズム
- Levenshtein距離、Needleman-Wunsch、Smith-Waterman などの文字列類似度計算をGPU/CPUで高速化
- MinHash による大規模情報検索・重複排除のための指紋生成
- Python、Rust、JavaScript、Swift向けの薄いバインディング実装
動的計画法アルゴリズムのGPU並列化
- Levenshtein距離 は$N+1$×$M+1$のマトリクスを逐次的に埋める従来手法が主流
- 行単位ではなく 対角線(アンチダイアゴナル)単位で並列化 することでSIMD/GPUに最適化
- 3本の対角線を管理し、各セルを独立して並列計算
- Cell Updates Per Second(CUPS) で性能評価
- rapidfuzz::levenshtein(CPU): 14,316 MCUPS
- stringzillas::LevenshteinDistances(CPU): 13,084 MCUPS
- stringzillas::LevenshteinDistances(GPU): 624,730 MCUPS
- NLTK(CPU): 2 MCUPS
- Pythonバインディングも極めて薄く、バインディング層での性能劣化が最小限
他ライブラリとの比較
- CuDF は短い入力で高性能だが長い文字列ではGPUコアの活用が不十分
- StringZillaは 1,000バイト文字列で46倍、10,000バイトで109倍 の性能向上
- Nvidia Clara Parabricksなどの商用製品と比較しても優位性あり
バイオインフォマティクス向け拡張
- Levenshtein距離 はDNA配列比較で利用
- ギャップ導入・延長のコストを区別する アフィンギャップペナルティ に対応
- Needleman-Wunsch は可変置換コストを扱い、20種アミノ酸の置換行列を利用
- DP4A/DPX命令 による小整数のSIMD処理で高速化
- 現状では置換行列の格納法に改善余地あり
- 1,000配列長での性能比較
- biopython: 303 MCUPS
- stringzillas-cpus: 276 MCUPS
- stringzillas-cuda: 10,098 MCUPS
新ハッシュ関数設計
- XXH3、MurMurHash、aHash など既存の高速ハッシュ関数を参考
- 設計目標
- 短・長文字列どちらでも 高速
- インクリメンタルハッシュ 対応
- シード値の全ビット反映
- アーキテクチャごとに 動的ディスパッチ
- AVX2、NEON、AVX-512、SVE2 対応
- 64/128ビット出力、SMHasher --extraテスト合格
- AES命令 を活用し、信号混合・並列化
- VAESENC/VAESDECで高速化
- VPSHUFB_Z、VPADDQと組み合わせて演算ポートを分散
- 64バイト超の入力には広いレジスタを活用
- シードは64ビット、Pi定数を多用して均一性向上
- インクリメンタル構築 を考慮し長さ情報の混入タイミングを調整
- バイトごとの重みを均等に保つため、AVX-512のマスクロードやSVE2のプレディケート命令を活用
- x86とArmでAES命令の挙動差異 ありだが、補正により高性能維持
- StringWa.rsベンチマークで他ライブラリと比較
- stringzilla::hash64: 短文1.84 GiB/s、長文11.23 GiB/s
- xxh3::xxh3_64: 短文1.08 GiB/s、長文9.48 GiB/s
- aHash::hash_one: 短文1.23 GiB/s、長文8.61 GiB/s
今後の展望・まとめ
- ROCm(AMD GPU)対応や並列多パターン検索アルゴリズム は今後の課題
- 2024年12月公開予定 だったが遅延、しかし機能面で大きな進化
- 大規模データ処理の 信頼できる高速ベースライン を提供
- 学術・商用・OSSプロジェクト での活用を推奨