问题背景

在写软渲染的过程中,为了加速渲染的效率,我使用OpenMP完成简单的多线程并行渲染。为了查看实际渲染的效果如何,使用clock()(头文件time.h)进行运行时间计时,输出实际渲染fps。

诡异的是,对比使用多线程前后,反而是不使用多线程的串行程序fps高!

解决

你可能已经想到,问题的关键在于clock()的实现——它实际上计数的是所有cpu的tick数!换而言之,一定程度上,物理线程越多(参与运算的核),程序“用时”越长。显然,这是很不合理的,我们实际想要计量的时间应是现实中的绝对时间。

实际上, OpenMP提供了omp_get_wtime()接口,其返回一个double类型的变量,单位是秒。该函数可以完全替代clock(),并且在多线程下效果如旧。