多线程概念问题

时间:2018-03-01 03:00:44

标签: c++ multithreading pthreads

我只需编写一个程序,我必须使用线程进行矩阵乘法,其中每个乘法都有一个线程。

现在我想知道一些事情, 使用线程来增加3x2矩阵和2x3矩阵是否真的有任何优势?对于小的,顺序代码仍然有效?如果我错了,那么小的东西有什么优点或缺点吗?我只是觉得复杂功能对于这么小的东西来说太棒了。

另一方面,拥有10000x10000矩阵会有使用线程的好处吗?我会这么认为,地方发挥作用,但是当多线程效率更高或者没有效率时,我仍然会四处寻找。

谢谢!

1 个答案:

答案 0 :(得分:1)

通常,您永远不希望通过多个线程更新来自相同缓存行的值,这会破坏性能。您还希望在线程中使用SIMD单元。两者通常是由于块中的某种处理数据而实现的(查找寄存器阻塞/缓存阻塞术语)。另外,理想情况下,您希望创建与硬件并发性一样多的线程(以防止昂贵的上下文切换)。对于数据并行(例如矩阵乘法),这更容易。对于任务并行性,通常使用线程池。

对于像3x2这样的小矩阵,多线程肯定比顺序处理慢得多。对于较大的矩阵,您需要进行测量以找出多线程速度更快的阈值。该阈值取决于太多参数以提供通用答案。

另外,我不明白你是什么意思

  

每次乘法都有一个帖子

你想为2个标量的每个乘法创建一个单独的线程吗?这将为大型矩阵创建数十亿个线程,这将非常慢。

相关问题