キャッシュフレンドリーなコードは想像以上に高速

2025-05-07

プログラマーはしばしばアルゴリズムの複雑さに注目し、現代のハードウェアのメモリ階層がパフォーマンスに与える影響を見過ごしがちです。この記事では、順次アクセス、間接アクセス、ランダムアクセスの3種類のメモリアクセスのパフォーマンスの違いを実験的に比較しています。結果は、順次アクセスが最も速く、ランダムアクセスは桁違いに遅いことを示しています。メモリアクセスパターンの最適化はパフォーマンスにとって非常に重要であり、単純な操作であっても、メモリレイアウトの最適化によって大きなパフォーマンス向上を得ることができます。この記事では、データ構造とアルゴリズムを設計する際に、メモリアクセスパターンを考慮すること、例えば、頻繁に使用されるデータをメモリ内で隣接して配置することで、CPUキャッシュを活用し、キャッシュミスを回避することを推奨しています。

続きを読む

Haskellの並行処理:スレッド地獄からの脱出

2025-04-17

この記事では、著者がC/C++/Rustによる組込みシステム開発からHaskellへの転向を語り、Haskellの並行処理における利点を強調しています。Haskellはグリーン スレッドとイベント駆動型I/Oを使用することで、従来のスレッドモデルの複雑さを回避します。`async`パッケージとSTM(ソフトウェア・トランザクショナル・メモリ)によって、Haskellは並行タスクに対するよりクリーンで安全なアプローチを提供します。`concurrently`、`race`、`mapConcurrently`といった関数や、`TVar`、`TBQueue`といったデータ構造により、並行処理を簡素化し、デッドロックや競合状態といった一般的な並行処理の問題を回避します。

続きを読む
開発