OpenMP中的计时
/ / 点击 / 阅读耗时 2 分钟问题背景
在写软渲染的过程中,为了加速渲染的效率,我使用OpenMP
完成简单的多线程并行渲染。为了查看实际渲染的效果如何,使用clock()
(头文件time.h
)进行运行时间计时,输出实际渲染fps。
诡异的是,对比使用多线程前后,反而是不使用多线程的串行程序fps高!
解决
你可能已经想到,问题的关键在于clock()
的实现——它实际上计数的是所有cpu的tick数!换而言之,一定程度上,物理线程越多(参与运算的核),程序“用时”越长。显然,这是很不合理的,我们实际想要计量的时间应是现实中的绝对时间。
实际上, OpenMP
提供了omp_get_wtime()
接口,其返回一个double
类型的变量,单位是秒。该函数可以完全替代clock()
,并且在多线程下效果如旧。
感谢阅读!欢迎评论嗷~