Кстати, есть идея для предупреждения, но вот только не могу формализовать условие, чтобы отсечь ложноположительные срабатывания.
Если на гитхабе сделать поиск по FLT_MIN (1e-38), то видно, что в каждом десятом случае её пытаются по ошибке использовать вместо -FLT_MAX, особенно заметно при инициализации граничных здачений для всяких bounding box.
Похоже, я был неправ, когда написал что он считает сразу 4 синуса и косинуса. Только 4 синуса, компилятор сам выбрасывает ненужные инструкции в процессе dead code elimination.
По поводу dagor_sin: на самом деле он вызывает v_sincos4, который считает сразу 4 синуса и косинуса и отдаёт единственный float, так что потенциал для оптимизации вроде бы есть.
Я год назад даже пытался его оптимизировать, даже получил смешные 10% ускорения, но не смог получить коэфициенты полинома, который давал бы такую же точность. Кажется, у меня была ошибка в двух последних битах мантиссы.
Проблемы расхождения в fp16 проявлялись чаще, чем в fp32. В основном это было связано с переполнением значений fp16 в активациях и градиентах. Максимум fp16 по модулю — 65535. Итогом переполнения становился NaN в loss'е.
А через какие операции у вас прошел inf, чтобы стать NaN?
Для большинства операций inf вполне безопасен: x/inf=0, x*inf=inf (если x!=0), exp(inf)=inf, log(inf)=inf, tanh(inf)=1
А что если скопировать прямо в проводнике на другой диск? Что-то вроде дефрагментации для бедных. Если будет копироваться по 200 файлов в секунду, то уйдут одни сутки.
Там были две большие ссылки, я посчитал что это занимать 3 строки ссылками — это перебор, а если делать ссылки из участка текста, то они не так заметны, «https://» сразу настраивает на нужный контекст.
Объём оперативной памяти не играл большой роли, игры использовали до 3 GB, компилятор — до 4 GB. Да, остальная память при компиляции использовалась для кеширования файлов, но чтение занимало доли процента от времени по сравнению с работой компилятора.
Видеокарты практически одинаковы по производительности, судя по различным тестам. При разности FPS в 1.5 раза для наших целей это не так критично.
У нас не было планов делать бенчмарк процессора, мы преследовали другие цели, и поэтому сравнивали хоть с чем-то похожим по году выхода процессора и производительности видеокарты.
Как можно в 28 лет, постоянно работая с текстами, так «на отвали» эти тексты оформлять?
Линейное решение тоже может быть быстрым.
Удобный конвертер https://www.h-schmidt.net/FloatConverter/IEEE754.html
И убираем водяной знак...
Кстати, есть идея для предупреждения, но вот только не могу формализовать условие, чтобы отсечь ложноположительные срабатывания.
Если на гитхабе сделать поиск по FLT_MIN (1e-38), то видно, что в каждом десятом случае её пытаются по ошибке использовать вместо -FLT_MAX, особенно заметно при инициализации граничных здачений для всяких bounding box.
https://github.com/PacktPublishing/Mastering-Graphics-Programming-with-Vulkan/blob/2ad4e94a0e003d37dd3dbef46cc033a483f133d6/source/chapter7/graphics/gltf_scene.cpp#L310
https://github.com/spaceyjase/godot/blob/be63fdff8031bf5fdb0b068cb10b22566f98f7d0/servers/rendering/renderer_scene_occlusion_cull.h#L81
https://github.com/JimmieKJ/unrealTournament/blob/cac883d9143e72d21c046bfa4a0915b3ad533dad/Engine/Source/Runtime/Engine/Private/LocalPlayer.cpp#L830
Похоже, я был неправ, когда написал что он считает сразу 4 синуса и косинуса. Только 4 синуса, компилятор сам выбрасывает ненужные инструкции в процессе dead code elimination.
По поводу dagor_sin: на самом деле он вызывает v_sincos4, который считает сразу 4 синуса и косинуса и отдаёт единственный float, так что потенциал для оптимизации вроде бы есть.
Я год назад даже пытался его оптимизировать, даже получил смешные 10% ускорения, но не смог получить коэфициенты полинома, который давал бы такую же точность. Кажется, у меня была ошибка в двух последних битах мантиссы.
Это не перевод, а просто кусок мусора.
__m128i
http://hackles.org/cgi-bin/archives.pl?request=1
Да, точно, там деление inf/inf
А через какие операции у вас прошел inf, чтобы стать NaN?
Для большинства операций inf вполне безопасен: x/inf=0, x*inf=inf (если x!=0), exp(inf)=inf, log(inf)=inf, tanh(inf)=1
А что за задача такая? Почему именно файловая система, а не база данных?
А что если скопировать прямо в проводнике на другой диск? Что-то вроде дефрагментации для бедных. Если будет копироваться по 200 файлов в секунду, то уйдут одни сутки.
У нас не было планов делать бенчмарк процессора, мы преследовали другие цели, и поэтому сравнивали хоть с чем-то похожим по году выхода процессора и производительности видеокарты.