繁体   English   中英

使用 pthreads 和 CUDA - 设计问题

[英]Using pthreads with CUDA - design questions

我正在编写一些需要一些磁盘 I/O 的代码,并调用我编写的一个库,该库执行一些计算和 GPU 工作,然后更多的磁盘 I/O 将结果写回文件。

我想将其创建为多线程代码,因为文件非常大。 我希望能够读取文件的一部分,将其发送到 GPU 库,然后将一部分写回文件。 所涉及的磁盘 I/O 相当大(如 10GB),并且在 GPU 上的计算速度相当快。

我的问题更像是一个设计问题。 我是否应该使用单独的线程来预加载进入 GPU 库的数据,并且只有主线程实际执行对 GPU 库的调用,然后将结果数据发送到其他线程以写回磁盘,或者我是否应该提前 go 并让所有单独的线程各司其职 - 获取一大块数据,在 GPU 上执行,然后写入磁盘,然后 Z34D1F91FB2E514B8576FAB1A75A8A9 的下一个数据块?

我正在为我的 GPU 库使用 CUDA。 cuda 是否足够聪明,不会尝试同时在 GPU 上运行两个内核? 我想我将不得不手动进行管理以确保两个线程不会尝试向 GPU 添加更多数据而不是空间?

任何关于多线程和 CUDA 组合使用的好的资源都值得赞赏。

线程对磁盘 I/O 没有帮助。 通常人们倾向于通过创建大量线程来解决阻塞问题。 事实上,这只会让事情变得更糟。 您要做的是使用异步 I/O而不是在写入(和读取)时阻塞。 您可以为此使用一些通用解决方案,例如libeventAsio ,或者使用您平台上可用的较低级别的 API。 在 Linux 上, AIO似乎是最好的文件,但我还没有尝试过。 希望能帮助到你。

我在研究工作中遇到过大文件的这种情况。

据我所知,磁盘 I/O 工作线程化并没有太大的收获,因为与 GPU I/O 相比非常慢。

我使用的策略是从磁盘同步读取并加载数据并在 GPU 上异步执行。

就像是:

read from disk
loop:
 async_load_to_gpu
 async_execute
 push_event
 read from disk
 check event complete or read more data from disk

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM