Здравствуйте. С 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%.
Стоит отметить, что решение менее универсально, чем оригинальный tiny_cnn и тем более tiny_dnn. Кроме того оно завязано на библиотеку Simd. А это противоречит основной концепции tiny_dnn — все в заголовочных файлах и желательно без сторонних зависимостей. Потому просто сделать pull request будет довольно затруднительно.
Начал использовать tiny_dnn, когда он еще назывался tiny_ cnn. Повелся на простоту интеграции в проект. На редкость тормознутое творение. Стал разбираться в причинах — авторы так увлеклись распараллеливанием алгоритмов и асинхронным их исполнением, что дошли до маразма. Апофеозом было копирование 10 чисел, путем распараллеливания на 8 потоков! Естественно, что из-за потерь на синхронизацию производительность была ниже плинтуса. Убрал лишнее распараллеливание, добавил где надо SIMD оптимизации — вроде стало работать более менее быстро. Только по итогу от исходного проекта практически ничего не осталось. В итоге в конце концов свой велосипед написал. В последней версии они переписали очень многое — стало гораздо лучше в плане производительности, но все равно свой велосипед в разы опережает.
Вообще-то все электроны неотличимы друг от друга (если мы их поменяем местами, то ничего не изменится). Кроме того, такого понятия как точное положение электрона в пространстве — по сути не существует (см. неопределенность Гейзенберга).
Что вы имеет в виду, когда говорите про эмуляцию команд AVX2 в процессорах интел младше Skylake? На сколько я помню, эмулировались лишь gather-инструкции.
Сегодня по численности коровы занимают второе (после человека) место — на Земле их 1,3 млрд. особей. Общий вес живого мычащего поголовья втрое превышает коллективную массу человечества.
Так разве все коровы едят водоросли? Этот эффект мог распространится только среди коров регулярно едящих водоросли. Но в древности это могли быть только коровы живущие на побережье, а таких коров не так много по сравнению с живущими в глубине континента.
Диаметр тоннеля метро — 5.5 метра.
Если проходить 47 метров в час, то нужно изымать из тоннелей более 1100 кубометров грунта или около 2 тыс тонн (в самом оптимистическом случае).
Чтобы забрать этот грунт потребуется в час минимум 100 рейсов 20-ти тонников. Или 1 самосвал раз в 36 секунд.
P.S. На более древних процессорах выигрыш от выравнивания в среднем был порядка 20-30%. А допустим, на PowerPC, так вообще более 50%.
Сам мой велосипедСамо мое решение находится в открытом доступе:https://github.com/ermig1979/Simd/blob/master/src/Simd/SimdNeural.hpp
Стоит отметить, что решение менее универсально, чем оригинальный tiny_cnn и тем более tiny_dnn. Кроме того оно завязано на библиотеку Simd. А это противоречит основной концепции tiny_dnn — все в заголовочных файлах и желательно без сторонних зависимостей. Потому просто сделать pull request будет довольно затруднительно.
Хотя я наверное был бы рад помочь.