|
|
||||||
Написание программы с SSE. Перевод04.09.2013, 21:40. Показов 15062. Ответов 115
Метки нет (Все метки)
Недавно строил классическое множество Мандельброта, использовал ранее созданные алгоритмы другими людьми, всё строило хорошо. Но т.к. Я вывел собственную (несложную) формулу для построения аналога, передо мной встала большая проблема: на SSE я не профи, да и с алгоритмом парится - ушло на построение очень много времени, а код я порвал в клочья.
Ближе к теме. Формула классического фрактала - Z = Z2+C Моя формула - Z = Z2 + C + CENTER На простейшем языке Delphi код выглядел так:
0
|
||||||
| 04.09.2013, 21:40 | |
|
Ответы с готовыми решениями:
115
SSE. Подение программы Непонятки с SSE Написание программы с использованием файловых переменных. Разработка программы для работы с текстовым файлом |
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
|
| 18.09.2013, 09:32 | |
|
Доделал рендер без использования текстуры. Кнопками "+" и "-" можно увеличивать и уменьшать детализацию (по умолчанию 128 итераций). При слишком большой детализации на Intel GMA x4500 вылетает видеодрайвер и система встаёт колом
0
|
|
|
|
||||||
| 18.09.2013, 11:58 | ||||||
|
murderer, я тут случайно нашёл ещё один вариант Мандельброта на GLSL + QT. Там кстати цвет пикселя тоже генерится в шейдере только через косинусы:
И ещё реализуется двойная точность, как в железе(часть 3), так и путём эмуляции(часть 2). https://www.thasler.org/blog/?p=45 Добавлено через 4 минуты но мне кажется быстрее всё-таки одна выборка из текстуры нежели 3 синуса или 3 косинуса... надо тестить Добавлено через 30 секунд к тому же с текстурой более гибкий вариант
0
|
||||||
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
||||
| 18.09.2013, 12:25 | ||||
Добавлено через 8 минут
0
|
||||
|
|
|||
| 18.09.2013, 14:56 | |||
|
0
|
|||
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
||||||
| 20.09.2013, 08:58 | ||||||
|
Рассмотрим сложение в шейдере с эмуляцией (в комментах развёрнутое выражение)
Добавлено через 14 минут тут аналогично. Добавлено через 18 минут Нашёл описание на русском Если я правильно понял идею сложение должно выглядеть примерно так: res.x = a.x+b.x res.y = a.y+b.y res.x = res.x+trunc(res.y)*2-31 res.y = frac(res.y)
0
|
||||||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
||
| 20.09.2013, 11:32 | ||
. Длинная арифметика, так сказать.Биилиотека, на которую книжка ссылается: qd-library
0
|
||
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
||||||
| 20.09.2013, 11:52 | ||||||
|
FIL
Так ведь в функции ds_add все формулы сокращаются и получается
0
|
||||||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|||
| 20.09.2013, 12:53 | |||
|
Сокращается, если рассматривать это все с точки зрения работы с целыми числами.
Рассмотрим такой пример (некий тип с плавающей запятой, вмещающий 2 десятичные цифры):
0
|
|||
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
||||||||||||||
| 20.09.2013, 13:29 | ||||||||||||||
|
Я ошибся при сокращении, будет так
Теперь как это должно быть. Смотри, основной принцип double-double - это разбиение одной переменной на две. Допустим у нас есть число 0.4888129899481270. Допустим теперь, что точности одной переменной не достаточно - разбиваем на 2 части: 0.48881298 и 0.99481270. Пример сложения (сферический в вакууме, просто, чтобы понять принцип). Складываем само с собой low = 0.48881298 + 0.48881298 = 0.97762596 high = 0.99481270 + 0.99481270 = 1.9896254 low = low+trunc(high)*10-8=0.97762596+trunc(1.9896254)*10-8=0.97762596+0.00000001=0.97762597 high = frac(high)=frac(1.9896254)=0.9896254 Правильность можно проверить в калькуляторе 0.4888129899481270+0.4888129899481270=0. 977625979896254 10-8 я взял просто для наглядности для float насколько я понимаю должно быть 2-23 т.к. там 23 бита мантиссы. Добавлено через 1 минуту В общем со сложением понятно, теперь надо понять умножение... Добавлено через 5 минут
Это <censored>
0
|
||||||||||||||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 20.09.2013, 13:45 | |
|
Число разбивается по-другому:
0.4888129899481270 high = 0.48881298 low = 0.0000000099481270 Поэтому, нуля там не будет. Посмотри мой пример.
0
|
|
|
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
|
|
| 20.09.2013, 14:08 | |
|
Тогда возможно, но я не понимаю как работает перенос. В своём примере я использовал для этого trunc и frac, а тут какая-то магия.
Добавлено через 3 минуты В любом случае тут возможно переполнение порядка (для float это всего 8 бит) при дальнейшем масштабировании. Я хочу сделать не просто double-double, а произвольно масштабируемую точность, объединив несколько переменных. Добавлено через 43 секунды И всё это на GPU.
0
|
|
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
||
| 20.09.2013, 15:02 | ||
|
Аналог подобной реализации, только с DWord'ами приведен в этой теме: https://www.cyberforum.ru/asse... ost5057701 Я пробовал подругому: Брал за основу Интегеры. Каждый Интегер - 4 цифры числа. Уперся в то, что на SSE нет деления целых чисел, пришлость кусок на общих регистрах делать, а так все работает.
0
|
||
|
|
|
| 27.01.2014, 15:00 | |
|
Up. Может кому-то будет интересно.
Существует низкоуроневый язык для видеокарт (gpu asm) http://en.wikipedia.org/wiki/ARB_assembly_language К сожалению, первая версия этого gpu asm'a не поддерживает циклы. Что делает его непригодным для вычисления множества Мандельброта. Возможно, есть более свежие версии, но я таких быстрым просмотром не нашёл (если кто найдёт - буду рад лицезреть). Однако, для видеокарт nVidia, есть расширение NV_gpu_program4, которое уже может гораздо больше(в том числе организовать цикл). Хотя при таком раскладе лучше заюзать CUDA нежели OpenGL (ИМХО) http://www.renderguild.com/gpuguide.pdf PS. Попробовал открыть n-дыхание темы
2
|
|
|
|
|
| 27.01.2014, 22:38 [ТС] | |
|
snake32, про CUDA знаю, но у меня AMD увы =) Про n-дыхание хочу сказать, что прога увеличивает до 10^13 что не даёт должного результата. Есть исходник произвольной точности, но там формула преобразования классическая (т.е. далёкая от экспоненты). Я всё кинуть могу, но если будем сотрудничать.
Вот на CUDA вычислялось: http://vimeo.com/25833277 Оформление видео - ГЭ редкое, но советую почитать описание. Разочарую в том, что исходников нет. Да и на NVidia денег не накопил. Как-то так
0
|
|
|
|
|
| 28.01.2014, 10:01 [ТС] | |
|
snake32, Я когда-то пробовал делать на OpenGL, но мои попытки не увенчались успехом. А на ноуте (не моем), где nVidia, там всё работает быстро, как часы, в общем-то.
Ладно. Даже extended позволяет увеличивать до 4*10^15!!! В общем, произвольная точность есть, как юзать - не знаю, знания assembler'а не позволяют мне понять код. В общем, будем делать до 10^128, не ниже. Исходник произвольной позволяет вообще 128 dwords = до 1280 степени десятки, не ниже. Ладно, буду учииить учииииить ассемблер..
0
|
|
|
|
|
| 17.03.2014, 13:21 | |
|
Квадро точность на GLSL https://www.thasler.org/blog/?p=143
0
|
|
|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
|
|
| 18.03.2014, 03:46 | |
|
1
|
|
| 18.03.2014, 03:46 | |
|
Перевод текстов, слов и их написание Написание программы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|