gpt4 book ai didi

c++ - 使用并行线程的矩阵乘法

转载 作者:行者123 更新时间:2023-11-28 00:12:32 25 4
gpt4 key购买 nike

我正在使用多线程编写矩阵乘法代码。

代码在没有多线程的情况下工作正常。当我添加 t.join() 行时代码可以工作,但这样做不会并行化代码。

所有线程都会等待它们的前任完成。我想并行执行它们。

运行时错误:

libc++abi.dylib: terminating
Abort trap: 6

当我在 SO 镜像中查找错误时,几乎所有镜像都面临导致此错误的段错误。

注意:我使用的是带有 gcc(clang) 的 mac 机器。

这是我的代码:

void multiply (int a[][N],int b[][N],int n,int m,int p,int result[][N])
{
int i,j,k;

for (i=0;i<n;i++)
{
for (j=0;j<p;j++)
{
thread t(multiplyParallely,a,b,m,i,j,result);

// t.join(); // Works When i add this line.But that doesnt parallelise.
//multiplyParallely(a,b,m,i,j,result); // Obviously This Works
}
}

}

最佳答案

您的应用程序崩溃的直接原因是 thread() 对象必须分离或连接,否则,它的析构函数会抛出异常。当您退出最内层循环时会发生这种情况。

由于我通常不建议分离线程,因此最好的解决方案是拥有一个线程对象 vector ,并在创建时将线程移至该 vector 中。最后,只需将所有线程加入 vector 中即可。

关于c++ - 使用并行线程的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com