有人可以指导我使用线程的并行矩阵多数概念。我为每行矩阵分配了一个线程或进程。但它为只有4个CPU的机器创建了太多线程。我无法理解线程或进程是否限制为特定的数字,例如8,如何让每个线程计算多行,以及如何跟踪哪个行由哪个线程完成。假设我有A [40] [50] * B [50] [60]。我不想创建40个线程。在此代码中我需要进行哪些修改才能只有5个线程而不是等于行数。
答案 0 :(得分:1)
根据处理器上可用执行核心的数量,线程不限于特定数量。查看您的进程监视器/任务管理器窗口 - 在任何给定时刻,有数千个线程在数十个进程中运行。只有少数可以同时执行,但线程调度程序的工作是通过优先处理准备运行的线程来保持CPU忙。
创建新线程会产生开销 - 必须为每个创建的新线程分配相当数量的内存和系统资源,因此您不希望在自己的进程中创建数千个线程。如果要执行许多小任务,可以使用线程池来消除创建线程的成本。但对于您的矩阵用例,您不需要线程池。
只需确定要使用多少个线程,然后将您的工作划分为多个块。如果您决定使用5个线程,则将矩阵行数除以5,并告诉每个线程要开始的行和要使用的行数。不要假设每个线程都将处理相同数量的行 - 最后一个块将需要完成但是仍有许多行,如果总行数不是5的偶数倍,则可能小于5。
对于N行的矩阵(N在运行时动态确定),向每个线程发出N / 5行的块,加上N mod 5的一个块以捕获任何余数。 (好吧,这是6个线程,但没关系)