Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 无法理解矩阵乘法的逻辑_Multithreading_Multiprocessing - Fatal编程技术网

Multithreading 无法理解矩阵乘法的逻辑

Multithreading 无法理解矩阵乘法的逻辑,multithreading,multiprocessing,Multithreading,Multiprocessing,有人能给我介绍一下使用线程的并行矩阵mult的概念吗。我为矩阵的每一行分配了一个线程或进程。但是它为一台只有4个CPU的机器创建了太多的线程。我无法理解线程或进程是否被限制在一个特定的数字,比如8,如何让每个线程计算多行,以及如何跟踪哪些行是由哪个线程完成的。假设我有一个a[40][50]*B[50][60]。我不想创建40个线程。在这段代码中,我需要做哪些修改,使其只有5个线程,而不是等于行数。线程不限于基于处理器上可用执行内核数的特定数目。查看您的进程监视器/任务管理器窗口-在任何给定时刻,

有人能给我介绍一下使用线程的并行矩阵mult的概念吗。我为矩阵的每一行分配了一个线程或进程。但是它为一台只有4个CPU的机器创建了太多的线程。我无法理解线程或进程是否被限制在一个特定的数字,比如8,如何让每个线程计算多行,以及如何跟踪哪些行是由哪个线程完成的。假设我有一个a[40][50]*B[50][60]。我不想创建40个线程。在这段代码中,我需要做哪些修改,使其只有5个线程,而不是等于行数。

线程不限于基于处理器上可用执行内核数的特定数目。查看您的进程监视器/任务管理器窗口-在任何给定时刻,都有成千上万的线程在几十个进程中运行。只有少数线程可以同时执行,但线程调度程序的任务是通过对准备运行的线程进行优先级排序来保持CPU繁忙

创建新线程会带来开销——必须为创建的每个新线程分配相当数量的内存和系统资源,因此您不希望在自己的进程中创建数千个线程。如果有很多小任务要执行,可以使用线程池来消除创建线程的成本。但是对于矩阵用例,您不需要线程池

只需决定要使用多少线程,并将您的工作划分为那么多块。如果您决定使用5个线程,那么将矩阵行数除以5,并告诉每个线程从哪一行开始以及使用多少行。不要假设每个线程将处理相同数量的行-最后一个块将需要结束,不管剩下多少行,如果总行数不是5的偶数倍,那么最后一个块可能会小于5


对于由N行组成的矩阵(N在运行时动态确定),向每个线程发出N/5行的块,再加上一个N mod 5的块以捕获任何余数。(好的,这是6个线程,但没关系)

在一台具有4个内核的机器上,您不限于4个线程,但线程不会同时运行。如果您想将程序限制为仅运行5个线程,则只创建5个线程,并让每个线程计算10行。矩阵大小只是一个示例。它必须动态指定。说65x78。。。我不会写,我如何在线程之间划分它呢?创建5个线程,将输出矩阵划分为5个块,并让每个线程求解一个块。一个块中的行数将是动态的:\谢谢,我理解了,任何示例都可能说明这一点!!