Как раз сейчас у меня очередной этап портирования кода: x86(SSE, AVX) -> ARM (NEON). Могу только констатировать, что в данном вопросе Линукс полностью прав: Без нормальной девборды этот процесс весьма длительный и утомительный (с кросскомпиляцией и без дебагера).
P.S. А так на текущем этапе ARM явно не хватает широкого SIMD. NEON с его 128-bit на текущем этапе достаточно скромно выглядит по сравнению с AVX и уж тем более AVX-512.
Перспективы библиотеки конечно довольно туманны, ввиду огромного количества весьма достойных альтернатив. Однако она тоже полезна — лучший способ разобраться в методах машинного обучения — самому написать библиотечку для машинного обучения (проверено на себе). Так что удачи автору!
P.S. Сам достаточно длительное время посвятил оптимизациям прямого распространения сигнала в неросетях на CPU (проекты Simd и Synet). Если потребуется помощь — обращайтесь.
Да. Но камер то у нас тысячи… К стати будете детектирование и распознавание одной сетью делать? Просто полностью работу (получение видеоптока, декодирование, предварительная обработка, детектирование, распознавание, сопровождение, поиск по базе подозреваемых, выдача результата) выполнить на GPU врядли получиться. А если часть работы делать на СPU, то именно эта работы будет узким местом.
Типичный пример ошибки, когда максимальную скорость обработкой ГПУ предварительно подготовленных батчей экстраполируют на видео потоки, которые еще нужно декодировать и т д и т п.
Т.е. у вас домашний GPU может обрабатывать 60000 Full-HD кадров за 17секунд с работающими алгоритмами обнаружения и распознавания лиц? Дайте мне такой!
Или вы не это имеете в виду?
У вас хороший домашний сервер. Анализировать видео с миллиона видео камер в режиме реального времени — это коллосальная по вычислительным требованиям задача. Современные алгоритмы основанные на DNN очень ресурсоемки.
Теоретически можно увеличивать площадь острова за счет отвалов пустой породы (ила). Остров не очень большой, потому это может иметь практический смысл, если для размещения перерабатывающих заводов не будет хватать площади.
Хотелось бы сделать небольшое замечание, касательно быстрого деления на число. На самом деле кеширование результата операции целесообразно только для деление на небольшое число. Кроме того доступ к закешированным данным плохо векторизуется. Если деление настолько массовая операция, то наиболее оптимально будет ее выполнять на лету при помощи векторных инструкций. Нашел пример с умножением по модулю: stackoverflow.com/questions/46790237/vectorization-of-modulo-multiplication/46790553#46790553
Тем не менее алгоритм для всех точек одинаковый (ну может быть кроме краевых), хотя и использует разные данные. Потому тут SIMD самое место. Согласен про достижение 100% — это очень маловероятно, но 30-50% вполне себе достижимо. Значит вы занизили всего в 10-15 раз…
Всего-навсего FullHD 60fps видео камера и требуется простейшая обработка видеопотока реалтайм.
Давайте просто подсчитаем сколько у нас тактов на пиксель на том же ПК?
(3*10^9) / (1920*1080*60) = 24
Тут на лицо явная поддасовка фактов. Типичный своременный ПК с поддержкой AVX2 имеет производительность порядка 100 GFLOPs (32-bit float) на каждое ядро (2х2х8 операций за такт с использованием FMA). Т.е. вы занизили производительность ПК в 30 раз!
Здравствуйте. С OpenMP 4.5 не работал. В современных компиляторах достаточно неплохо работает автовекторизация кода. К сожалению, она хорошо работае только для тривиальных случаев. Чуть что посложнее — и приходится ручками оптимизировать. Например, я совершенно не представляю, как бы компилятор справился с автовекторизацией алгоритма из статьи.
По хорошему счету, полет к звездам за время жизни человека практически не возможен. Однако, если отказаться от требования к столь короткому перелету, то задача будет вполне решаемой.
Небольшой расчет:
Диаметр тоннеля метро — 5.5 метра.
Если проходить 47 метров в час, то нужно изымать из тоннелей более 1100 кубометров грунта или около 2 тыс тонн (в самом оптимистическом случае).
Чтобы забрать этот грунт потребуется в час минимум 100 рейсов 20-ти тонников. Или 1 самосвал раз в 36 секунд.
Пишу в свободное время библиотеку связанную обработкой изображений. Сейчас она поддерживает SIMD расширения различных CPU (x86, ppc, arm). Было бы интересно поработать и с MIPS (добавить поддержку MSA). Можно ли как-то получить удаленный доступ к байкалу?
P.S. А так на текущем этапе ARM явно не хватает широкого SIMD. NEON с его 128-bit на текущем этапе достаточно скромно выглядит по сравнению с AVX и уж тем более AVX-512.
P.S. Сам достаточно длительное время посвятил оптимизациям прямого распространения сигнала в неросетях на CPU (проекты Simd и Synet). Если потребуется помощь — обращайтесь.
Или вы не это имеете в виду?
У меня получилось, что второй вариант более чем вдвое быстрее (35 ms и 15 ms).
stackoverflow.com/questions/46790237/vectorization-of-modulo-multiplication/46790553#46790553
Тут на лицо явная поддасовка фактов. Типичный своременный ПК с поддержкой AVX2 имеет производительность порядка 100 GFLOPs (32-bit float) на каждое ядро (2х2х8 операций за такт с использованием FMA). Т.е. вы занизили производительность ПК в 30 раз!
Диаметр тоннеля метро — 5.5 метра.
Если проходить 47 метров в час, то нужно изымать из тоннелей более 1100 кубометров грунта или около 2 тыс тонн (в самом оптимистическом случае).
Чтобы забрать этот грунт потребуется в час минимум 100 рейсов 20-ти тонников. Или 1 самосвал раз в 36 секунд.