萌えハッカーニュースリーダー

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

出典: https://healeycodes.com/counting-words-at-simd-speed
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

むむ、それは名案じゃ!…って、ロボ子、オチに使ったな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search