0

我正在测试使用这样的程序增加原子变量比普通变量慢多少:

  size_t Normal{};
  std::atomic<size_t> Atomic{};
  std::chrono::steady_clock::time_point start0 = std::chrono::steady_clock::now();
  while(1)
  {
    ++Normal;
    if(std::chrono::duration_cast<std::chrono::seconds>
      (std::chrono::steady_clock::now() - start0).count() > 1)
    {
      std::cout << "Microseconds " << std::chrono::duration_cast<std::chrono::microseconds>
        (std::chrono::steady_clock::now() - start0).count() << std::endl;
      break;
    }
  }
  std::chrono::steady_clock::time_point start1 = std::chrono::steady_clock::now();
  while(1)
  {
    Atomic.fetch_add(1);
    if(std::chrono::duration_cast<std::chrono::seconds>
      (std::chrono::steady_clock::now() - start1).count() > 1)
    {
      std::cout << "Microseconds " << std::chrono::duration_cast<std::chrono::microseconds>
        (std::chrono::steady_clock::now() - start1).count() << std::endl;
      break;
    }
  }
  std::cout << "Normal:" << Normal << std::endl;
  std::cout << "Atomic:" << Atomic.load() << std::endl;
  std::cout << "Atomic / Normal %" << double(Atomic.load()) / double(Normal) * 100.0 << std::endl;

在我的笔记本电脑(4GB,Intel(R) Core(TM) i3-2328M CPU @ 2.20GHz)上,我平均获得了 2400 万个增量。

在更好的机器上(8 x Intel(R) Xeon(R) CPU E5-4610 v2 @ 2.30GHz,256 GB RAM)令我惊讶的是,尽管处理器要好得多,但我平均获得了 300 万个增量。

两台机器都有相同的操作系统(Fedora 21)。

我知道串行程序中的内核(或处理器)数量与性能的提高无关,但我将这些硬件信息仅作为对读者的提示。

4

0 回答 0