All streams
Search
Write a publication
Pull to refresh
100
0
Ермолаев Игорь @ErmIg

Пользователь

Send message
Да. Можно. Мне наверное не сильно сложно было бы добавить. Но на сколько это актуально?
Здравствуйте. С OpenMP 4.5 не работал. В современных компиляторах достаточно неплохо работает автовекторизация кода. К сожалению, она хорошо работае только для тривиальных случаев. Чуть что посложнее — и приходится ручками оптимизировать. Например, я совершенно не представляю, как бы компилятор справился с автовекторизацией алгоритма из статьи.
Роботы и ИИ.
По хорошему счету, полет к звездам за время жизни человека практически не возможен. Однако, если отказаться от требования к столь короткому перелету, то задача будет вполне решаемой.
Небольшой расчет:
Диаметр тоннеля метро — 5.5 метра.
Если проходить 47 метров в час, то нужно изымать из тоннелей более 1100 кубометров грунта или около 2 тыс тонн (в самом оптимистическом случае).
Чтобы забрать этот грунт потребуется в час минимум 100 рейсов 20-ти тонников. Или 1 самосвал раз в 36 секунд.
Пишу в свободное время библиотеку связанную обработкой изображений. Сейчас она поддерживает SIMD расширения различных CPU (x86, ppc, arm). Было бы интересно поработать и с MIPS (добавить поддержку MSA). Можно ли как-то получить удаленный доступ к байкалу?
У меня есть небольшая собственная библиотечка по обработке изображений. Тоже есть оптимизации под практически все расширения x86, Arm, PowerPC. В ней есть функция SimdResizeBilinear. Конечно сравнивать напряму нельзя. Но при ресайзе изображения (1920х1080 -> 1728x972) получается для одного потока: (Gray-8 — 0.426 мс, BGR-24 — 2.477 мс, BGRA-32 — 2.063 мс).
Померял влияние наличия выравнивания на Haswell при помощи тестов встроенных в https://github.com/ermig1979/Simd. Получилось, что в среднем по больнице, варавнивание дает где-то 6-7%. По отдельным алгоритмам разброс достаточно большой (от 0 до 40%). Хотя здесь в случае выровненных данных используется (_mm_load_ или _mm256_load_) иначе — (_mm_loadu_ или _mm256_loadu_). Так что не совсем ясно какая доля из этих 6% получается за счет использования специальных инструкций, а что за счет выравнивания памяти.

P.S. На более древних процессорах выигрыш от выравнивания в среднем был порядка 20-30%. А допустим, на PowerPC, так вообще более 50%.
В том-то и вся проблема, что не используют. А надобы использовать.
Я бы еще обязятельно добавил, что width != row_size — многие реализации алгоритмов страдают этим багом.
Тут есть ряд моментов. Сам мой велосипед Само мое решение находится в открытом доступе:

https://github.com/ermig1979/Simd/blob/master/src/Simd/SimdNeural.hpp

Стоит отметить, что решение менее универсально, чем оригинальный tiny_cnn и тем более tiny_dnn. Кроме того оно завязано на библиотеку Simd. А это противоречит основной концепции tiny_dnn — все в заголовочных файлах и желательно без сторонних зависимостей. Потому просто сделать pull request будет довольно затруднительно.

Хотя я наверное был бы рад помочь.
Начал использовать tiny_dnn, когда он еще назывался tiny_ cnn. Повелся на простоту интеграции в проект. На редкость тормознутое творение. Стал разбираться в причинах — авторы так увлеклись распараллеливанием алгоритмов и асинхронным их исполнением, что дошли до маразма. Апофеозом было копирование 10 чисел, путем распараллеливания на 8 потоков! Естественно, что из-за потерь на синхронизацию производительность была ниже плинтуса. Убрал лишнее распараллеливание, добавил где надо SIMD оптимизации — вроде стало работать более менее быстро. Только по итогу от исходного проекта практически ничего не осталось. В итоге в конце концов свой велосипед написал. В последней версии они переписали очень многое — стало гораздо лучше в плане производительности, но все равно свой велосипед в разы опережает.
Что есть перемещение? Создание копии и удаление оригинала. Не создавайте проблем на пустом месте!
Пока люди этого не умеют, но физических причин почему это вообще нельзя сделать — нет.
Вообще-то все электроны неотличимы друг от друга (если мы их поменяем местами, то ничего не изменится). Кроме того, такого понятия как точное положение электрона в пространстве — по сути не существует (см. неопределенность Гейзенберга).
Что вы имеет в виду, когда говорите про эмуляцию команд AVX2 в процессорах интел младше Skylake? На сколько я помню, эмулировались лишь gather-инструкции.
Сегодня по численности коровы занимают второе (после человека) место — на Земле их 1,3 млрд. особей. Общий вес живого мычащего поголовья втрое превышает коллективную массу человечества.
Так перевес CO2 проявляется только при -20 С в безоблачную погоду.
Так разве все коровы едят водоросли? Этот эффект мог распространится только среди коров регулярно едящих водоросли. Но в древности это могли быть только коровы живущие на побережье, а таких коров не так много по сравнению с живущими в глубине континента.

Information

Rating
4,802-nd
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity