gpt4 book ai didi

cuda - 是否可以在 GPU 和 CPU 之间拆分 Cuda 作业?

转载 作者:行者123 更新时间:2023-12-02 05:17:03 26 4
gpt4 key购买 nike

我在理解如何或是否可以在 GPU 和 CPU 之间共享工作负载时遇到了一些问题。我有一个很大的日志文件,我需要读取每一行,然后运行大约 500 万次操作(测试各种场景)。我当前的方法是读取几百行,将其添加到数组中,然后将其发送到每个 GPU,这工作正常,但由于每行有太多工作,而且行太多,因此需要很长时间。我注意到,当这种情况发生时,我的 CPU 核心基本上什么也没做。我正在使用 EC2,所以我有 2 个四核 Xeon 和 2 个 Tesla GPU,一个 cpu 核心读取文件(运行主程序),GPU 完成工作,所以我想知道如何或可以做什么来涉及其他7个核心进入进程?

我对如何设计一个程序来平衡 GPU/CPU 之间的任务感到有点困惑,因为它们都会在不同的时间完成作业,所以我不能同时将其发送给它们。我考虑过设置一个队列(我是 c 的新手,所以不确定这是否可能),但是有没有办法知道 GPU 作业何时完成(因为我认为将作业发送到 Cuda 是异步的)?我的内核与普通的 c 函数非常相似,因此将其转换为 CPU 使用情况不是问题,只是平衡工作似乎是问题。我再次浏览了“Cuda 示例”,但找不到任何涉及这种类型平衡的内容。

任何建议都会很棒。

最佳答案

我认为关键是创建一个多线程应用程序,遵循所有常见的做法,并有两种类型的工作线程。一种与 GPU 配合使用,另一种与 CPU 配合使用。所以基本上,您将需要一个线程池和一个队列。

http://en.wikipedia.org/wiki/Thread_pool_pattern

队列可以非常简单。您可以拥有一个共享整数,它是日志文件中当前行的索引。当线程准备好检索更多工作时,它会锁定该索引,从日志文件中获取一定数量的行(从索引指定的行开始),然后按检索到的行数增加索引,然后解锁.

当工作线程处理完日志文件的一个 block 时,它将其结果发送回主线程并获取另一个 block (如果没有更多行要处理,则退出)。

该应用启动 GPU 和 CPU 工作线程的某种组合,以利用所有可用的 GPU 和 CPU 核心。

您可能遇到的一个问题是,如果 CPU 繁忙,GPU 的性能可能会受到影响,因为提交新工作或 GPU 处理结果时会出现轻微延迟。您可能需要尝试线程的数量及其关联性。例如,您可能需要通过操纵线程亲和性为每个 GPU 保留一个 CPU 核心。

关于cuda - 是否可以在 GPU 和 CPU 之间拆分 Cuda 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10863907/

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