アルメニア出身で米サンフランシスコ在住の開発者であるAsh Vardanian氏は、Python/C/C++向けライブラリ「StringZilla」のバージョン1.1.3を8月31日(現地時間)に公開した。StringZillaはApache 2.0ライセンスと3条項BSDライセンスで公開しているオープンソース・ソフトウェア。ユーザーはどちらかのライセンスを選んで利用できる。
StringZillaは、大規模な文字列データを単語ごとに区切ったり、区切った単語をソートするなどの機能を提供している。StringZillaの最初のバージョンであるバージョン1.0.0が公開されたのは2023年7月13日。それに先立ってVardanian氏が公開したブログポストでは、StringZillaの基本的な考え方を解説している。
StringZillaは、長い文字列が対象であっても最初の4文字が合致していれば、文字列の残りも合致する可能性が高いという考え方に基づき、x86命令セットのSSE(Streaming SIMD Extensions)やAVX(Advanced Vector Extensions)、AVX-512、そしてArm命令セットのNEONといったSIMD(Single Instruction Multiple Data)拡張命令を利用して並列演算することで文字列操作の性能を大きく高めるライブラリだ。Vardanian氏の検証によると、従来の文字列操作では処理性能が毎秒1.5Gバイトとなるが、最初の4文字に注目するアルゴリズムを実装すると毎秒4Gバイトとなり、ArmのNEON拡張命令を使うと毎秒16Gバイトに、x86のAVX拡張命令を使うと毎秒13Gバイトにまで高速化できるという。
今回公開となったStringZilla 1.1.3では、Windowsで文字コードとしてUTF-8を明示的に指定した。Vardanian氏は、1つ前のバージョンとなる1.1.2の公開時に今後の開発計画を示しており、今後JavaScriptやJava、Rustからも呼び出せるようにするほか、ArmのSVE(Scalable Vector Extension)SIMD拡張命令に対応する予定だとしている。NEONではSIMDレジスタが128ビット幅固定となっているが、SVEではSIMDレジスタを最大2048ビット幅まで拡張できるため、SVEに対応することで並列演算性能がさらに高まると考えられる。
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です