Chapter 11. MapReduceアルゴリズム

Table of Contents

11.1. 組み込みReductionカーネル

Warning

PyOpenCL組み込み関数はパフォーマンスに問題を抱えており、本書ではOpenCLのバインディング機能で実装することを推奨します。あくまでも読者のご参考のためだけの掲載とお考えください。

MapReduceアルゴリズムはOpenCLにおいては、最も知られたコードパターンだと筆者は考えます。OpenCLを適用したアルゴリズムは何らかの形でMapReduceアルゴリズムを使うため、無意識的または自然にMapReduceの問題を解いていることがあります。

OpenCLの文脈から見たMapReduceは2つのステップからなります。

Mapステップ
元データを分割し並列処理が可能な演算器(並列コア)に処理を配分し、各並列コアが処理を実行します
Reduceステップ
処理結果を集約(必要あれば何らかの出力フォーマット・配列に変換)します

この2つのステップのうち、前者はOpenCLの機能自体として並列計算とそのマップを行うため些細な問題となります。後者はReductionと呼ばれる、GPGPU等の並列演算の中では頻繁に使われるコードパターンとして知られています。

本書では後半の基数整列の章においてスクラッチで組むReductionパターンをご案内しているので、詳細についてはそちらを参照ください。

Copyright 2018-2019, by Masaki Komatsu