我正在 MATLAB 中编写 mex 代码来执行和操作(因为该操作使用 c++ 中的库)。mex 代码有一个部分,其中有一个函数在循环中以不同的参数值重复调用,并且每个函数调用都是独立的(即,1 个调用的计算不依赖于先前的调用)。因此,为了加快速度,我编写了创建多个线程的多线程代码 - 线程的确切数量等于循环迭代的数量,在我的示例中,此值为 10。每个线程计算循环中的函数以获得单独的值参数,线程返回并加入,完成更多计算并返回结果。所有这些理论上应该给我很好的加速,但我看到多线程代码比普通的单线程代码慢很多!我可以使用非常强大的 24 核机器,所以这完全令人困惑,因为我希望每个线程都被安排在一个单独的核心上。对导致这种情况的任何想法?导致这种情况的代码中有任何常见问题/错误吗?
任何帮助将不胜感激。
编辑:为了回答这里人们提出的解决方案中提出的许多疑问,我想分享一些关于我的代码的信息: 1. 每个函数调用都需要几分钟,所以线程的同步和产生不应该是这里的开销(尽管如果有在这种情况下是否有任何缓解情况,任何有关此的信息都会非常有帮助!)
每个线程都访问公共数据结构、数组、矩阵,但这些中的值根本不会被覆盖。所有对变量的写入都是对线程本地的变量、指针、数组等进行的。所以,我猜这里不应该有很多缓存未命中?
我的代码中也没有互斥部分,因为没有线程写入任何公共内存位置。所有写入都写入线程本地的内存位置。
我仍在试图找出我的多线程实现不起作用的原因:(所以,任何指针/信息都会非常有帮助!
谢谢!!