Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / int64 и перечисление в структуре / 25 сообщений из 70, страница 1 из 3
05.06.2017, 22:05:02
    #39466233
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Столкнулся с тем что, данный код с переменной типом int64 работает за 13.74 сек (в простом inc несколько миллионов раз)

1)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  TSPHPValue = packed record
    _Type: TEngineVarTypes;

    TInt64: Int64;

    case Byte of
      0:
        (TInteger: IntPtr);
      1:
        (TSingle: Single);
      2:
        (TDouble: Double);
      3:
        (TExtended: Extended);
      4:
        (TCurrency: Currency);
      5:
        (TPointer: Pointer);
      6:
        (TBoxArray: PBoxArray);
  end;



2)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  TSPHPValue = packed record
    _Type: TEngineVarTypes;

    case Byte of
      0:
        (TInt64: Int64);
      1:
        (TInteger: IntPtr);
      2:
        (TSingle: Single);
      3:
        (TDouble: Double);
      4:
        (TExtended: Extended);
      5:
        (TCurrency: Currency);
      6:
        (TPointer: Pointer);
      7:
        (TBoxArray: PBoxArray);
  end;




А если написать вот так, то та же самая операция занимает 3.64 секунды

Код: pascal
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.
  TSPHPValue = packed record
    // Танец с бубнами АлАлей - гоп!
    TInt64: Int64;

    // Дальше покуем от типа
    _Type: TEngineVarTypes;


    // Таблица типов

    case Byte of
      0:
        (TInteger: IntPtr);
      1:
        (TSingle: Single);
      2:
        (TDouble: Double);
      3:
        (TExtended: Extended);
      4:
        (TCurrency: Currency);
      5:
        (TPointer: Pointer);
      6:
        (TBoxArray: PBoxArray);
  end;




Из за чего такая проблема ? Просады в 3.8 раза

Гиф демонстрация


...
Рейтинг: 0 / 0
05.06.2017, 22:14:53
    #39466239
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Кстати, все оптимизации дебагера включены были, от первого создания проекта. И никак они не влияют на сам проект..

Для тех кто хочет высказать - используй стандартный контейнер вроде TValue или стандартный Variant то придержите при себе такое.

Им мечтать и мечтать о тех производительности что у меня есть

PHP 7.1.5 - 41.123138 сек

SPHP - 3.234138 сек.
...
Рейтинг: 0 / 0
05.06.2017, 22:30:10
    #39466247
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Выравнивание?
...
Рейтинг: 0 / 0
05.06.2017, 22:39:11
    #39466253
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
НяшикИз за чего такая проблема ?

Из-за packed.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.06.2017, 22:39:37
    #39466254
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
_Vasilisk_Выравнивание?

Я тоже так подумал, но убрав packed ничего не изменилось. Возможно из за того что Delphi автоматом пакует для int64 такую структуру, для поддержки на 32 битных платформах

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  Int64Rec = packed record
    case Integer of
      0:
        (Lo, Hi: Cardinal);
      1:
        (Cardinals: array [0 .. 1] of Cardinal);
      2:
        (Words: array [0 .. 3] of Word);
      3:
        (Bytes: array [0 .. 7] of Byte);
  end;
...
Рейтинг: 0 / 0
05.06.2017, 23:00:40
    #39466261
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Зачем путь замазал?

Его уже до этого в гиф-ке все прекрасно рассмотрели.
...
Рейтинг: 0 / 0
05.06.2017, 23:03:12
    #39466262
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
rgreatЗачем путь замазал?

Его уже до этого в гиф-ке все прекрасно рассмотрели.

Да замазывал для другого источника =) На гифке было лень, решил не парится.
...
Рейтинг: 0 / 0
05.06.2017, 23:05:41
    #39466263
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
НяшикИз за чего такая проблема ? Просады в 3.8 раза
Я проверил на своей виртуалке с XE2. В обоих вариантах ~800 msec.
...
Рейтинг: 0 / 0
05.06.2017, 23:09:39
    #39466264
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Kazantsev AlexeyВ обоих вариантах ~800 msec
С ноликом ошибся, но результат всё равно идентичен. Время ~8 сек.
...
Рейтинг: 0 / 0
05.06.2017, 23:09:40
    #39466265
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Няшик, асм демонстрацию давай.
...
Рейтинг: 0 / 0
05.06.2017, 23:11:38
    #39466267
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Kazantsev AlexeyНяшикИз за чего такая проблема ? Просады в 3.8 раза
Я проверил на своей виртуалке с XE2. В обоих вариантах ~800 msec.

Странно что у меня такие проблемы случились.. Возможно архитектура процессора, или ещё чего виновата. Я в ассемблерной отладке зелень конечно. По этому и написал тут... В общем, если это никак не решается для меня, то оставлю как есть.
...
Рейтинг: 0 / 0
05.06.2017, 23:12:23
    #39466268
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Bred eFeMНяшик, асм демонстрацию давай.

А как её для структуры получить? Для inc то ничего особенного совершенно - двух случаях один и тот же код
...
Рейтинг: 0 / 0
05.06.2017, 23:17:40
    #39466269
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
НяшикСтранно что у меня такие проблемы случились..
А версия дельфей какая?
...
Рейтинг: 0 / 0
05.06.2017, 23:21:20
    #39466270
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Kazantsev AlexeyНяшикСтранно что у меня такие проблемы случились..
А версия дельфей какая?


berlin. На всякий случай приведу, что в двух случаях на гифке получается.

Вполне, одинаковый код, с учётом того что элемент идёт вторым, то естественно на 1 будет больше его индекс

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
MyPHP.dpr.57: inc(t.TInt64, i);
005E0585 8BC3             mov eax,ebx
005E0587 99               cdq 
005E0588 0106             add [esi],eax
005E058A 115604           adc [esi+$04],edx


MyPHP.dpr.57: inc(t.TInt64, i);
005E0586 8BC3             mov eax,ebx
005E0588 99               cdq 
005E0589 014601           add [esi+$01],eax
005E058C 115605           adc [esi+$05],edx
...
Рейтинг: 0 / 0
05.06.2017, 23:42:50
    #39466273
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Няшик,

Дело в выравнивании. Причём скорее всего на границе двух линеек
...
Рейтинг: 0 / 0
05.06.2017, 23:53:48
    #39466277
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Няшикberlin
На голом проекте разница действительно есть. 3 секунды против 8. Проверил и на берлине и на XE2.
...
Рейтинг: 0 / 0
06.06.2017, 07:32:49
    #39466344
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Как ни удивительно, но такие, на первый взгляд, монструозные конструкции, как
Int64Rec могут компилироваться в несколько ассемблерных команд. Если занимаешься скоростным кодингом, стоит с ассеблером разобраться ;)
...
Рейтинг: 0 / 0
06.06.2017, 07:59:05
    #39466350
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Kazantsev AlexeyНяшикberlin
На голом проекте разница действительно есть. 3 секунды против 8. Проверил и на берлине и на XE2.

А чему равно esi?
...
Рейтинг: 0 / 0
06.06.2017, 09:45:33
    #39466413
jmp_original
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
SOFT FOR YOUА чему равно esi?
SOFT, даже ежу понятно, что ESI в всегда кратно по крайней мере 8 (или 16).
И ему же понятно, что - да - дело в выравнивании.

И вот в это
НяшикЯ тоже так подумал, но убрав packed ничего не изменилось
я не верю. (Либо у него в настройках проекта включено выравнивание по байтам.)
...
Рейтинг: 0 / 0
06.06.2017, 10:34:20
    #39466461
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
jmp_originalя не верю. (Либо у него в настройках проекта включено выравнивание по байтам.)

...
Рейтинг: 0 / 0
06.06.2017, 10:41:09
    #39466472
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
SOFT FOR YOUKazantsev Alexeyпропущено...

На голом проекте разница действительно есть. 3 секунды против 8. Проверил и на берлине и на XE2.

А чему равно esi?

Переменной

Код: pascal
1.
005E054B BE28D16000       mov esi,$0060d128



... А вот что ниже, мне не совсем понятно. Но в двух случаях одинаково

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
t:
0060D128 0000             add [eax],al
0060D12A 0000             add [eax],al
0060D12C 0000             add [eax],al
0060D12E 0000             add [eax],al
0060D130 0000             add [eax],al
0060D132 0000             add [eax],al
0060D134 0000             add [eax],al
0060D136 0000             add [eax],al
0060D138 0000             add [eax],al
0060D13A 0000             add [eax],al
0060D13C 0000             add [eax],al
0060D13E 0000             add [eax],al
0060D140 0000             add [eax],al
0060D142 0000             add [eax],al
0060D144 0000             add [eax],al
0060D146 0000             add [eax],al
...
Рейтинг: 0 / 0
06.06.2017, 10:47:37
    #39466478
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
НяшикДля тех кто хочет высказать - используй стандартный контейнер вроде TValue или стандартный Variant то придержите при себе такое.

Им мечтать и мечтать о тех производительности что у меня есть


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

Когда же эти оптимизаторы уймутся!
...
Рейтинг: 0 / 0
06.06.2017, 10:48:19
    #39466481
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
Няшик
... А вот что ниже, мне не совсем понятно. Но в двух случаях одинаково

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
t:
0060D128 0000             add [eax],al
0060D12A 0000             add [eax],al
0060D12C 0000             add [eax],al
0060D12E 0000             add [eax],al
0060D130 0000             add [eax],al
0060D132 0000             add [eax],al
0060D134 0000             add [eax],al
0060D136 0000             add [eax],al
0060D138 0000             add [eax],al
0060D13A 0000             add [eax],al
0060D13C 0000             add [eax],al
0060D13E 0000             add [eax],al
0060D140 0000             add [eax],al
0060D142 0000             add [eax],al
0060D144 0000             add [eax],al
0060D146 0000             add [eax],al



это просто нули
...
Рейтинг: 0 / 0
06.06.2017, 10:56:35
    #39466500
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
schiНяшикДля тех кто хочет высказать - используй стандартный контейнер вроде TValue или стандартный Variant то придержите при себе такое.

Им мечтать и мечтать о тех производительности что у меня есть


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

Когда же эти оптимизаторы уймутся!

Ну вообще - то, он вон чего умеет - за столь короткое время. Притом мой интерпретатор даёт точно такую же скорость при использования (Оно и логично, по опкодом прыгать)
...
Рейтинг: 0 / 0
06.06.2017, 10:59:08
    #39466506
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
int64 и перечисление в структуре
defecatorНяшик... А вот что ниже, мне не совсем понятно. Но в двух случаях одинаково

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
t:
0060D128 0000             add [eax],al
0060D12A 0000             add [eax],al
0060D12C 0000             add [eax],al
0060D12E 0000             add [eax],al
0060D130 0000             add [eax],al
0060D132 0000             add [eax],al
0060D134 0000             add [eax],al
0060D136 0000             add [eax],al
0060D138 0000             add [eax],al
0060D13A 0000             add [eax],al
0060D13C 0000             add [eax],al
0060D13E 0000             add [eax],al
0060D140 0000             add [eax],al
0060D142 0000             add [eax],al
0060D144 0000             add [eax],al
0060D146 0000             add [eax],al



это просто нули


Да! Точно. От скрина выше вот что получилось

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
t:
0060C128 0200             add al,[eax]
0060C12A 0000             add [eax],al
0060C12C 0000             add [eax],al
0060C12E 0000             add [eax],al
0060C130 019BE4B5595B     add [ebx+$5b59b5e4],ebx
0060C136 F006             lock push es
0060C138 0000             add [eax],al
0060C13A 0000             add [eax],al
0060C13C 0000             add [eax],al
0060C13E 0000             add [eax],al
0060C140 0000             add [eax],al
0060C142 0000             add [eax],al
0060C144 0000             add [eax],al
0060C146 0000             add [eax],al
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / int64 и перечисление в структуре / 25 сообщений из 70, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]