В настоящее время я участвую в крупномасштабном проекте C++ HPC, ориентированном на численное моделирование, в частности на методе конечных элементов (FEM). Наш проект охватывает различные платформы на базе Linux и включает в себя компиляцию с использованием различных архитектур и компиляторов, включая GCC, Clang и ICC.
В стремлении к оптимальной производительности без ущерба для числовой точности и стабильности мы столкнулись с проблемой с некоторыми флагами оптимизации, такими как -O3, которые неявно включают такие флаги, как -ffast-math, потенциально жертвуя точностью ради незначительного прироста скорости. В частности, такие флаги, как -funsafe-math-optimizations, -ffinite-math-only и -fno-rounding-math, активируются вместе с -O3, что вызывает обеспокоенность.
Чтобы решить эту проблему, мы изучаем реализацию тестов, которые могут предупреждать нас об отклонениях от соответствия стандартам чисел с плавающей запятой во время компиляции. В идеале эти тесты должны работать статически и выдавать предупреждения о проблемных конфигурациях оптимизации до начала выполнения.
Хотя мы встречали ссылки, обсуждающие соответствие стандарту IEEE 754 и стандартную обработку крайних случаев (например, сигнализацию NaNs, FTZ/DAZ), мы не нашли руководства по реализации таких тестов.
Мой вопрос: Существует ли стандартный подход или существующий набор инструментов для проведения тестов для обеспечения соблюдения требований стандарту IEEE 754 и соответствующей обработке вычислений с плавающей запятой в проектах C++? Хотя мы знаем о таких методах, как проверка определенных макросов (
Код: Выделить всё
__FAST_MATH__Any insights or recommendations would be greatly appreciated. Thank you!
These are the references I have consulted:
- https://gcc.gnu.org/onlinedocs/gcc/Opti ... tions.html
- https://clang.llvm.org/docs/CommandGuide/clang.html
- https://compendium.hpc.tu-dresden.de/so ... compilers/
- https://simonbyrne.github.io/notes/fastmath/
- https://kristerw.github.io/2021/10/19/fast-math/
- https://clang.llvm.org/docs/UsersManual.html
- https://dmalcolm.fedorapeople.org/gcc/2 ... ation.html
Источник: https://stackoverflow.com/questions/781 ... c-projects
Мобильная версия