Комментарии 17
Хабрахабр — багтрекер?
-9
Предупрежден — значит вооружен
+3
я написал в PGI. Но у них нигде не афишируется, что такая стандартная функция как sort имеет баг, который может испортить результаты очень многих программ (а может и чьих-то исследований). Я счел необходимым предупредить других пользователей — и хабрахабр для этого подходит как нельзя лучше.
+16
испортить результаты очень многих программ (а может и чьих-то исследований)
Вживую столкнулся со случаем, когда баг в сортировке (программист не учел, что qsort может менять местами порядок равных элементов) испортил исследования одного ученого. Ученый наблюдал в данных своих экспериментов интересный эффект и даже готовился опубликовать о нем научную статью. Но когда был найден и исправлен этот баг — то эффект исчез. Прощай, нобелевка!
А заблуждение насчет эффекта существовало несколько месяцев. Эффект демонстрировался коллегам и студентам как минимум на нескольких семинарах и плакатах.
+3
Кстати, мои близкие размышления: Большой Калькулятор выходит из под контроля.
+1
Спасибо, почитал. К сожалению, одним лишь статическим анализом научное программирование «вылечить» невозможно. Мне довелось налаживать много реализаций численных методов, кода для обработки сигналов. При внешней корректности кода, возможностей для ошибок — неисчислимое число. Может быть неправильно вычислен какой-нибудь индекс или значение по формуле — и все это при отсутствии типичных ошибок, выявляемых статическим анализатором, как то выхода за границы массива, неопределенного поведения C++ и т.д. Я применял изощренные методы для отладки этого кода, и почти каждый раз новый изощренный метод помогал обнаружить новые ошибки.
Один из найденных мной способов проверки — это сравнивать результаты вычислений «боевой» (оптимизированной, сложной) реализации некоторого метода с результатами максимально упрощенной, но оттого неоптимальной и имеющей ограничения на размер данных и т.д. реализации. Если разность результатов находится в пределах точности представления чисел — то можно быть более-менее спокойным.
Еще один метод — получить тот же результат другим способом или решить обратную задачу. Так как вероятность получить ошибку в разных алгоритмах, дающую одни и те же последствия, мала — то расхождение ответов свидетельствует об ошибке либо в тестируемом коде, либо в тестирующем.
Один из найденных мной способов проверки — это сравнивать результаты вычислений «боевой» (оптимизированной, сложной) реализации некоторого метода с результатами максимально упрощенной, но оттого неоптимальной и имеющей ограничения на размер данных и т.д. реализации. Если разность результатов находится в пределах точности представления чисел — то можно быть более-менее спокойным.
Еще один метод — получить тот же результат другим способом или решить обратную задачу. Так как вероятность получить ошибку в разных алгоритмах, дающую одни и те же последствия, мала — то расхождение ответов свидетельствует об ошибке либо в тестируемом коде, либо в тестирующем.
+4
Я не говорил, что статический анализ панацея. Но я хотел привлечь внимание к этой проблематике. Спасибо за комментарий.
+1
А что, скажите мне пожалуйста, может заставить быть привязанным не к gcc, не к clang, не к интеловскому или майкрософтовскому компиляторам, а вот к этой вот паранормальной (с такими-то багами!) штуковине?
+12
Кстати, тоже интересно. Если честно, то я впервые узнал об этом компиляторе из поста.
+13
Одно время (несколько лет назад) PGI компилятор для фортрана был довольно популярным (особенно для AMD процессоров). Ну и наверное люди продолжают использовать знакомые программы дальше и для других языков.
Сам-то я просто получил баг репорт, вот и пришлось разбираться.
Сам-то я просто получил баг репорт, вот и пришлось разбираться.
+2
С этим компилятором идет своя стандартная библиотека или они используют стороннюю?
0
Если я правильно понял, с этим компилятором (pgcpp) идет своя STL, а второй компилятор от PGI (pgc++) использует системную STL.
0
обычно это кое как должно быть похоже на стандарт pubs.opengroup.org/onlinepubs/009695399/
0
Один из немногих компиляторов с поддержкой. OpenACC.
+1
На днях я получил баг репорт, что мой код неправильно работает, если его скомпилировать при помощи pgcpp.
Судя по всему не сам автор, а один из его клиентов (пользователей его библиотеки?) по каким-то причинам использует творение PGI.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ужасный баг в Portland Group C++ компиляторе