【发布时间】:2010-04-15 08:46:46
【问题描述】:
我正在应对同时使用 8 核 机器和高端 GPU (Tesla 10) 功能的挑战。
我有一个大输入文件,每个内核一个线程,一个用于 GPU 处理。 Gpu 线程为了高效,需要输入大量的行,而 Cpu 线程只需要一行即可继续(在临时缓冲区中存储多行较慢)。该文件不需要按顺序读取。我正在使用 boost。
我的策略是在输入流上有一个互斥体,每个线程锁定 - 解锁它。 这不是最优的,因为 gpu 线程在锁定互斥体时应该具有更高的优先级,这是最快且要求最高的线程。
我可以想出不同的解决方案,但在急于实施之前,我想有一些指导方针。
您使用/推荐什么方法?
【问题讨论】:
-
您有多少个并行磁盘驱动器?读取大文件时,磁盘 I/O 始终是真正的瓶颈。
-
Raid 0 中的 2。问题与处理数据划分的线程逻辑有关。
-
同步在哪里发挥作用?您能否详细说明每个线程正在执行的处理类型?比如哪些线程正在读取和写入以及何时。
-
诀窍是,如果您在磁盘 I/O 上遇到瓶颈,那么无论您的线程逻辑是什么,都不会影响运行时间。您的计算量是否足够大,以至于处理一行数据比从磁盘读取数据需要更长的时间?
-
@Mark B 是的,线程对每一行执行大量处理,只产生是或否。 @SpacegosthAli 他们不会在任何地方写任何东西。诀窍是弄清楚如何最好地处理线程的馈送,以便每个线程都有工作要做,尤其是 GPU 的
标签: c++ multithreading boost concurrency