gpt4 book ai didi

c++ - 并行化这个的最好方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:04:01 25 4
gpt4 key购买 nike

我有一个由大约 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 还很陌生,所以我真的在寻找有关如何最好地做到这一点的建议。

最佳答案

OpenCL 不会是我处理文本的首选。但是,可能存在一些有意义的问题。你能把整个算法分解成几个步骤,看看瓶颈是什么(你打算在解析文件后对数据做任何事情吗?)?将这些字符串移动到各种总线上以便稍后减少可能不是最佳选择。尽早减少它们。看起来你甚至没有减少它们,只是拆分流,但将数据保留为字符串?

如果解析和转换值确实是瓶颈,那么我会建议您继续将大文件分解成适合内存的 block 的实验。

关于c++ - 并行化这个的最好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com