170 похожих чатов

Господа. Кто-нибудь пользовался simd библиотекой eve? Есть условная функция void calcIndexes(const Position*

positions, std::int32_t* indexes, std::size_t count);

Собственно, эта функция должна массово на основании структуры Position рассчитывать index;

Структура Position имеет определение следующее:
struct Position {
std::int32_t x;
std::int32_t y;
}
Если представлять рассчеты без использование библиотеки eve, то это должно выглядеть примерно так

void calcIndexes(const Position* positions, std::int32_t* indexes, std::size_t count) {
for (std::size_t i = 0; i < count; ++i) {
indexes[i] = positions[i].x + positions[i].y //здесь суммирование для примера и простоты восприятия
}
}

Но я хочу использовать simd инструкции и библиотеку eve. И у меня проблема в том, как представить структуру Position в удобоваримую для eve форму. Кто что думает?

9 ответов

8 просмотров

Горизонтальное суммирование?

Александр- Автор вопроса
Dmitriy [Отпуск]
Горизонтальное суммирование?

Вообще нет, рассчет индекса в векторе по координатам x и у, суммирование просто для примера. А вообще код такой. std::size_t coords_to_offset(std::int32_t x, std::int32_t y) const { const std::int32_t size_x = static_cast<std::int32_t>(this->x); const std::int32_t size_y = static_cast<std::int32_t>(this->y); x = x - ((x / size_x) * size_x); y = y - ((y / size_y) * size_y); if (x < 0) { x = static_cast<std::int32_t>(this->x) - std::abs(x); } if (y < 0) { y = static_cast<std::int32_t>(this->y) - std::abs(y); } return y + x * this->x; }

Александр
Вообще нет, рассчет индекса в векторе по координат...

Чаще всего у тебя компилятор сам вполне может векторизовать без сторонних библиотек, просто убедись что alignment 16 у входных данных

Александр- Автор вопроса
Александр
Ну я же не это спрашивал)

Там в примерах в твоей библиотеке есть реализация strlen, которая принимает произвольный тип

Александр
Вообще нет, рассчет индекса в векторе по координат...

наверно вам рано лезть в SIMD, сначала надо хотя бы про operator% узнать

Александр- Автор вопроса
Boris Usievich
наверно вам рано лезть в SIMD, сначала надо хотя б...

Не очень красиво ты мне ответил. К чему эта агрессия? Про оператор % я знаю, а еще знаю что его аналога нет в simd инструкциях. Если тебе будет спокойнее, то вот - закомменченый вариант с процентом и перемесанный метод на вариант без оного.

Можно через floating point же

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
13
Карта сайта