我有一个由大约 800 000 行组成的文件。每行由一个 id、一个代码和数据组成,每个字段由一个 TAB 分隔。
3445 aaaa Some data here for instance
89002 aree Some other data
作为熟悉 OpenCL 的纯粹练习,我决定使用 OpenCL 解析这个文件。每个工作项都经过一行并对其进行处理。每行长度为 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
}
鉴于这CL_DEVICE_MAX_WORK_GROUP_SIZE
是 1024,我不能同时拥有超过 1024 个工作项。我不能将整个文件泵入 GPU 内存(CL_DEVICE_MAX_MEM_ALLOC_SIZE
只有 268353536)。
第一个想法可能是解析第一批 1024 个句子,然后再解析第二个,依此类推,让内核负责处理一个句子。我还可以重写内核,而不是解析一个句子,而是解析 16 个句子,然后 1024 个工作项将处理一些 16384 个句子。
如前所述,我对 OpenCL 很陌生,所以我真的在寻找如何最好地做到这一点的建议。