|
|
||||||
Написание программы с SSE. Перевод04.09.2013, 21:40. Показов 15019. Ответов 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 | |
|
Перевод текстов, слов и их написание Написание программы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|