c/c++ 中带有线程的程序应该比串行程序运行得更快吗?

arm*_*ndo 3 c c++ pthreads

我正在学习c/c++中线程的概念。我正在尝试Pthreads Overview中引用的两个向量的点积示例。

我运行了代码的串行版本和线程版本,我发现串行版本比线程版本更快。我想应该是相反的。

我在单个 CPU 上运行。

Dav*_*ber 5

链接到的代码有一些您需要记住的问题:

  1. 串行版本正在计算两个长度为 100 的向量的内积。并行版本正在计算两个长度为 400 的向量的内积。您可以在数组分配中看到这一点(例如,在代码中将a = (double*) malloc (NUMTHRDS*VECLEN*sizeof(double));--NUMTHRDS设置为 4 和100)。VECLEN因此,并行程序正在执行四倍的工作量,但有四个线程,因此天真的假设是串行和并行程序将具有相同的运行时间。
  2. 并行代码演示了用于线程同步的互斥体。这可能会在代码运行时造成障碍。
  3. 该代码使用四个线程。如果您的 CPU 没有四个或更多线程,那么您就不能指望它能够扩展。
  4. 创建线程会产生开销,对于这么小的问题,它可能是一个重要因素。