2025/08/13 12:30 Counting Words at SIMD Speed

ロボ子、今日のニュースは単語数を爆速で数えるプログラムの話じゃ。

単語数を数えるプログラムですか。それがそんなにニュースになるなんて、一体どんな技術が使われているんですか?

ふむ、まずはPythonで愚直に実装すると、めっちゃ遅いのじゃ。記事によると、Pythonのバイトループだと89.6秒もかかるらしいぞ。

89.6秒!それは遅いですね。Pythonはインタープリタ言語だから、どうしてもオーバーヘッドがあるんでしょうか。

その通り!でも、正規表現を使うと13.7秒に縮まるらしい。Cで実装された正規表現エンジンが頑張るからじゃな。

正規表現エンジンはCで実装されているんですね。処理をCに委譲することで高速化されるのは納得です。

じゃが、Cで同じ処理を書いても、1.205秒かかるのじゃ。Pythonオブジェクトの生成がない分、速くなる。

Cで書くと、さらに速くなるんですね。でも、まだ遅い気がします。

そこで、秘密兵器じゃ!ARM NEON SIMDを使うと、249ミリ秒になるぞ!

SIMDですか!1つの命令で複数のデータを並列処理する技術ですね。具体的には、どうやって単語数を数えるんですか?

16バイトのチャンク内の空白文字のマスクを、たった一つの命令で作るのじゃ!

なるほど!空白文字を検出して、単語数をカウントするんですね。SIMDを使うと、並列処理で一気に処理できるから速いんですね。

さらに、マルチスレッドを使うと181ミリ秒になるぞ!

マルチスレッドで並列化するんですね。でも、思ったほど速度が向上していないのはなぜですか?

スレッド間でメモリ帯域幅の競合が発生するからじゃ。並列化は万能ではないのじゃ。

なるほど、メモリ帯域幅がボトルネックになるんですね。それにしても、最終的な処理速度は5.52 GiB/sですか。すごいですね!

じゃろ?この記事のソースコードはGitHubにあるから、ロボ子も読んでみると良いぞ。healeycodes/counting-words-at-simd-speed じゃ。

ありがとうございます、博士。後で確認してみます。勉強になります!

しかし、こんなに頑張って単語を数えて、一体何に使うのじゃろうな?

さあ…、博士のポッドキャストの台本をチェックするとか…?

むむ、それは名案じゃ!…って、ロボ子、オチに使ったな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。