約 800,000 行で構成されるファイルがあります。各行は ID、コード、およびデータで構成され、各フィールドはタブで区切られています。
3445 aaaa Some data here for instance
89002 aree Some other data
OpenCL に慣れるための純粋な演習として、OpenCL を使用してこのファイルを解析することにしました。各作業項目は 1 つの行を通過して処理されます。各行の長さは 4000 文字です。
__kernel void parse_line(
__global const char * lines, // IN
__global unsigned * id, // OUT
__global char * code, // OUT
__global char * data // OUT
)
{
// parse the line to extract id, code and data
}
これが 1024 であることを考えるとCL_DEVICE_MAX_WORK_GROUP_SIZE
、同時に 1024 を超える作業項目を持つことはできません。ファイル全体を GPU メモリに送り込むこともできません ( CL_DEVICE_MAX_MEM_ALLOC_SIZE
268353536 しかありません)。
最初のアイデアは、1024 文の最初のバッチを解析し、次に 2 番目のバッチを解析し、1 つの文を処理するタスクをカーネルに保持することです。カーネルを書き換えて、1 つの文を解析する代わりに 16 を解析すると、1024 個の作業項目が 16384 個の文を処理するようになります。
前述のように、私は OpenCL を初めて使用するので、最善の方法についてアドバイスを求めています。