Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Teacher269
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 12
#1

Как максимально быстро сложить два динамических одномерных массива? SSE? - C++

12.01.2013, 18:39. Просмотров 955. Ответов 4
Метки нет (Все метки)

Всем привет! Нужно максимально быстро сложить поэлементно два байтовых массива.
Есть:
C++
1
2
3
4
5
6
7
8
9
10
unsigned char *buf1;
unsigned char *buf2;
unsigned char *buf3;
buf1= new unsigned char[100500];
buf2= new unsigned char[100500];
buf3= new unsigned char[100500];
//чем-то заполняю. И теперь нужно:
for (long i=0;i<100500;i++){
buf3[i]=buf2[i]*3+(255-buf1[i]);//не суть, какая формула сложения
}
Так вот, этот стандартный способ работает довольно медленно. Я слышал, что с помощью SSE можно как-то обрабатывать сразу 16 байт, но не смог разобраться. Везде в примерах участвуют float или double, а мне нужны байты.
Я новичок. Гуглить уже пытался, но ничего не нашел. Может быть кто-нибудь напишет пример сложения "пачки" байт. Вряд ли это очень большой код. Или ссылку, пожалуйста, киньте на что-то подобное.
Заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как максимально быстро сложить два динамических одномерных массива? SSE? (C++):

Дано два одномерных массива размерностью n, сложить сумму этих массивов и найти наибольшее значение - C++
Дано два одномерных массива размерностью n, сложить сумму этих массивов и найти наибольшее значение. Решите пожалуйста :)

Как сложить два массива - C++
Как сложить два массива и присвоит ответь третьему массиву int m={5,6,7}; int n={2,3,8}; in p;

Как сложить два символьных массива в один? - C++
Извиняюсь если вопрос уже был, но я так и не нашел ответа. Как записать два слова в один массив/указатель, чтобы его потом можно было...

Как сложить два случайных числа из массива? - C++
Как сложить два случайных числа из массива с++

Как сложить два float-а, имея их представление в виде массива байт? - C++
Здравствуйте. Нужна помощь. Я храню float числа в виде массива 4-х байтов. Подскажите как не переводя массив обратно во float,...

два одномерных массива - C++
Прошу помощи Дано два одномерных массива (заполнить случайно) х и у одинаковой размерности. Вычислить...

4
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
12.01.2013, 18:44 #2
std::memcpy();

EDIT: ой сложить же нужно. Тогда только Ваш способ. Так же можете делать в несколько потоков.
0
Teacher269
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 12
12.01.2013, 19:11  [ТС] #3
но ведь еще MMX вроде умел складывать или умножать сразу по 4 байта. Я натыкался на пример, где перемножалось сразу по 4 float элемента двух массивов
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
12.01.2013, 19:14 #4
Так Вам ведь нужно сложение по 1 байту, а не по 4 байта.
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.01.2013, 19:15 #5
Цитата Сообщение от Teacher269 Посмотреть сообщение
MMX
Он работает с векторами всего в 64 бита. SSE же работает с векторами в 128 бит. Еще есть AVX - есть только на новых процессорах, но зато там 256битные векторы и прочие вкусности.
Если вы используете gcc, то можете использовать std::valarray, который очень круто векторизируется. Либо оставить цикл так, как есть, и предоставить компилятору его векторизацию(почти все современные компиляторы умеют это делать, лучше всех справляются gcc и intel).
Ну или можете считать с помощью intrinsics. Но это уже гораздо сложнее, чем просто свалить работу на компилятор.
0
12.01.2013, 19:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 19:15
Привет! Вот еще темы с ответами:

Два массива одномерных - C++
Даны два одномерных массива, состоящих из n чисел (n-вводится с клавиатуры). Найти элементы, которых нет одновременно и в том и в другом...

Два динамических массива в конструкторе класса - C++
Доброго времени суток Вам!) Есть такая проблема, ни как не могу создать сразу два динамических массива в классе . Один у меня получился: ...

Сложить поэлементно два массива - C++
Помогите пожалуйста, в чем ошибка. Некорректно складывает, в итоге получается неправильный ответ #include &lt;iostream&gt; using namespace...

Сложить два массива поэлементно - C++
Необходимо базовый класс Array: массив и поле для хранения количества элементов массива... реализовать перегрузку оператора и поэлементное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru