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 ответов

28 просмотров

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

Александр- Автор вопроса
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 же

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта