Как часто ЦПУ делают ошибки в расчетах?


22

В заметках Дейкстры о структурированном программировании он много говорит о доказуемости компьютерных программ как абстрактных сущностей. Как следствие, он отмечает, что тестирования недостаточно. Например, он указывает на тот факт, что было бы невозможно проверить функцию умножения f (x, y) = x * y для любых больших значений x и y во всех диапазонах x и y. Мой вопрос касается его разного. замечания о "паршивом оборудовании". Я знаю, что эссе было написано в 1970-х годах, когда компьютерное оборудование было менее надежным, но компьютеры все еще не идеальны, поэтому иногда им приходится делать ошибки в расчетах . Кто-нибудь знает, как часто это происходит или есть какая-то статистика по этому поводу?



Вот страница википедии об ошибке Pentium FDIV , упомянутая в двух существующих на данный момент ответах.
Каскабель

Мы обходимся без какого-либо резервного копирования или проверки ошибок в основных процессорных процессорах, поэтому мы можем легко оценить верхнюю границу частоты случайных переходных вычислительных ошибок. Большинство инструкций ЦП включают математику (при вычислении адресов для операций с памятью, а также для вычислений), и современные ЦП выполняют миллиарды операций в секунду, называя это> 1e14 операций в день. Если 1 из 10 математических ошибок будет иметь очевидное влияние на программу (вероятно, низкая оценка), и мы не видим таких ошибок ежедневно, базовая частота ошибок для ALU должна быть <1e-13, и я предположил бы <1e-15.
Рассел Борогове

@NickC: ты намекаешь на то, что в этом вопросе нет ничего практичного? Таким образом, вы думаете, вопрос о том, работает ли аппаратное обеспечение или нет, не имеет значения? Как насчет того, когда на самом деле имеет значение, работает ли программа правильно (сложно ли программирование в реальном времени только теоретическое или слишком сложное для людей на этом сайте?)? Как насчет оборудования, где один пользователь может украсть ключи у других пользователей из-за утечки информации через боковой канал? Черт, хотелось бы, чтобы была кнопка понижения комментариев.
Longpoke

1
@ Долго говорите со мной тоже.
Николь

Ответы:


14

За исключением реальных / фактических ошибок в дизайне ЦП, я думаю, что вы ищете этот SO Вопрос: Космические лучи. Какова вероятность того, что они повлияют на программу . Я не могу получить цитаты из этого, потому что SO снова заблокирован на работе здесь ( вздох ).

Не обращая внимания на вышесказанное, я вспоминаю, что в ранних Пентиумах были некоторые ошибки вычисления FPU, поэтому они, безусловно, не являются безошибочными.

У меня нет под рукой веских доказательств, но моя интуиция говорит мне, что вам, вероятно, следует больше беспокоиться о повреждении битов кэша / оперативной памяти / диска, чем неправильных вычислений.


40
ТАК заблокирован на работе? Кто-то в вашей компании пытается саботировать разработку программного обеспечения?
Николь

3
Вы говорите, как будто это только один человек, и они еще не достигли успеха ...;)
Дэн МакГрат,

9
Я так и не смог понять причину блокировки сайтов SFW на корпоративном уровне. Поскольку поисковые системы являются чрезвычайно ценным инструментом, вы должны иметь возможность просматривать информацию, которую они дают.
Тим Пост

@ Дэн, разблокируй это. Вы должны быть в состоянии сделать https-туннелирование к дому.

4
Попасть в обход системы было просто поводом для прекращения. Я переехал в США и получил новую работу.
Дэн МакГрат

6

В наши дни большая проблема при ответе на этот вопрос заключается в том, что производители процессоров заключают ошибки в чипе в соглашение о неразглашении. Intel делает это, IIRC.

Многие менее скрытные производители вносят исправления в таблицу данных, но не сообщают вам, что изменилось, поэтому, если вы не захотите сравнить все 300 страниц, вам будет сложно рассказать.

В процессорах было много плохих инструкций, смотреть отчет ядра Linux, какие из них он находит при загрузке, довольно интересно.

Очень связана статья Google об ошибках памяти, они встречаются чаще, чем вы думаете. «Ошибки DRAM в дикой природе: крупномасштабное полевое исследование» Шоудер, Пинейро и Вебер Первоначально опубликовано в ACM SIGMETRICS в 2009 году. Переиздано в изданиях ACM, февраль 2011 г.

Что все эти ошибки памяти означают для вашего вопроса, так это то, что без памяти ECC вы все равно получите неверные вычисления.


5

Когда я работал на поставщика оборудования, утверждалось, что ни один из когда-либо созданных процессоров не был исправлен. И это только логические ошибки. Обычно производитель обнаруживает большинство из них и либо производит повторную проверку чипа, либо находит настройки BIOS, которые работают вокруг них. Но в дополнение к тому факту, что такие вещи, как космические лучи, иногда всплывают в памяти (а память обычно имеет биты четности или схему SECDED для сохранения вашего бекона), всегда есть конечный шанс, что бит будет прочитан неправильно. Обратите внимание, что биты не являются реальными логическими нулями и единицами, а являются шумными вещами, такими как напряжения и токи, и, учитывая конечный шум в системе, всегда есть вероятность, что неправильный бит будет прочитан. В старые времена (как программист приложения) я обнаружил несколько ошибок HW - как с плохой логикой, так и из блока X в ЦП Y иногда дает мне плохой тип результата, время, чтобы ребята из HW заменили чипы. Фактические схемы смещаются со временем и использованием, и если ваша готовится к сбою, вы можете начать обнаруживать битовые ошибки, особенно если вы разгоняете или иным образом превышаете рекомендованный рабочий диапазон.

Это реальная проблема для суперкомпьютеров, где предполагаются вычисления, включающие 1e18 или более операций с плавающей запятой.


3

Следующее содержание может быть об ошибках вычислений в графических процессорах.

При наличии достаточного количества времени Intel i7-3610QM и Nvidia GeForce GTX 660 будут не соглашаться друг с другом, если будут следовать одним и тем же инструкциям. (cuda 5.5, compute_20, sm_20)

Итак, остается сделать вывод, что один из двух делает ошибку.

Во время эталона технико-экономического обоснования моделирования частиц я заметил, что после тысячи или около того преобразований с двойной точностью (преобразования, включая sin, cos, умножение, деление, сложение и вычитание) начали появляться ошибки.

Я дам вам небольшую выдержку из цифр для сравнения (первое число всегда означает процессор, второе - графический процессор)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(обратите внимание, что не каждая последовательность преобразования приводит к ошибке)

Несмотря на то, что максимальная ошибка практически ничтожна, (0.0000000000000401%)она все же существует и способствует накоплению ошибки.

Теперь эта ошибка может быть связана с различием в реализации одной из встроенных библиотек. Действительно, похоже, что GPU предпочитает округлять или усекать, когда процессор округляется. Любопытно также, что это, кажется, происходит только на отрицательных числах.

Но дело в том, что идентичные инструкции не обязательно дают одинаковые результаты даже на цифровых машинах.

Я надеюсь, что это способствовало.

РЕДАКТИРОВАТЬ в качестве обозначения: В случае арифметических ошибок графического процессора это (ctrl + f "Первый графический процессор с поддержкой памяти ECC") также может представлять интерес, хотя и не обязательно относится к вышеуказанным ошибкам.


Вычисления с плавающей точкой могут отличаться в зависимости от того, где они хранятся. Внутренние регистры FPU некоторых процессоров имеют длину, отличную от ОЗУ, поэтому в зависимости от того, откуда они загружают операнты, результаты могут быть разными. Для получения дополнительной информации я рекомендую плавающую точку- gui.de . Это, однако, не ошибка вычисления - это дизайн того, как работает арифметика с плавающей запятой.
Филипп

2
Для тех, кто не знает, как работает математика FP, просто чтобы прояснить замечание Филиппа, эти различия вполне могут быть правильными (поскольку их различия не связаны с программными или аппаратными ошибками). Различия, вероятно, связаны с программными или аппаратными реализациями. Нужно использовать понятие фиксированного машинного эпсилона, чтобы определить, являются ли они ошибочными: en.wikipedia.org/wiki/Machine_epsilon (по сути, эта константа описывает, насколько точной должна быть одна операция FP)
Томас Эдинг

1

С точки зрения того, что вы считаете фактическим «процессором» (исполнительные блоки, конвейер .. т. Д.), Этого почти никогда не происходит. Некоторое время назад была известная проблема с одним из вариантов Pentium, но это единственная, о которой я когда-либо слышал. Теперь, если вы рассматриваете наборы микросхем, встроенных в процессоры, или, по крайней мере, в одну и ту же упаковку, такую ​​как USB-контроллеры, TSEC, DMA-контроллер или контроллер памяти, то существует множество ошибок. Я сомневаюсь, что есть какие-либо статистические данные об этом, хотя.


0

Еще одна проблема «паршивого оборудования», которую следует учитывать в этом контексте, заключается в том, что аппаратные средства с плавающей запятой по своей природе являются «потерями»: они имеют ограниченную точность и при достаточно больших числах (обратитесь к первоначальной цитате Дейкстры) вы не сможете различить xи x + 1или даже x + 1000000. Вы можете получить библиотеки с плавающей запятой «бесконечной» точности, но они медленные и в конечном итоге все еще ограничены доступной памятью.

Короче говоря, Дейкстра работал в области теории, и настоящее аппаратное и программное обеспечение не очень хорошо соответствует теоретическим идеалам. (Помните, в оригинальной «машине Тьюринга» указана бесконечная бумажная лента.)


2
Это не обязательно влияет на доказуемость, которая была контекстом вопроса. Верхние границы для этих видов потерь могут быть и часто точно рассчитаны теоретически. Другими словами, программы все еще могут быть достоверно корректными с точностью до определенного предела погрешности. В определенных областях я бы посоветовал всем, кто не учел эти проблемы, не выполнять свою работу должным образом!
Элиас Василенко

(1 - .7) * 100 должно быть 30, хотя JavaScript вернется, 30.000000000000004что является ошибкой. Будь то аппаратное или программное обеспечение, я лично не уверен.
Джон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.