感谢网站上人们的帮助,我正在迈出并行编程的第一步。
这是我目前正在测试的C#(简化)代码。
do
{
// PRN data download to the waveform generator...
// Response data acquisition from the oscilloscope...
// etc...
t0 = Win32.MM_GetTime();
// Serial evaluation of the data DFT;
// execution time constantly = 0.785 s.
//DSP.DFT_2_F(D1, ref R1, ref X1);
//DSP.DFT_2_F(D2, ref R2, ref X2);
// Parallel evaluation of the data DFT;
// execution time = 0.395 s, but...
Parallel.Invoke(
() => DSP.DFT_2_F(D1, ref R1, ref X1),
() => DSP.DFT_2_F(D2, ref R2, ref X2)
);
lblTMis.Text = ((double)(Win32.MM_GetTime() - t0) / 1000.0).ToString();
// Plot the measurement results...
// etc...
}
while (bMisuraOn);
现在,虽然串行DFT评估不断需要0.785秒,但并行版本只需要0.395秒但不时,比如每3-4个测量循环,执行时间会跳到0.838秒。 我还注意到,在50-60次循环之后,执行时间稳定到0.395秒,只有非常偶然的跳跃;如果我重新启动测量循环,而不退出程序," limping"一段时间后,一次又一次地显示出来。
对我来说,看起来有时Parallel.Invoke决定表现为串行......
这是正确的还是我做错了什么? 有什么方法可以始终保持相同(快速)的执行时间?
Ciao,感谢您的关注。
佛朗哥
答案 0 :(得分:1)