c++ - c/c++ 中的线程程序是否应该比串行程序运行得更快?

标签 c++ c pthreads

我正在学习 c/c++ 中线程的概念。我正在尝试这些例子 Pthreads Overview 中引用的两个 vector 的点积.

我同时运行了代码的串行和线程版本,我发现 串行版本比线程版本快。我认为它应该是 对面的。

我在单个 CPU 上运行。

最佳答案

链接到的代码有几个问题需要注意:

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

关于c++ - c/c++ 中的线程程序是否应该比串行程序运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801216/

相关文章:

没有 template<> 的 C++ 模板特化

c++ - glGenBuffers 没有定义?

c++ - 为什么我必须通过this指针访问模板基类成员?

c - 如何用c打开mp3文件

c - 线程池如何在 C 中创建带队列的线程池?

c++ - flex/bison 中的多个解析器 : include fails

c - 如何获得C中最右置位的位置

c - 在c中的链表中插入一个条目

c - 关于线程和条件变量以及同步

objective-c - 如何判断一个线程是否有锁?