Сейчас 19:41:42 Четверг, 26 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
[JASS] Альтернативный урок 3. Функции
Ty3uKДата: Суббота, 13 Апреля 2013, 13:34:42 | Сообщение # 51
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Цитата (dredsss)
Функция, которая убивает все живое


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Суббота, 13 Апреля 2013, 13:41:15 | Сообщение # 52
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Ty3uK, я разве убиваю всё живое?
 

Ty3uKДата: Суббота, 13 Апреля 2013, 13:50:32 | Сообщение # 53
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ну, видимо именно такие ассоциации есть в голове у некоторых людей. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Суббота, 13 Апреля 2013, 13:52:17 | Сообщение # 54
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Ty3uK)
Ну, видимо именно такие ассоциации есть в голове у некоторых людей.

Очень интересно.
Alice, почему именно я?
 

МонаДата: Воскресенье, 21 Апреля 2013, 22:42:13 | Сообщение # 55
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
//без домыслов
Цитата (H_A_PK)
т.е. поток всё таки 1?

call ExecuteFunc(<ВЫРАЖЕНИЕ>)
Создается новый поток; текущий прерывается.
------------------------------------------
Цитата (Ty3uK)
почему?

При трансляции в объектный код, условный оператор кодируется четырьмя командами:
Код
if then
     <истинная ветка>
else
     <ложная ветка>
endif

IFNOTJUMP
<истинная ветка>
JUMP
LABEL
<ложная ветка>
LABEL

Даже если в обеих ветках нет операторов и убран else, все равно создаются эти четыре команды.
Как при истинном так и при ложном условии, условный оператор отнимает 3 действия, 10мкс.

Добавлено (21 Апреля 2013, 22:42:13)
---------------------------------------------
А вот такой алгоритм для обыкновенного сложения: set var1=var1+va2 (или var1+=var2)

Код
Скопировать переменную var1 в регистр интерпретатора r1
Толкнуть регистр r1 интерпретатора в стек
Скопировать переменную va2 в регистр интерпретатора r2
Извлечь из стека в регистр интерпретатора r3
r3=r3+r2
Скопировать из регистра интерпретатора r3 в переменную var1

6 действий.
 

BlackFoxДата: Воскресенье, 21 Апреля 2013, 23:19:57 | Сообщение # 56
3 уровень
Группа: Проверенные
Сообщений: 52
Награды: 0
Репутация: 25
Блокировки:
Мона, на уровне ассемблера?

Добавлено (21 Апреля 2013, 23:19:57)
---------------------------------------------
if then endif vs if then else endif

Код
function Test1 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if not false then
call BJDebugMsg(I2S(i))
endif
endloop
//809
endfunction
function Test2 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if false then
else
call BJDebugMsg(I2S(i))
endif
endloop
//811
endfunction
function Test3 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if false>== false then
call BJDebugMsg(I2S(i))
endif
endloop
//803
endfunction


SirNikolas падёт в неравном бою с брутфорсом, Alice.
 

МонаДата: Вторник, 23 Апреля 2013, 20:34:40 | Сообщение # 57
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Duosora, ты где там?
 

ВолчачкаДата: Вторник, 23 Апреля 2013, 20:36:54 | Сообщение # 58
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Мона, сие господин, позову его.
 

DuosoraДата: Вторник, 23 Апреля 2013, 20:37:55 | Сообщение # 59
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Это были мои тесты.

Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

МонаДата: Вторник, 23 Апреля 2013, 20:41:00 | Сообщение # 60
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Да? И каков результат?

Добавлено (23 Апреля 2013, 20:41:00)
---------------------------------------------
Под какими выводами из тестов ты подпишешься?

 

Ty3uKДата: Вторник, 23 Апреля 2013, 20:44:16 | Сообщение # 61
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Не думаю, что тесты твои - ты расставляешь отступы всегда. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DuosoraДата: Вторник, 23 Апреля 2013, 20:49:53 | Сообщение # 62
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Ty3uK,
Это кое-чья редакция моих тестов. На Терноксе оригиналы. :)


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Ty3uKДата: Вторник, 23 Апреля 2013, 21:10:35 | Сообщение # 63
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Duosora, на терноксе в первом примере тоже отступов нет.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

МонаДата: Среда, 24 Апреля 2013, 20:18:18 | Сообщение # 64
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Ty3uK, это его тесты. Только он их не проводил, потому что
if false>== false then и if GetWidgetLife(u,UNIT_STATE_LIFE) > 0. then
ему не позволили.
А еще он таки купился на всю мою хню в этой теме. Он поверил, что количество итераций цикла, исчерпывающих лимит операций, показывают скорость выполнения тела цикла. Зря. Теперь наконец-то доказано, что Дуос - программист, слепо следующий чужим инструкциям.

На самом деле в #28 и #49 написано вранье, близкое к правде, и провокация. Сосчитав количество итераций, легко определить, на какое количество команд объектного кода распадается тело цикла. И только; это не производительность.

Чтобы определить скорость выполнения jass кода, в реальных условиях, со всеми кешами L1 L2 L3 L4, со всеми передергиваниями оси, не оттраханного гринморем вара, нужно: или засекать секундомером что-то на подобие этого
Код
call DisplayTimedTextToPlayer(Player(0),0,0,20,"start")
     call Sleep(0.1)
     loop
         set lIz = 0
         loop
             exitwhen lIz == 10000
             //
             set lIz = lIz +1
         endloop
         call Sleep(0.001)
         set lIIz = lIIz+ 1
         exitwhen lIIz == 1000
     endloop
     call DisplayTimedTextToPlayer(Player(0),0,0,20,"stop")

(можно Кингу пожелать),
или читать системное время через самописный инъект,
или считать количество тактов проца через самописный инъект.
Во всех трех случаях получается погрешность ~10%. Последний способ самый простой. В game.dll есть подпрограмма:
Код
.text:6F5277D0 sub_6F5277D0    proc near               ; CODE XREF: sub_6F527E90+83
.text:6F5277D0                 rdtsc
.text:6F5277D2                 retn
.text:6F5277D2 sub_6F5277D0    endp

она ничего не принимает, а возвращает младшие 32 бита от количества процессорных тактов, натикавших с последнего ресета. (старшие херятся в EDX)
Еще есть нативка
native GetAllyColorFilterState takes nothing returns integer
, проживающая по адресу 6F3B3A50h. Заменив с помощью HEX-редактора всего три байта(game.dll[v1.26a]:3d84c8h: 50h 3ah 3bh 6fh -> d0h 77h 52h 6fh), получаем самописный бенч.
Код
function Trig_B_Actions takes nothing returns nothing
     local integer lAz = 0
     set lAz = GetAllyColorFilterState()
//
     set lAz = GetAllyColorFilterState()-lAz
     call DisplayTextToPlayer(Player(0),0,0,I2S(lAz))
endfunction

Только поправку на вызов GetAllyColorFilterState не забыть бы.
У меня приведенный пример вывел: 1521, 1808, 1425, 1601, 1629, 1756, 1518, 1443, 1722, 1499, 1852, 1678(i7-2800K). Разброс, главным образом, обусловлен кешированием.
PS
if GetWidgetLife(u,UNIT_STATE_LIFE) > 0. then\n endif
if IsUnitType(u,UNIT_TYPE_DEAD) then\n else\n endif
с точностью до погрешности измерений выполняются за одинаковое время:8000 тактов
not выполнется ~ 700 тактов.
 

Ty3uKДата: Среда, 24 Апреля 2013, 20:46:09 | Сообщение # 65
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Мона, ого, а вот это круто.
Вообще, я тоже засомневался с бенчмарка циклом, ибо на хгм все бенчи делают в таймере. hmm


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Среда, 24 Апреля 2013, 21:29:45 | Сообщение # 66
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Мой господин очень остроумен? Иль же это новый вызов дуосу?
Цитата (Мона)
А еще он таки купился на всю мою фигню в этой теме.

Может быть на две фигни? :D
Нельзя просто так и узнать точное время выполнения операций, это ещё и от мощности самого процессора зависит, который обрабатывает эти данные. Разве аппаратная часть тоже не влияет?
Цитата (Мона)
можно Кингу пожелать

Нет.
PS: Алиса из страны чудес показала истинные чудеса дуосу. Что же ответит дуос?
 

DaroДата: Среда, 24 Апреля 2013, 21:51:45 | Сообщение # 67
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 105
Блокировки:
Хорошая статья,только разбираться долго

 

ВолчачкаДата: Среда, 24 Апреля 2013, 22:56:46 | Сообщение # 68
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Даро, это вовсе не статья, а урок от пользователя Alice.
Вообще интересная.
 

Ty3uKДата: Среда, 24 Апреля 2013, 23:09:38 | Сообщение # 69
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Волчачка, было сказано выше, что интерпретатор должен выполнять команды с приблизительно одинаковой скоростью на почти любом железе.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Четверг, 25 Апреля 2013, 00:08:17 | Сообщение # 70
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Ty3uK)
должен

Цитата (Ty3uK)
почти

Ну тут всё ясно.

А так по сути, я имел ввиду по другое, а в общем неважно.

Добавлено (25 Апреля 2013, 00:08:17)
---------------------------------------------
Цитата (Ty3uK)
Волчачка, было сказано выше, что интерпретатор должен выполнять команды с приблизительно одинаковой скоростью на почти любом железе.

Помнишь говорили поточности вара. Ну это не важно.
А так если подумать.
Допустим есть события и действия с условиями. События и Действия Допустим два взаимосвязанных псевдопотока.
Помнишь тот мой тест с получением урона, где я ломал общий поток.
Т.е. там присутствует последовательное выполнение операций с неким сдвигом. Например: Если будет два таймера и они будут выполнять одну и туже операцию. Выполнят они их одинаково, но с очень мизерной разницей во времени, почему?
А Элис показал выполнение самой операции а не общее выполнение.

Алис, а Алис? А ты действительно хочешь дуосу устроить сказку?


Сообщение отредактировал Волчачка - Четверг, 25 Апреля 2013, 00:09:26
 

lawsonДата: Четверг, 25 Апреля 2013, 00:54:54 | Сообщение # 71
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
ктонибудь вообще знает почему некоторые функции требуют для выполнения время а некоторые не ждут выполнения - просто вызываются.
Например в АС была такая фунцкия по загрузке xml документа, нужен был чтото типа таймера чтобы узнать загружен ли xml документ.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

ВолчачкаДата: Четверг, 25 Апреля 2013, 01:05:58 | Сообщение # 72
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
lawson, может быть потому, что в некоторых функциях применяются стеки.

Сообщение отредактировал Волчачка - Четверг, 25 Апреля 2013, 01:06:16
 

Ty3uKДата: Четверг, 25 Апреля 2013, 10:19:01 | Сообщение # 73
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Причем здесь стек? Пуш в стек занимает ничтожно малое количество времени.

Добавлено (25 Апреля 2013, 10:19:01)
---------------------------------------------
Хотя, конечно, зависит от самого объекта, но все же.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Четверг, 25 Апреля 2013, 14:08:49 | Сообщение # 74
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Ty3uK, ладно. О просто загружает скрипт в буфер и обрабатывает большой массив текста + ещё сравнения и получения значений. Время загрузки ещё зависит от веса\количества полученных данных. Ведь буфер это большой массив данных. Отличается же от строкового в 0..255
 

NaturekidДата: Четверг, 25 Апреля 2013, 19:59:18 | Сообщение # 75
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Волчачка, твоя наглая рожа ломанула 1 из моих любимых аккаунтов в гарене, сучонок?)

 

  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz