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

25 просмотров

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта