Есть ли более быстрый способ добавления массивов? - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь оптимизировать скорость.Я просто хочу добавить значения из одного массива в другой массив.

Это итерация по пикселям в изображении, поэтому даже для большого изображения это занимает совсем немного времени.Проблема в том, что когда я анимирую изображение, это становится значительным.

Я начал с простого цикла for.Параллельный цикл был быстрее.Параллельный цикл с вложенным циклом for был быстрее.

Я все еще чувствую, что должно быть что-то, что использует инструкции низкоуровневого процессора, как это делает memcopy.Добавление массивов похоже на то, что было бы в наборе инструкций.

Код ниже, где я нахожусь в банкомате.

            Parallel.For(0, size.Width, (i) => {
                int from = i * size.Height;
                int to = from + size.Height;
                for (int j = from; j < to; j++) data[j] += map.Data[j]; }
            );

1 Ответ

1 голос
/ 25 мая 2019

Добавление массивов похоже на то, что будет в наборе инструкций

Это обычно называется SIMD, а для x86 / x64 это SSE (для ARM у вас NEON, для PowerPC, AltiVec и т. Д.).

В C # нет языковой поддержки, но некоторые JIT-компиляторы (Mono.Simd, RyuJIT) имеют специальную поддержку для преобразования вызовов определенных функций библиотеки в инструкции SSE.

См

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...