Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/76: Рейтинг темы: голосов - 76, средняя оценка - 4.64
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1

Написание программы с SSE. Перевод

04.09.2013, 21:40. Показов 15079. Ответов 115
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно строил классическое множество Мандельброта, использовал ранее созданные алгоритмы другими людьми, всё строило хорошо. Но т.к. Я вывел собственную (несложную) формулу для построения аналога, передо мной встала большая проблема: на SSE я не профи, да и с алгоритмом парится - ушло на построение очень много времени, а код я порвал в клочья.
Ближе к теме. Формула классического фрактала - Z = Z2+C
Моя формула - Z = Z2 + C + CENTER
На простейшем языке Delphi код выглядел так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function cAbs(z: TComplex): extended; register;
// z :--> |z|
asm
         FLD TComplex.im [EAX]
         FMUL ST, ST
         FLD TComplex.re [EAX]
         FMUL ST, ST
         FADD
         FSQRT
end;
 
function cadd(z1, z2: TComplex): TComplex; register;  //сложение
asm
         FLD TComplex.re [EAX]
         FLD TComplex.re [EDX]
         FADD
         FSTP TComplex.re [ECX]
         FLD TComplex.im [EAX]
         FLD TComplex.im [EDX]
         FADD
         FSTP TComplex.im [ECX]
end;
 
function cSqr(z: TComplex): TComplex; register; //возведение в квадрат комплексного числа
// z :--> z^2
asm
         FLD TComplex.im [EAX]
         FLD ST
         FMUL ST, ST
         FLD TComplex.re [EAX]
         FLD ST
         FMUL ST, ST
         FXCH ST(3)
         FMUL
         FADD ST, ST
         FSTP TComplex.im [EDX]
         FSUB
         FSTP TComplex.re [EDX]
end;
 
function fractal_mandelbrot(c,center:tComplex):Longint;//вычисление
var w:Longint;
z:TComplex;
izf:Double;
begin
  z.re:=0;
  z.im:=0;
  for Result:=0 to iter do begin
    //возводим в квадрат
    z:=cSqr(z);
    //прибавляем оригинал
    z:=cadd(z, c);
    z:=Cadd(z, center);
    //выясняем, больше ли модуль, чем нужно?
    if(cabs(z) > 4)then exit;
  end;
end;
 
procedure Build_fractal()
begin
for iy := 0 to 1919 do
    begin
    for ix := 0 to 12400 do
    begin
      n := fractal_mandelbrot(zData[ix,iy],center);
      if(n >= iter)then
      begin
        NumIter[ix,iy]:=-1;
      end
      else
      begin
        NumIter[ix,iy]:=n;
      end;
end;
Суть задачи - включая циклы переписать весь этот код с функциями с SSE конструкциями (если возможно). Господа, подскажите, где можно почитать о построении алгоритма, и вообще, что можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2013, 21:40
Ответы с готовыми решениями:

SSE. Подение программы
Привет ребята! Такое дело, есть задание: Обработать массивы из 8 элементов по следующему выражению: F=A-B*C-D , i=1...8; ...

Непонятки с SSE
Есть несложная формула, пока что, без логарифмов и экспонент=) С FPU проблем не возникло. Вот, кстати, формула: ColorIndex := round(...

Написание программы с использованием файловых переменных. Разработка программы для работы с текстовым файлом
Помогите пожалуйста : С помощью текстового редактора создать текстовый файл file1. Переписать строки файла file1 в новый текстовый файл...

115
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 16:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SeryZone Посмотреть сообщение
Задайте _align так "_align rb 12
Исправь _align rb 24 на 12.
0
 Аватар для snake32
3583 / 1713 / 236
Регистрация: 26.02.2009
Сообщений: 8,653
Записей в блоге: 6
11.09.2013, 16:30
Цитата Сообщение от snake32 Посмотреть сообщение
ещё не понял как можно AVX заюзать на Delphi XE2
Блин... посмотрел код... я думал AVX и другие неизвестные Delphi инструкции можно сразу как-то использовать непосредственно в самом Delphi... а тут FASM.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 16:33
Цитата Сообщение от snake32 Посмотреть сообщение
Блин... посмотрел код... я думал AVX и другие неизвестные Delphi инструкции можно сразу как-то использовать непосредственно в самом Delphi... а тут FASM.
Можно прямо в Дельфи ассемблерные вставки делать.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16375 / 7687 / 1080
Регистрация: 11.11.2010
Сообщений: 13,767
11.09.2013, 16:34
snake32,
там ассемблерный модуль в виде obj-файла прицепляется к дельфину
0
 Аватар для snake32
3583 / 1713 / 236
Регистрация: 26.02.2009
Сообщений: 8,653
Записей в блоге: 6
11.09.2013, 16:36
Кстати, где можно почитать про AVX, SSE4 и тд возможности и как использовать... доку ищу

Добавлено через 1 минуту
Цитата Сообщение от FIL Посмотреть сообщение
Можно прямо в Дельфи ассемблерные вставки делать.
Дык он(delphi) не знает новых комманд/регистров. как быть?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16375 / 7687 / 1080
Регистрация: 11.11.2010
Сообщений: 13,767
11.09.2013, 16:42
Цитата Сообщение от FIL Посмотреть сообщение
Можно прямо в Дельфи ассемблерные вставки делать.
можно, только AVX и другие неизвестные Delphi инструкции придется в виде кодов вставлять, а это "не айс!" (С)

Добавлено через 2 минуты
Цитата Сообщение от snake32 Посмотреть сообщение
Кстати, где можно почитать про AVX
посмотри по топикам, murderer ссылку на habar-habar давал

Добавлено через 4 минуты
ссылка на AVX
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 16:43
XE3 SSE все понимает, а вот AVX отдельно компилить надо.
Получается что-то типа этого:
Delphi
1
  dd $C059FDC5 // VMULPD  ymm0, ymm0, ymm0
1
 Аватар для snake32
3583 / 1713 / 236
Регистрация: 26.02.2009
Сообщений: 8,653
Записей в блоге: 6
11.09.2013, 16:45
Цитата Сообщение от FIL Посмотреть сообщение
Получается что-то типа этого:
Действительно не айс
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 16:45
Цитата Сообщение от Mikl___ Посмотреть сообщение
ссылка на AVX
Это AVX-512. Его, по-моему, еще и в железе-то нет, только эмулятор.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16375 / 7687 / 1080
Регистрация: 11.11.2010
Сообщений: 13,767
11.09.2013, 16:50
FIL,
это первое, что я нашел, извини, разбираться не стал -- сразу в бой!
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 16:58
Mikl___, я сразу не разобрался - там описаны все команды SSE/AVX, и старые и новые. Так что, штука полезная.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
11.09.2013, 19:47  [ТС]
FIL, а что это за тип такой? Там тип array[1..24] of byte. Менял на [1..12] - то же самое... Странная ошибка...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.09.2013, 20:43
В файле Mandelbrot.asm есть строчка _align rb 24.
1
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
12.09.2013, 16:52  [ТС]
FIL, тогда как компилить OBJ? FASM не хочет, видите ли строка
vmulpd xmm1,xmm0,dqword[LOG2E]
записана как-то не так!

Добавлено через 8 минут
FIL, скачал новейший FASM и скомпилил OBJ. Вздохнул с облегчением: всё компилит и вычисляет

Добавлено через 19 часов 33 минуты
FIL, интересно, произвольную точность как писать??? А то предел double просто изумляет...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
12.09.2013, 17:20
Цитата Сообщение от SeryZone Посмотреть сообщение
FIL, интересно, произвольную точность как писать??? А то предел double просто изумляет...
Обсуждали же гдето в этой теме - нужно длинную арифметику реализовывать. Других предложений пока не поступало.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
12.09.2013, 18:22  [ТС]
FIL, в английском не очень силен, но на JAVA пишут очень скоростные проги. Попробую у автора той проги спросить, может он подскажет

Добавлено через 4 минуты
FIL, знаешь сей язык "JAVA"? http://www.fractalforums.com/p... precision/

Добавлено через 27 минут
охххххх, вот тут инфа на википедии: http://ru.wikipedia.org/wiki/Ч... й_точности
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
12.09.2013, 18:26
Нет, JAVA я не знаю.
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
12.09.2013, 21:33  [ТС]
FIL, Но в стандартных типах это реализовано 16-ричными записями (http://ru.wikipedia.org/wiki/Ч... й_точности). Может в этом кроется решение???
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
13.09.2013, 07:16
Этот дабл-бабл будет работать слишком медленно. Лучше сразу реализовать длинную арифметику произвольной точности. Для умножения взять этот алгоритм, сложение - тупо через adc. Число представлять в виде экспоненты и мантиссы.

Потом пустить в несколько потоков плюс распределённые вычисления и можно захватить мир
0
 Аватар для SeryZone
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
13.09.2013, 08:50  [ТС]
murderer, Сперва сравним скорости с Fractal eXtreme. Надо создать сперва тип с длинной мантиссой, пусть она сможет сделать зум не более 2^113 (а наш код может только в 2^48), но он должен с такой зум-техникой обогнать Fractal eXtreme.
P.s. А вот если реализовать SFT или теорию возмущений, то и Fractal eXtreme тут же отойдет на задний план, как медленная программа.
Итак... произвольная точность...

Добавлено через 3 минуты
murderer, Ты видел, как устроены стандартные типы? Но тут есть один ньюанс: extended имеет 112-битную мантиссу, а значит, эта мантисса должна позволять увеличивать до 2^112! Что-то тут не так: эта мантисса позволяет увеличивать до 2^52. Что мешает 128-битному типу extended высчитывать столько, сколько положено? Это ведь и будет double double...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2013, 08:50

Перевод текстов, слов и их написание
Сфотографировал полиэтиленовый пакет. На нем две строчки надписи на английском. Сможет кто перевести? Сначала со своим личным...

Написание программы
Напишите программу: ,,Создать массив А(n), где n<=20, содержащие сведения о билете: название станции, номер зоны и цена. Изменить данные в...

Написание программы.
Дано 3 числа.Найти сумму нечетных чисел меньших 11.

написание программы
в автоматизированной информационной системе содержаться анкетные данные сотрудников учреждения в массиве А из 100 элементов содерж года...

Написание программы
В txt документе дана последовательность символов. Написать программу которая будет подсчитывать сколько раз будет повторяться введённый...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru