Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 3
Регистрация: 04.11.2016
Сообщений: 107

Есть ли simd команды для синуса?

22.09.2021, 09:08. Показов 3077. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я уже наигрался с SIMD SSE командами, надоело умножать двухчисловые векторы, захотелось чего-нибудь интересного.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <x86intrin.h>
 
using namespace std;
 
int main()
{
    float a[2] = {1.f, 2.f};
    float b[2] = {1.f, 2.f};
    float * c;
    /*
    __m128 x = _mm_load_ps(a); // Загружает два числа в буфер SSE
    __m128 y = _mm_load_ps(b);
    __m128 z = _mm_mul_ps(x, y); // И умножает их
    _mm_store_ps(c, z); // Затем выгружает значение
    */
    __m128 z = _mm_mul_ps(*(__m128*)a, *(__m128*)b); // Хотя можно было и так
    c = (float*)&z;
    cout << c[0] << ", " << c[1] << endl;
}
// Доки читал здесь https://algorithmica.org/ru/sse
// и здесь https://docs.microsoft.com/en-us/cpp/intrinsics/x64-amd64-intrinsics-list
// Кстати, вы можете умножать и массивы из коротких целых беззнаковых в 512 битном векторе.
Есть вопрос, а есть ли SIMD команды, которые, ну допустим, вычисляют синус? Просто было бы очень удобно, возможно это бы увеличило производительность в игровых движках.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2021, 09:08
Ответы с готовыми решениями:

Есть ещё команды в python для создания текста кроме команды ui.lineEdit.setText("")?
Я пишу свой калькулятор но при тестировании кнопок я заметил что команда ui.lineEdit.setText(&quot;Любое число&quot;) просто заменяет...

Какие есть команды для заполнения таблиц?
sql желательно и пример, если можно.

Есть ли команды для упрощения команд с умножением и делением
Здравствуйте. Мне интересен один вопрос. В программе Pascal ABC есть такие команды, как Inc и Dec. Данные команды немного упрощают ввод...

24
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
29.09.2021, 23:37
Студворк — интернет-сервис помощи студентам
Evg, в общем-то пояснения даны также в интеловском мануале.
If the source operand is outside the acceptable range, the C2 flag in the FPU status word is set, and the value in register ST(0) remains unchanged. The instruction does not raise an exception when the source operand is out of range. It is up to the program to check the C2 flag for out-of-range conditions. Source values outside the range −263 to +263 can be reduced to the range of the instruction by subtracting an appropriate integer multiple of 2π.
However, even within the range -263 to +263, inaccurate results can occur because the finite approximation of π used internally for argument reduction is not sufficient in all cases. Therefore, for accurate results it is safe to apply FSIN only to arguments reduced accurately in software, to a value smaller in absolute value than 3π/4. See the sections titled “Approximation of Pi” and “Transcendental Instruction Accuracy” in Chapter 8 of the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1, for a discussion of the proper value to use for π in performing such reductions.
https://www.intel.com/content/... 325383.pdf
0
0 / 0 / 3
Регистрация: 04.11.2016
Сообщений: 107
30.09.2021, 00:02  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Извини, но пока ты сам выглядишь как человек, слабо себе представляющий о низкоуровневом программировании и устройстве процессора
Я не стараюсь представить себя как эксперта в данной области, однако у меня есть некоторая теория и практика.
Далее, я сейчас изучаю интинсики на C, в смысле все что поддерживаются моим процем, так как я такой человек, для которого качество работы имеет больший вес, чем готовность, программирую на непрофессиональной основе.
Так значит, нужно создавать собственную реализацию синуса, если уж сильно нужно ворочаться с ними?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.09.2021, 01:52
blogerjackpraid, стандарт C++ не предоставляет вычислений синуса с типами данных точнее long double. То есть да, самому. Вопрос только в целесообразности - абсолютной точности всё равно не будет, а длительность вычислений при увеличении числа значащих бит возрастает экспоненциально. Потому в тех же графических движках как правило используется float - его очень быстро считать.
0
0 / 0 / 3
Регистрация: 04.11.2016
Сообщений: 107
30.09.2021, 10:15  [ТС]
Дело в том, что SIMD использует упакованные float-данные, то есть восемь float числа упакованы в 256 битный регистр, и над ними производятся математические операции с использованием таких же 256 битных регистров, как я понял, ymm0-15.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.09.2021, 20:42
Цитата Сообщение от blogerjackpraid Посмотреть сообщение
Так значит, нужно создавать собственную реализацию синуса, если уж сильно нужно ворочаться с ними?
У intel'а есть какая-то библиотека (возможно, что даже закрытая), забыл как называется. Там есть в том числе и векторный синус. А если делать самому, то, грубо говоря, нужно для начала научиться, как вычислять одинокий синус через портянку, а затем уже научиться строить векторную портянку (т.е. одновременно вычислять несколько синусов)

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

Если посмотреть на игры 80-90-х годов, то в те времена игровые движки действительно содержали таблицы заранее вычисленных синусов. Условно говоря, таблица из 90 элементов для синусов углов в 0 градус, 1 градус, 2 градуса, ... Т.е. вычисление синуса сводилось к чтению нужного элемента из таблицы, а угол вполне можно было хранить в целочисленной переменной. В играх тех времён игровые объекты были очень примитивными, в итоге процесс обработки такого объекта был чуть ли не соизмерим по времени с вычислением синуса. Поэтому в таких условиях быстрое вычисление синуса было архиважно, а дискретности угла поворота в условный 1 градус было достаточно. Если нужно более точно, то просто увеличить таблицу, а угол измерять в целочисленных попугаях, где 1 попугай равен, например, 0.25 градуса

В современных игровых движках объекты уже намного более сложные. И однократное вычисление синуса на фоне рассчёта всего объекта уже занимает мизерное время. На процессоре обычно делается только моделирование (т.е. расположение вершин модели в пространстве). Для этого достаточно ограниченное количество раз вычислить синусы-косинусы угла, сформировать матрицу поворота, а дальше идёт большой набор операций умножения и сложения (умножение матрицы объекта на матрицу поворота). Поскольку современный игровой объект содержит довольно много вершин, то на матричных умножений вычисление синуса занимает относительно мало времени. И даже при этом у меня нет уверенности в том, что для этого пользуются именно стандартными библиотечными тригонометрическими функциями. Вполне может быть и так, что используются собственные реализации, работающие по упрощённым алгоритмам, которые вычисляют недостаточно точно (например, с точностью в три десятичных знака после запятой), но быстро. Процесс отрисовки объекта делается уже на видеокарте. Там для хорошего моделирования освещения синусы нужно вычислять очень часто. И вот там векторный синус должен быть сильно востребован. Правда я не знаю, аппаратно он вычисляется, или программно. По субъективным ощущениям мне кажется, что всё-таки программно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2021, 20:42

Какие есть команды для перемещения по записям таблиц?
sql желательно и пример, если можно.

Что такое синхронное распараллеливание для SIMD
Моя тема проблемы синхронного распараллеливания для SIMD-архитектур. Подскажите пожалуйста, что понимается под синхронным...

Какие есть команды служащие для создания структуры таблиц?
В sql или vba

Есть ли в Python команды похожие на wawrite, только для avi файла
Есть ли в Python команды похожие на wawrite, только для avi файла например как в matlab wavwrite (функция, название файла)

Есть ли общие команды для таких вот вещей (без проверки всего массива)?
Подскажите, есть ли общие команды для таких вот вещей (без проверки всего массива): 1) проверить, чистый лист или нет, есть ли на нем...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru