我目前正在研究用C++和C#編寫的(遺留)程序;它執行一些重量級的計算,但應該是完全確定性的。即相同的輸入會產生相同的輸出......問題是2次運行(在同一臺計算機上,使用相同的編譯可執行文件)會產生稍微不同的輸出。在確定性應用程序中的偏差
應用程序讀取和寫入到SQL服務器數據庫(它具有對數據庫的唯一訪問權限,因此沒有其他應該干涉DB值)。
運行之間唯一明顯的區別是它們每個都被賦予一個唯一的名稱(只是一個字符串變量)。
代碼中沒有隨機對象,所有循環都運行預定次數的迭代,或者直到遇到條件,它們才運行一定的時間。有少量的多線程,我已經保證是線程安全的,但我會自己檢查一下。
有沒有其他明顯的事情我應該尋找,這會導致這種不正常的行爲?
感謝您的回答,大衛。關於你的第二點,我是否認爲在同一臺服務器上運行時,所有的浮點運算至少是一致的? – ninjaPixel 2011-04-26 16:18:46
如果存在線程將計算分割到不同的線程上,那麼可能不是 – 2011-04-26 19:04:09
您能給出一個具體的例子,爲什麼以及何時在同一個處理器上的相同計算可能產生不同的結果(給出正確的同步)? – user492238 2011-04-29 08:40:47