我在理解如何或是否可以在 gpu 和 cpu 之间分担工作负载时遇到了一些问题。我有一个大日志文件,我需要读取每一行然后运行大约 500 万次操作(测试各种场景)。我目前的方法是读取几百行,将其添加到数组中,然后将其发送到每个 GPU,这工作正常,但因为每行工作量很大,而且行数很多,所以需要很长时间。我注意到,虽然这正在发生,但我的 CPU 内核基本上什么也没做。我正在使用 EC2,所以我有 2 个四核 Xeon 和 2 个 Tesla GPU,一个 cpu 核心读取文件(运行主程序)并且 GPU 完成工作,所以我想知道如何或可以做些什么来参与其他 7 个核心进入进程?
我对如何设计一个程序来平衡 GPU/CPU 之间的任务感到有点困惑,因为它们都会在不同的时间完成工作,所以我不能同时将它发送给他们。我考虑过设置一个队列(我是 c 新手,所以不确定这是否可能)但是有没有办法知道 GPU 作业何时完成(因为我认为向 Cuda 发送作业是异步的)?I 内核与普通的 c 函数非常相似,因此将其转换为 cpu 使用不是问题,只是平衡工作似乎是问题。我再次浏览了“Cuda by example”,但实际上找不到任何涉及这种平衡的东西。
任何建议都会很棒。