Я реализую RayTracingInOneWeekend и оптимизировал его с 33m
до 23s
для размера изображения 384x216
сцены и параметров, как указано в статье . Однако, когда я его профилирую, entries
(5-й столбец слева на скриншоте ниже) изменяется почти при каждом запуске. Как такое возможно? В моей программе все остается таким же , включая даже генераторы случайных чисел, поскольку генераторы создаются как (вы можете увидеть это на github ):
g = mkStdGen (i * width + j)
Если width
и height
остаются такими же, тогда все g
(по одному для каждого пикселя) также должны оставаться такими же. Однако, как вы можете видеть, два снимка экрана имеют разные значения в столбце entries
.
What could be the reason behind this impurity? Or the profiler is not just able to gather all the information and the numbers are not exact (means, in reality the frequency of function calls are different from the numbers shown above; the docs однако ничего подобного не говорит).
Моя программа строится с cabal v2-build -O2 --enable-profiling --enable-executable-profiling
, и я не передаю -prof -fprof-auto
в ghc-options
(думаю, cabal
позаботится об этом). Я также использовал -threaded
и parallel
библиотеки .
Я использую GH C 8.6.5 и Cabal 3.2.