我正在测试使用这样的程序将原子变量递增到正常变量的速度要慢得多:
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)我平均获得了24百万的增量。
在一台更好的机器上(8 x Intel(R)Xeon(R)CPU E5-4610 v2 @ 2.30GHz,256 GB RAM)令我惊讶的是,尽管处理器很多,但我获得了平均3百万的增量更好。
两台机器都有相同的操作系统(Fedora 21)。
我知道串行程序中的核心(或处理器)数量与性能提升无关,但我把这些硬件信息简单地作为读者提示。