Форум программистов, компьютерный форум, киберфорум
K_ILYA_V
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Меньше классов - Больше функций

Запись от K_ILYA_V размещена 09.03.2020 в 19:38

Чем дальше движется разработка тем больше понятие "структура" начинает мешать. от нее нет никакого толку. при обработки данных она только постоянно мешает. Зачем мне 100 объектов из 100 чисел каждый. Проще прожевать 100.000 чисел выложенных в один ряд. В итоге я удалил все структуры и стал обрабатывать просто массивы данных и прогресс медленно но пошел.

Assembler
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
; Дополнительный исходный файл
 
TransferGlobalCoorCameraCoor macro
    local m0,m1
    ; загрузка вектора положения и ориентации камеры
    lea esi,camera
    irp i,<0,1,2,3,4,5,6,7,8,9,10,11>
        vbroadcastss ymm&i,dword ptr [esi + i * type real4]
    endm
    
    ; перенос глобальных координат в координаты камеры
    lea regsource0,data000
    lea regdestin0,data001
    mov ecx,nambod ; количество циклов
    m0: irpc i,<01>
            vaddps  @CatStr(ymm,%(12 + i)),ymm&i, \
                    [regsource0 + ecx * 4 + i * 20h]
        endm
        irpc i,<012>
            vaddps ymm14,ymm2,[regsource0 + ecx * 4 + 40h]
            vmulps ymm15,ymm14,@CatStr(ymm,%(5 + 3 * i))
            vmulps ymm14,ymm13,@CatStr(ymm,%(4 + 3 * i))
            vaddps ymm15,ymm15,ymm14
            vmulps ymm14,ymm12,@CatStr(ymm,%(3 + 3 * i))
            vaddps ymm15,ymm15,ymm14
            vmovaps [regdestin0 + ecx * 4 + i * 20h],ymm15
        endm
        sub ecx,step
    jns m0
endm
 
CheckVisibilityObject macro
    local m0,m1,m2,m3,m4
    ; загрузка границ видимого объема
    irpc i,<01>
        vbroadcastss ymm&i,dword ptr [esi + (12 + i) * type real4]
    endm
 
    ; проверка видимости невидим/видим_частично/видим
    lea regsource0,data000
    lea regsource1,data001
    lea edi,index000
    lea ebp,index001
    mov ecx,nambod
    
    ; загрузка бесконечности
    vpcmpeqb xmm2,xmm2,xmm2
    vpmovzxbd ymm2,xmm2
    vpslld ymm2,ymm2,17h
 
    m0: vmovaps ymm14,[regsource0 + ecx * 4 + 60h]
        irpc i,<012>
            vaddps @CatStr(ymm,%(3 + i)),ymm&i,ymm14
        endm
        irpc i,<012>
            vsubps @CatStr(ymm,%(6 + i)),ymm&i,ymm14
        endm
        vandnps ymm15,ymm15,ymm15
        irp i,<0,1,3,4>
            vsubps @CatStr(ymm,%(9 + i)),ymm15,@CatStr(ymm,%(3 + i))
        endm
        vsubps ymm11,ymm15,ymm14
        
        irpc i,<012>
            vmovaps ymm15,[regsource1 + ecx * 4 + i * 20h]
            irpc q,<01>
                vcmpleps @CatStr(ymm,%(3 + i + 3 * q)),ymm15, \
                         @CatStr(ymm,%(3 + i + 3 * q))
                vcmpgeps @CatStr(ymm,%(9 + i + 3 * q)),ymm15, \
                         @CatStr(ymm,%(9 + i + 3 * q))
            endm
        endm
 
        ; создание битовых масок
        irpc i,<345678>
            vandps ymm&i,ymm&i,@CatStr(ymm,%(6 + i))
        endm
        irpc i,<36>
            irpc q,<01>
                vandps ymm&i,ymm&i,@CatStr(ymm,%(1 + i + q))
            endm
        endm
        vandnps ymm6,ymm6,ymm3
        
        ; генерация индекса посредством битовой маски
        vpinsrd xmm14,xmm14,ecx,0
        vpbroadcastw xmm14,xmm14
        xor esi,esi
        irpc i,<36>
            vmovmskps eax,ymm&i
            call m1
            vmovdqu xmmword ptr [@CatStr(reg0,%(10 - i))],xmm15
            add @CatStr(reg0,%(10 - i)),esi
        endm
        sub ecx,step
    jns m0
    jmp m4
    m1: popcnt si,ax
        shl si,1
        xor rdx,rdx
        m2: bsf bx,ax
            jz m3
            btr ax,bx
            shl rdx,8
            add dl,bl
        jmp m2
        m3: vpinsrq xmm15,xmm15,rdx,0
            vpmovzxbw xmm15,xmm15
            vpaddusw xmm15,xmm15,xmm14
    ret
    m4: 
endm
Небольшой участок кода который принимает глобальные координаты объектов, транспортирует их в координаты камеры и проверяет их на нахождении в отрисовываемом объеме, при этом объекты проверяються на "полное" попадание и "частичное".
Размещено в Без категории
Просмотров 936 Комментарии 75
Всего комментариев 75
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    Цитата:
    Чем дальше движется разработка тем больше понятие "структура" начинает мешать. от нее нет никакого толку. при обработки данных она только постоянно мешает.
    Очень странно, но вся индустрия обратного мнения. Если бы это утверждение было верным, то ассемблера, что появился сразу после перфокарт, никуда бы отходить не стали в сторону всяких "высокоуровневых" языков с ООП и прочими свистелками.

    Или вы считаете, что миллионы мух ошибаться не могут?
    Запись от Usaga размещена 10.03.2020 в 06:42 Usaga вне форума
  2. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    ...но вся индустрия обратного мнения...
    ...миллионы мух ошибаться не могут?..
    к_счастью/к_несчастью я не часть "индустрии" а любитель не профессионал, который может исповедовать любые взгляды и практиковать любые методы работы.

    сама суть структуры это дискретность, то есть обособление некого объема информации в некий логический контейнер. однако такой способ упорядочивания информации приводит к тому что однотипные данные, к примеру координаты, лежат в памяти маленькими кусочками и при их массовой обработке большая часть времени уходит не на работу с ними а на вычисление следующего адреса.

    в моем варианте "предмет" это индекс, порядковый номер, при помощи которого из однотипных баз данных извлекаются значения. то есть координаты центров всех объектов уложены в один массив, посредством индекса из него можно извлечь координаты нужного объекта, при массовой же обработки алгоритм "съест" весь массив в один присест и создаст новый в котором опять же по индексу можно найти то что нужно.

    смысл видео движка это конвейерная, многопоточная обработка больших массивов однотипных данных с их постоянной сортировкой и сравнением. и любой способ это ускорить это хорошо, а любая поблажка которая упрощает написание кода но замедляет работу это плохо.

    к вопросу о миллионах. еще десять лет назад любого инженера который сказал бы в публичном месте "многоразовая ракета" с позором выгнали бы из профессии. а теперь вдруг выяснилось что миллионы ошибались.
    Запись от K_ILYA_V размещена 10.03.2020 в 08:02 K_ILYA_V вне форума
  3. Старый комментарий
    Аватар для Usaga
    Так, а что мешает складывать координаты в массив не прибегая к ассемблеру?

    Цитата:
    к вопросу о миллионах. еще десять лет назад любого инженера который сказал бы в публичном месте "многоразовая ракета" с позором выгнали бы из профессии. а теперь вдруг выяснилось что миллионы ошибались.
    Неуместная аналогия. Мир ракетостроения начался с одноразовых ракет и постепенно доходит до многоразовых. А вот индустрия разработки началась с ассемблера (предшевствовашие вещи в виде перфокарт и вручную пережигаемых перемычек опускаем) и пошла в сторону языков высокого уровня в попытке борьбы со сложностью больших проектов. Но вы же утверждаете, что борьба с этой сложностью и есть сама сложность. Что есть бред. Нельзя начать бороться с тем, чего ещё нет. Так ведь?
    Запись от Usaga размещена 10.03.2020 в 08:09 Usaga вне форума
  4. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Так, а что мешает складывать координаты в массив не прибегая к ассемблеру?...
    желание добиться максимального быстродействия. то что я сейчас пишу, я представляю для себя как "ядро" моего графического движка. как следствие я желаю добиться максимального быстродействия.

    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    ... А вот индустрия разработки началась с ассемблера (предшевствовашие вещи в виде перфокарт и вручную пережигаемых перемычек опускаем) и пошла в сторону языков высокого уровня в попытке борьбы со сложностью больших проектов...
    я не учился в "советских вузах" (институтах постсоветского пространства), но предполагаю что методики обучения в них отвратительно архаичны и близки к понятию "бесполезны", как следствие я предполагаю что ассемблер в них преподается в ракурсе 8086 с сегментной адресацией 16-битными регистрами и набором из 50-и команд 86-года, как следствие у большинства людей еще в институте складывается мнение что асм это что то неимоверно "нудное и тупое", что все уже давно пользуются языками высокого уровня и только старый гриб преподаватель, засохший на полке в 86-году продолжает кодить на асм. В то время как современный асм это 300+ команд из которых можно собирать убойные вещи. Их дольше и сложней делать за то на выходе можно получить алгоритмы с максимальной эффективностью. движок на асм будет давать 120 фпс там где сишный и 30 не сможет выжать.
    Запись от K_ILYA_V размещена 10.03.2020 в 10:01 K_ILYA_V вне форума
  5. Старый комментарий
    Цитата:
    движок на асм будет давать 120 фпс там где сишный и 30 не сможет выжать.
    Что за потоки бреда, которые подаются под видом чего-то серьёзного?

    30-фпс сишный движок, которым реально можно пользоваться или мифический 120-фпс ассемблерный движок, который никогда не выйдет. Что же выбрать?

    Жду с нетерпением результатов ваших исследований, в которых 4-х ядерный CPU сможет в 4 раза опередить хотя бы 760ti по скорости отрисовки треугольников.
    Запись от IamLost размещена 10.03.2020 в 10:22 IamLost вне форума
  6. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от IamLost Просмотреть комментарий
    ...
    я буду воспринимать ваш комментарий как дополнительную мотивацию продолжать работу.
    Запись от K_ILYA_V размещена 10.03.2020 в 10:24 K_ILYA_V вне форума
  7. Старый комментарий
    Аватар для Usaga
    Цитата:
    желание добиться максимального быстродействия. то что я сейчас пишу, я представляю для себя как "ядро" моего графического движка. как следствие я желаю добиться максимального быстродействия.
    Это не ответ. Ещё раз: что мешает размещать координаты в массиве (оптимальным для данного случая образом) на Си++?

    Цитата:
    я не учился в "советских вузах" (институтах постсоветского пространства), но предполагаю что методики обучения в них отвратительно архаичны и близки к понятию "бесполезны", как следствие я предполагаю что ассемблер в них преподается в ракурсе 8086 с сегментной адресацией 16-битными регистрами и набором из 50-и команд 86-года, как следствие у большинства людей еще в институте складывается мнение что асм это что то неимоверно "нудное и тупое", что все уже давно пользуются языками высокого уровня и только старый гриб преподаватель, засохший на полке в 86-году продолжает кодить на асм. В то время как современный асм это 300+ команд из которых можно собирать убойные вещи. Их дольше и сложней делать за то на выходе можно получить алгоритмы с максимальной эффективностью. движок на асм будет давать 120 фпс там где сишный и 30 не сможет выжать.
    Это какой-то поток сознания. "Советские ВУЗы" тут каким боком? Вся планета в советских вузах училась? Вы про банальный естественный отбор не слышали? Разработка приложения стоит денег. Поддержка стоит денег. Исправление косяков стоит денег. А бизнес очень не любит эти деньги тратить в пустую. И не только бизнес. А писать и поддерживать крупное приложение на чистом ассемблере очень долго и дорого. А вот с применением чего-то посерьёзнее - уже дешевле. И ценой незначительного оверхеда. Там, где надо 146% производительности или прямой работы с железом - ассемблер. Для 99% остальных задач - нормальный язык.

    Если вам скилов не хватает, чтобы на ЯВУ нормально производительный движок игровой написать, то это проблемы ваших невысоких познаний, а не подхода или инструментария.
    Запись от Usaga размещена 10.03.2020 в 10:33 Usaga вне форума
  8. Старый комментарий
    Аватар для XLAT
    Цитата:
    Сообщение от K_ILYA_V
    Зачем мне 100 объектов из 100 чисел каждый
    вы в чистом поле нашли одну сосну, вокруг которой забавно
    (ну, у некоторых это вызывает слезу) кружите.
    и никто не сможет даже вам сказать высокая она(эта ваша сосна) или низкая, по причине:
    потому что она ОДНА.

    далее, вам не обязательно что-то писать про ваши оценки "языков высокого уровня",
    по причине того, что вы их не знаете, совет: пишите на том что знаете и не рассуждайте о том,
    чего вы ещё не знаете: придёт время - узнаете точка

    про многоразовые ракеты: тех дураков, которые их изобрели уже давно выгнали с работы.
    Вы не в курсе? С тех пор им НЕ доверяют делать даже одноразовые.
    Причины на поверхности: понятны даже не посвященным, или надо объяснять?
    Запись от XLAT размещена 10.03.2020 в 10:37 XLAT на форуме
    Обновил(-а) XLAT 10.03.2020 в 11:13
  9. Старый комментарий
    Цитата:
    я буду воспринимать ваш комментарий как дополнительную мотивацию продолжать работу.
    Так никто и не запрещает. Зачем выдавать свои субъективные ощущения за объективную реальность и писать что-то в стиле "Код на ассемблере проще чем на С++", а не "ДЛЯ МЕНЯ код на ассемблере проще чем на С++"?
    Запись от IamLost размещена 10.03.2020 в 10:43 IamLost вне форума
  10. Старый комментарий
    Аватар для Usaga
    Цитата:
    пишите на том что знаете и не рассуждайте о том
    Рассуждения рассуждать не мешки ворочать) Человек как-то научился одним способом небольшие программки писать и решил, что такой способ подходит для проекта любой сложности. А вокруг, значит, дураки одни, всякие DDD учат, да боинги роняют на радость масонам.
    Запись от Usaga размещена 10.03.2020 в 10:46 Usaga вне форума
  11. Старый комментарий
    Аватар для Croessmah
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    да боинги роняют на радость масонам.
    Не начинай.
    Запись от Croessmah размещена 10.03.2020 в 13:37 Croessmah на форуме
  12. Старый комментарий
    Аватар для Usaga
    Цитата:
    Не начинай.
    Не мне тебе рассказывать о том, что летучесть боинга определяется не аэродинамическими свойствами его физюляжа, а количеством GOTO на строку кода в ПО его бортового компьютера и иного оборудования.
    Запись от Usaga размещена 10.03.2020 в 14:08 Usaga вне форума
  13. Старый комментарий
    Аватар для Croessmah
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Не мне тебе рассказывать о том, что летучесть боинга определяется не аэродинамическими свойствами его физюляжа, а количеством GOTO на строку кода в ПО его бортового компьютера и иного оборудования.
    Да, это так. И ты не имеешь морального права это оспаривать.
    Запись от Croessmah размещена 10.03.2020 в 14:17 Croessmah на форуме
  14. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от XLAT Просмотреть комментарий
    ...про многоразовые ракеты: тех дураков, которые их изобрели уже давно выгнали с работы.
    Вы не в курсе? С тех пор им НЕ доверяют делать даже одноразовые.
    Причины на поверхности: понятны даже не посвященным, или надо объяснять?
    недавно у этих "дураков" приземлилась 50-я ракета, и намечен 5-й повторный запуск.
    зная ваше мнение о "них", я сформировал для себя мнение о вас.
    Запись от K_ILYA_V размещена 10.03.2020 в 14:37 K_ILYA_V вне форума
  15. Старый комментарий
    Цитата:
    Сообщение от K_ILYA_V Просмотреть комментарий
    я не учился в "советских вузах" ....., но предполагаю что
    "Вот так и живем".....
    Запись от voral размещена 10.03.2020 в 14:39 voral вне форума
  16. Старый комментарий
    Аватар для Croessmah
    Цитата:
    Сообщение от K_ILYA_V Просмотреть комментарий
    недавно у этих "дураков" приземлилась 50-я ракета, и намечен 5-й повторный запуск.
    зная ваше мнение о "них", я сформировал для себя мнение о вас.
    А это точно те самые дураки?
    Запись от Croessmah размещена 10.03.2020 в 14:41 Croessmah на форуме
  17. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Это не ответ. Ещё раз: что мешает размещать координаты в массиве (оптимальным для данного случая образом) на Си++?
    невозможность добиться максимальной эффективности и многопоточности.

    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    ... Разработка приложения стоит денег. Поддержка стоит денег. Исправление косяков стоит денег. А бизнес очень не любит эти деньги тратить в пустую...
    и вот еще один боинг брякнулся на землю.

    буквально на днях была совместная пресс конференция боинга и наса на которой унылым и грустным голосом рассказывали как все ПО старлайнера в дырах и косяках и теперь нужно повторно делать пуск за 400.0 лямов чтобы проверить заплатки и обновления.
    Запись от K_ILYA_V размещена 10.03.2020 в 14:46 K_ILYA_V вне форума
  18. Старый комментарий
    Аватар для K_ILYA_V
    Цитата:
    Сообщение от Croessmah Просмотреть комментарий
    А это точно те самые дураки?
    ваш вопрос мне непонятен.
    Запись от K_ILYA_V размещена 10.03.2020 в 14:51 K_ILYA_V вне форума
  19. Старый комментарий
    Аватар для Usaga
    Цитата:
    невозможность добиться максимальной эффективности и многопоточности.
    Т.е. массив с координатами на ассемблере каким-то волшебным образом отличается от массива с координатами на плюсах? И заявленная невозможность была проверена опытным путём, или это проекция фразы "я не знаю как"?

    Цитата:
    буквально на днях была совместная пресс конференция боинга и наса на которой унылым и грустным голосом рассказывали как все ПО старлайнера в дырах и косяках и теперь нужно повторно делать пуск за 400.0 лямов чтобы проверить заплатки и обновления.
    И конечно же огроменная нечитаемая портянка ассемблерного кода, с тоннами меток и ручной передачей аргументов между функциями, железнобетонно от этого защитила бы? Только дебилы в наса и боинге об этом не знают? А чувак, который по вечерам на ассемблере что-то пописывает и в глаза серьёзной разработки не видал, это постиг?
    Запись от Usaga размещена 10.03.2020 в 15:57 Usaga вне форума
  20. Старый комментарий
    Аватар для Usaga
    Эффект Даннинга - Крюгера творит чудеса. Любой таксист знает как управлять страной, но водит такси. Любой любитель goto и ассемблера знает как правильно программировать и уберечь боинги от падений, но сидит форуме и пилит какой-нибудь будущий силос или разводит пространные разговоры. Удивительные дела творятся)
    Запись от Usaga размещена 10.03.2020 в 16:02 Usaga вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.