使用pthread与CUDA -设计问题
Using pthreads with CUDA - design questions
我正在编写一些需要一些磁盘I/O的代码,并调用我编写的库来执行一些计算和GPU工作,然后更多的磁盘I/O将结果写回文件。
我想创建这个多线程代码,因为文件是相当大的。我希望能够读取文件的一部分,将其发送到GPU库,并将一部分写回文件。所涉及的磁盘I/O相当大(如10GB),并且在GPU上计算相当快。
我的问题更像是一个设计问题。我应该使用单独的线程来预先加载数据到GPU库,实际上只有主线程执行调用GPU库,然后将结果数据发送给其他线程被写回磁盘,或者我应该继续,所有的单独的线程每一个做自己的一部分——抓住chucnk的数据,在GPU上执行,并写入磁盘,然后去下一个块的数据?
我使用CUDA为我的GPU库。cuda是否足够聪明,不会同时在GPU上运行两个内核?我想我将不得不做管理手动,以确保两个线程不试图添加更多的数据到GPU比它有空间?
任何关于多线程和CUDA结合使用的好资源都是值得赞赏的。
线程对磁盘I/O没有帮助。一般来说,人们倾向于通过创建大量线程来解决阻塞问题。事实上,这只会让事情变得更糟。您必须做的是使用异步I/O,而不是在写(和读)时阻塞。您可以使用一些通用的解决方案,如libevent
或Asio
,或者使用平台上可用的低级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
相关文章:
- 基本 Cuda C++项目集成问题
- 在本地安装OpenMPI的问题与CUDA一起使用
- 如何调试错误代码 77:cudaErrorIllegal地址当 cuda-memcheck 没有发现问题时
- 我正在尝试运行CUDA示例,但是我在Ubuntu 16.04 Lts上的OpenGL(libglew.a)有问题
- CUDA中的存储器计算重叠问题
- 是否有可能解决 CUDA 内存碎片问题
- CUDA 内存管理/类问题中的指针
- CUDA:使用 tex2D() 的问题
- CUDA 共享内存理解问题
- 链接 CUDA 编译与使用提升的代码时出现问题
- 在将复杂数据从主机传输到设备的简单 CUDA 代码中出现问题
- Cuda:固定内存零复制问题
- 与OpenMP,MPI和CUDA链接时的Autotools问题
- CUDA推力内存分配问题
- CUDA和C++函数问题(Visual Studio 2013)
- 在c++中链接Cuda问题
- 从静态初始化代码启动CUDA内核时遇到问题
- insight eclipse版索引器的CUDA 7.5问题
- Cuda无人模拟-共享内存问题
- CUDA编译问题