LINUX.ORG.RU

SSE -> no SSE(NEON)

 , ,


1

1

Есть библиотека, в которой много используется SSE инструкций.
Под arm (ARMv7 Processor rev 3) естественно не собирается.

Пробовал использовать SSE2NEON (https://github.com/jratcliff63367/sse2neon/blob/master/SSE2NEON.h) но автор видимо имплеминтировал только то, что ему нужно.
И после нескольких дней дописываний просто заглушек функций надоело.

Поэтому вопрос: есть ли заголовочный файл, чтоб конвертировать SSE инструкции в обычные?

★★★★

Последнее исправление: ymuv (всего исправлений: 1)

А в той самой библиотеке разве нет альтернативного кода, без использования SSE? SSE написано на ассемблере, или интринсиками?

Есть вариант скормить эти SSE в Hex-Rays, поковырять немного чтоб довести до компилируемого состояния, и попробовать собрать сишным компилятором

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

А в той самой библиотеке разве нет альтернативного кода, без использования SSE?

Нет. (пример https://github.com/GPUOpen-ProfessionalCompute-Libraries/amdovx-core/blob/mas...)


Есть вариант скормить эти SSE в Hex-Rays

Оно ведь «декомпилирует» SSE в SSE. Или оно умеет разворачивать?

ymuv ★★★★
() автор топика
Ответ на: комментарий от SZT

Думаю проще найти другую библиотеку или переписать ассемблерные функции целиком с нуля чем так ходить по граблям.

anonymous
()

Да, еще в Qemu есть какой-то http://wiki.qemu.org/Documentation/TCG который умеет на лету преобразовывать инструкции эмулируемой системы в инструкции хоста. http://wiki.qemu.org/Documentation/TCG/backend-ops это то, во что динамически компилируются опкоды эмулируемой программы. Потом они естественно переделываются в нативный код целевой архитектуры

Кроме того, есть еще вот это вот, https://eltechs.com/ru/product/exagear-desktop/ где тоже используется динамическая рекомпиляция.

Я к чему веду. Можно написать код на Си, в котором чтобы использовались все нужные интринсиики, скомпилировать и скормить это в подобный эмулятор, потом выдрать прямо из работающего эмулятора перекомпилированный в ARM код интринсиков, и потом этот код уже можно использовать. Хотя это пожалуй слишком сложный метод

SZT ★★★★★
()

The code is highly optimized for both x86 CPU and OpenCL for GPU

ССЗБ.

но автор видимо имплеминтировал только то, что ему нужно.

И после нескольких дней дописываний просто заглушек функций надоело.

А зря.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Я пока не имплементирую ф-ции, а просто заглушки.
Если нужна ф-ия __m128i __some_func(__m128i)
то у меня выглядит так:

FORCE_INLINE __m128i __some_func(__m128i a) 
{
__m128i retVal;
//TODO
return retVal;
}

ymuv ★★★★
() автор топика
Ответ на: комментарий от anonymous

другую библиотеку

Есть имплементация от Khronos, но она оооочень медленная.

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

А что их(заглушки) имплементировать-то? Эти заглушки можно автоматически сгенерировать, зная сигнатуру функции. А вот реализацию - да, надо писать.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
14 сентября 2016 г.
Ответ на: комментарий от yoghurt

Нет. Только решили, но не переходили. Возможно сдерживает тот факт, что реализация от khronos https://www.khronos.org/openvx/ в десятки раз медленная. (на десктопе только тестируем, продукт также работает на embedded.

Делал несколько тестов, сравнивал разные реализации openvx.
Могу дать результаты, если интересные.

ymuv ★★★★
() автор топика
Ответ на: комментарий от devl547

Оптимизация это наоборот хорошо, но вот за отсутствие фоллбэка нужно бить по рукам.

anonymous
()
Ответ на: комментарий от devl547

Да. На какой версии тестировал уже не помню.

ymuv ★★★★
() автор топика

Такого нет.

Лучше реализуй все на неоне сам. Быстрее будет, серьезно. Или тупо сишный вариант напиши.

Подпишусь, однако.

a1batross ★★★★★
()
Ответ на: комментарий от ymuv

Было бы интересно посмотреть, правда!

В реализации от Khronos так и написано, что она только сэмпл и всерьез её воспринимать не стоит.

ЗЫ. Неужели хватило этих 40+ стандартных кернелов?

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

ЗЫ. Неужели хватило этих 40+ стандартных кернелов?

Для тестов хватило. Если бы делали в продукте, добавляли бы.

Напиши завтра после 12 (по Киеву), так как вероятно забуду. Результаты на работе.

ymuv ★★★★
() автор топика
Ответ на: комментарий от yoghurt

http://rgho.st/private/7mMlB87mM/cd1ba94069c5d7592339ae90c4dcbb8a

В примере статистика и код. ЕМНИП нужно линковать с разными реализациями openvx (amd, khronos, visionworks).
Для теста сравнивается скорость opencv2 и opencv3.
Если будет возможность, покажите Ваши результаты.

ymuv ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.