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