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

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

Войти
Регистрация
Восстановить пароль
 
Heisenberg
44 / 45 / 3
Регистрация: 11.08.2010
Сообщений: 226
#1

Оптимизация кода с использование SIMD - C++

28.02.2014, 19:59. Просмотров 535. Ответов 1
Метки нет (Все метки)

Есть код

C++
1
2
3
4
inline double dot(const float* v1, const float* v2)
{
    return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
}
Переписал его вот так

C++
1
2
3
4
5
6
7
8
#define GET(res, i) _res.m128_f32[i]
inline double dot(const float* v1, const float* v2)
{
__m128 _one = {v1[0], v1[1], v1[2], 0.0f };
__m128 _two = {v2[0], v2[1], v2[2], 0.0f };
__m128 _res = _mm_mul_ps(_one, _two);
return GET(_res, 0) + GET(_res, 1) + GET(_res, 2);
}
По скорости получилось примерно одно и то же, по результатам этот вариант даже на пару % медленнее. Возможно ли его как-то оптимизировать еще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2014, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оптимизация кода с использование SIMD (C++):

оптимизация кода! - C++
Народ я тут написал простенькую программу которая вычесляет x из уровнения вида a+x=b x+a=b a+b=x Тоесть пишешь например:...

оптимизация кода - C++
Задача: определить, является ли последовательность скобок действительной. Длинна строки не превышает 100000. Например: № Input Output ...

Оптимизация кода - C++
Здравствуйте! у меня есть такая функция, которая очень часто вызывается: int fun(int x_,int y_,int z_) { for(int k=0;k<80;k++) {...

Оптимизация кода - C++
В общем дело такое, мне нужно 2 одинаковые программы(небольшие), только одна программа должна быть неоптимизированная, а другая, точно...

Оптимизация кода (C++) - C++
Добрый вечер. У меня есть две функции. Вопрос:"Как оптимизировать этот код, пользуясь тем, что тела отличаются лишь несколькими строчками?"...

Оптимизация кода - C++
Пожалуйста форумчане как можно сократить этот код Особенно от 27 до 90 строки #include <iostream> using namespace std; int main() ...

1
murderer
3202 / 1426 / 75
Регистрация: 06.10.2010
Сообщений: 3,148
28.07.2014, 15:50 #2
На SSE 4.1 это вычисляется одной инструкцией dpps, вектора нужно выравнивать по границе 16 байт.

Добавлено через 1 час 44 минуты
Что-то вроде
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <smmintrin.h>
 
void main(){
    #define dot(x,y)_mm_dp_ps(x,y,0x71).m128_f32[0]
 
    __m128 a={1.0f, 2.0f, 3.0f, 4.0f};
    __m128 b={2.0f, 2.0f, 3.0f, 4.0f};
 
    printf("%f",dot(a,b));
}
На выходе у MSVC вполне кошерный код
Assembler
1
2
3
movaps xmm0,[a]
movaps xmm1,[b]
dpps   xmm1,xmm0,71h
Хотя руками можно и проще записать
Assembler
1
2
movaps xmm0,[a]
dpps   xmm0,[b],71h
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 15:50
Привет! Вот еще темы с ответами:

Оптимизация кода - C++
main: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;keyBuffer.h&quot; #include &quot;pause.h&quot; #include &lt;windows.h&gt; const char...

Оптимизация кода - C++
Как сравнить 2 строки. Вот как их задавал в ходе программы string h,b; ... char * text = NULL; if ( OpenClipboard(0) ) { ...

оптимизация кода - C++
Добрый вечер всем. У меня такая проблема: написал прогу, необходимо продемонстрировать ее работу. Т.е. есть L2 список, дек и массив деков,...

Оптимизация кода - C++
Есть вот такой кусочек кода integer h (integer k,n) {return k–n*3 ;} . . . . . z = h (k1, n2) ; Подскажите - как его можно...


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

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

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