Почему мое время вычислений C # может быть недетерминированным?

Я использую алгоритм поиска, который с самого начала загружается одним семенем. С этого момента я ожидаю, что алгоритм будет вести себя детерминированным образом, что в основном так и есть. Я могу в значительной степени проверить это, посмотрев на 10 000-й шаг, 20 000-й шаг и увидев, что они идентичны. Что я вижу по-другому, так это время, затрачиваемое процессором потока на то, чтобы добраться до одного и того же места (пройдя идентичные пути). Я измеряю время потока с помощью ProcessThread.TotalProcessorTime.

Чтобы определить это количественно, я провел для вас несколько тестов. Я варьировал время выполнения и измерял количество решений, оцененных за это время


    30s         60s          120s        120s
473,962     948,800     1,890,668   1,961,532
477,287     954,335     1,888,955   1,936,974
473,441     953,049     1,895,727   1,960,875
475,606     953,576     1,905,271   1,941,511
473,283     951,390     1,946,729   1,949,231
474,846     954,307     1,840,893   1,939,160
475,052     952,949     1,848,938   1,934,243
476,797     957,179     1,945,426   1,951,542

475,034     476,599       473,831     486,721
  1,478       2,426        23,922      11,108

. Я повторил тест по 8 раз для каждого. В двух нижних строках показаны средние решения, оцененные за 30-секундный период, за которыми следует стандартное отклонение. Я повторил тест 120 с, поскольку стандартное отклонение было очень высоким в первый раз и намного ниже во второй.

Если мой алгоритм выполняет ту же работу, то что может привести к тому, что одна и та же работа займет разное количество времени? Какой случайный элемент вводится?

Чтобы прояснить несколько моментов:

  1. Я говорю о времени процессора потока, а не времени часов
  2. Алгоритм работает в одном потоке без явного взаимодействия с другими потоками
  3. Эта среда представляет собой Windows XP .Net C # Dual processor
  4. Это консольное приложение
  5. Алгоритм использует процессор и память, и только после его завершения он выводит результат на экран.

С уважением

5
задан Howard May 19 July 2011 в 08:11
поделиться