我有一个关于并行程序中的运行时测量的问题(我使用了 C++,但我认为这个问题更笼统)。
一些简短的解释:3个线程并行运行(pthread),以不同的方式解决相同的问题。每个线程可以将信息传递给另一个线程(例如,一个线程获得但另一个线程尚未获得的部分解决方案)以加速其他线程,这取决于他自己的状态/他自己计算中的可用信息。一旦第一个线程准备好,整个过程就会停止。现在我想要一个独特的时间测量来评估从开始到问题解决的运行时间。(最后,我想确定通过并行计算使用协同效应是否比单线程计算更快)。
在我看来,问题在于(由于操作系统暂停/取消暂停单个线程),在进程中传递信息的点在每个进程的状态中都不是确定性的。这意味着,在线程 1 上经过 xxx 单位的 cpu 时间后获得了某个信息,但无法控制线程 2 是在其计算所花费的 yyy 或 zzz 单位的 cpu 时间之后收到此信息。假设这个信息无论如何都会完成线程 2 的计算,线程 2 的运行时间是 yyy 或 zzz,这取决于操作系统的操作。
我可以做些什么来获得运行时比较的确定性行为?我可以命令操作系统“不受干扰”地运行每个线程(在多核机器上)吗?有什么我可以在实现(c++)的基础上做的吗?
或者是否有其他概念用于评估此类实现的运行时间(时间增益)?
最好的问候马丁