我正在学习 c/c++ 中线程的概念。我正在尝试这些例子 Pthreads Overview 中引用的两个 vector 的点积.
我同时运行了代码的串行和线程版本,我发现 串行版本比线程版本快。我认为它应该是 对面的。
我在单个 CPU 上运行。
最佳答案
链接到的代码有几个问题需要注意:
- 串行版本正在计算两个长度为 100 的 vector 的内积。并行版本正在对两个长度为 400 的 vector 进行内积。您可以看到在数组分配中(例如,
a = (double*) malloc (NUMTHRDS*VECLEN*sizeof(double));
--NUMTHRDS
设置为四和代码中的VECLEN
100)。因此,并行程序执行四倍的工作量,但有四个线程,因此天真的假设串行和并行程序将具有相同的运行时间。 - 并行代码演示了用于线程同步的互斥量。这可能会在代码运行时造成障碍。
- 代码使用了四个线程。如果您的 CPU 没有四个或更多线程,那么您就不能指望它进行扩展。
- 创建线程会产生开销,对于这么小的问题,它可能是一个重要因素。
关于c++ - c/c++ 中的线程程序是否应该比串行程序运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801216/