Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть класс двусвязного списка(head,tail),как разделить его на два списка http://www.cyberforum.ru/cpp-beginners/thread1107932.html
Есть класс двусвязного списка(head,tail),как разделить его на два списка(отрицательные и положительные элементы) Как это сделать без выделения памяти?как я понимаю с указателями надо поработать.
C++ Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой Вычислить сумму ряда, состоящего из N слагаемых, и вывести результат с M знаками после запятой. http://www.cyberforum.ru/cpp-beginners/thread1107924.html
Биномиальные коэффициенты C++
Мне задали создать программу в которой Вводится 2 числа - n и k. И Необходимо вывести биномиальные коэффициенты. Но к сожалению Я не понял что такое "Биномиальные коэффициенты".
Сортировка по ключу одномерных массивов структур C++
Ключ: код детали. Методы сортировки: QuickSort и сортировка выбором.
C++ Назначение виртуальных методов класса http://www.cyberforum.ru/cpp-beginners/thread1107889.html
Что-то никак не могу разобраться с виртуальными методами классов. В учебниках пишут, что они нужны при наследовании для определения одной и той же функции в классах-наследниках со своим алгоритмом выполнения чего-либо. Вот у меня есть код: #include <iostream> using namespace std; class Object { public: virtual void TextVirtual() { cout << "Objects Virtual!" << endl; } void Text() { cout...
C++ Вывести имя и количество букв в фамилии.Вывести самое длинное слово Вывести имя и количество букв в фамилии.Вывести самое длинное слово и объясните по подробнее как вывести самое длинное слово подробнее

Показать сообщение отдельно
murderer
3191 / 1414 / 71
Регистрация: 06.10.2010
Сообщений: 3,067
28.07.2014, 15:50     Оптимизация кода с использование SIMD
На 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
 
Текущее время: 08:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru