为了计算可能的加速比(Amdahl),我需要与总的顺序运行时相比,代码中可并行部分的比例。我使用chrono.h
库对执行进行计时,并以纳秒为单位获得了总的顺序运行时和可并行部分运行时。
现在我需要将这两个持续时间相除,以获得可能的可并行部分的百分比。
例如
auto seqStartTime = std::chrono::steady_clock::now();
// Some code, non parallelizable
auto parStartTime = std::chrono::steady_clock::now();
// Parallelizable sequential code
auto parEndTime = std::chrono::steady_clock::now();
auto timeTakenPar = std::chrono::duration_cast<std::chrono::nanoseconds>(parEndTime - parStartTime);
// More sequential code possible
auto seqEndTime = std::chrono::steady_clock::now();
auto timeTakenSeq = std::chrono::duration_cast<std::chrono::nanoseconds>(seqEndTime - seqStartTime);
// auto frac = timeTakenPar / timeTakenSeq (??)
知道怎么做吗
简单的除法并不能解决这个问题,因为据我所知,这只会返回转换后右侧持续时间适合左手持续时间的次数。在这种情况下显然是零,因为总运行时间在rhs上,可并行部分运行时间在lhs上。
我还尝试在除法之前使用.count()
,但结果仍然是0。
任何帮助是高度赞赏!
2条答案
按热度按时间mwngjboj1#
<chrono>
支持不同的数字表示,包括double
,甚至支持像2.5ms
这样的文字。不幸的是,没有nanoseconds<double>
快捷方式,演员阵容更罗嗦。产出:
chhqkbe12#
您可以改为使用浮点持续时间。这会给予你两个好处:
std::chrono::duration_cast
您的代码将变为: