Гость
Форумы / Вопросы по IT / Кастомные прекомпиляторы / 14 сообщений из 14, страница 1 из 1
25.11.2018, 19:09
    #757066
Droog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Здрасьте, я на этом форуме редко бываю, извиняюсь что стилем не вышел, у меня вопрос.
Я пишу на Delphi XE 8, и у меня есть мысль написать свой собственный прекомпилятор (кажется их правильнее называть препроцессорами) для оптимизации моего кода. Например, я буду писать в коде qfor8 вместо for, и мой прекомпилятор заменит такой код
Код: Delphi
1.
2.
qfor8 i := 0 to count-1 do
  values[i]:=values[i]*2;
На такой:
Код: 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.
intervalscount := count div 8;
totalintervals := intervalscount * 8;
i:=0;
while i<totalintervals do
begin
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
  values[i]:=values[i]*2;
  inc(i);
end;
for i:=totalintervals to count-1 do
  values[i]:=values[i]*2;
Может буду не заменять сам оператор for в исходном коде, а писать например так:
Код: Delphi
1.
for{qfor8}i:=0 to count-1 do
Также мой прекомпилятор будет инлайнить функции, удалять ассерты и т.д. А ещё есть идея - все без исключения циклы в коде размножить подобным образом, а все процедуры и функции инлайнить (кроме рекурсивных, естественно). Т.е. моя программа откроет мой проект, перепишет весь код и сохранит его (в других каталогах, конечно), и я скомпилирую новый код в Delphi. Может это даст солидную оптимизацию для любого кода?
У меня вопрос, насколько это даст реальный прирост скорости. Я пока не знаю, как работает компилятор в текущем Delphi XE8, и поддерживает ли он, в частности, многоядерность (многопроцессорность). Я вообще не знаю чем отличается многоядерность от многопроцессорности, а также что такое интринсики и SIMD инструкции (и умеет ли Delphi XE8 их использовать). Вот ещё вопрос в этой области – правильно ли я понимаю, что для ускорения развёрнутого кода выше его надо переписать вот так:
Код: 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.
Var
  curptr, lastptr:^integer;
begin
  intervalscount := count div 8;
  totalintervals := intervalscount * 8;
  curptr:=addr(values[0]);
  lastptr:=addr(values[totalintervals-1];
  while curptr<=lastptr do
  begin
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
    curptr^:=curptr^*2;
    inc(curptr);
  end;
  lastptr:=addr(values[count-1];
  while curptr<=lastptr do
  begin
    curptr^:=curptr^*2;
    inc(curptr);
  end;
...
Изменено: 25.11.2018, 19:10 - Droog
Рейтинг: 0 / 0
25.11.2018, 19:37
    #757129
Green2
Участник
[игнорирует гостей кроме]
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql server
Flash
Windows
1C
Unity3D
Кастомные прекомпиляторы
Droog  25.11.2018, 19:09
У меня вопрос, насколько это даст реальный прирост скорости. Я пока не знаю, как работает компилятор в текущем Delphi XE8, и поддерживает ли он, в частности, многоядерность (многопроцессорность). Я вообще не знаю чем отличается многоядерность от многопроцессорности, а также что такое интринсики и SIMD инструкции (и умеет ли Delphi XE8 их использовать).
Насколько я знаю, создатели компиляторов уже постарались оптимизировать выдаваемый код под современные процессоры.
Как это знание относится к Delphi и насколько он оптимизирует, не знаю.
Посмотрите, что пишут сами разработчики компилятора про свой код.

Оптимизация на оптимизацию необязательно хорошо.
...
Рейтинг: 0 / 0
26.11.2018, 15:28
    #760133
лунный скиталец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Droog  25.11.2018, 19:09
Несколько мыслей, в разброс:

1. Оптимизировать имеет смысл не все, а только некоторые участки кода. (если это вообще необходимо)
2. Что вы такое делаете, что его надо оптимизировать? Расчеты криптовалют? Разбиваете шифровки (криптованные сообщения)?
Я к тому, что ввод с клавиатуры нет смысла оптимизировать )) А чисто вычислительные задачи, они во-первых редкость, во-вторых там лучше оптимизировать алгоритм, а не код.

3. А вообще, Дельфи неплохо оптимизирует код, и там трудно что-то улучшить.

4. Современная программа, это всегда форма и за ней - база данных. Как правило, много вычислений производятся именно в базах данных, а Дельфи предоставляет только интерфейс к пользователям.
...
Изменено: 26.11.2018, 15:29 - лунный скиталец
Рейтинг: 1 / 0
Нравится: Владайка
26.11.2018, 17:32
    #760592
Бояннизд02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сообщение под именем пользователя
Кастомные прекомпиляторы
Droog  25.11.2018, 19:09
У меня вопрос, насколько это даст реальный прирост скорости.
Прирост скорости чего?
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
26.11.2018, 18:16
    #760716
Droog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
лунный скиталец  26.11.2018, 15:28
Несколько мыслей, в разброс:

1. Оптимизировать имеет смысл не все, а только некоторые участки кода. (если это вообще необходимо)
2. Что вы такое делаете, что его надо оптимизировать? Расчеты криптовалют? Разбиваете шифровки (криптованные сообщения)?
Я к тому, что ввод с клавиатуры нет смысла оптимизировать )) А чисто вычислительные задачи, они во-первых редкость, во-вторых там лучше оптимизировать алгоритм, а не код.

3. А вообще, Дельфи неплохо оптимизирует код, и там трудно что-то улучшить.

4. Современная программа, это всегда форма и за ней - база данных. Как правило, много вычислений производятся именно в базах данных, а Дельфи предоставляет только интерфейс к пользователям.
1.
Я слышал, тут может быть по-разному. В одних случаях критических (лимитирующих) участков кода немного, и всех их можно разобрать, оптимизировать или переписать на ассемблер. Но в других случаях эти участки размыты по разным местам кода, и трудно сходу найти где именно лимитирующая часть. И в таких ситуациях, как я понимаю, проявляются преимущества C++ перед Dephi
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее. И мой вопрос - насколько быстрее?
Вообще я давно думаю, что хороший ЯП должен поддерживать несколько вариантов одного и того же кода - для отладочной и финальной компиляции.
...
Рейтинг: 0 / 0
26.11.2018, 18:22
    #760727
Бояннизд02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сообщение под именем пользователя
Кастомные прекомпиляторы
Droog  26.11.2018, 18:16
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее.
Прошу прощения, но почему qfor будет работать быстрее for?
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
26.11.2018, 18:53
    #760815
Guest 002
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Кукусик  26.11.2018, 18:22
Droog  26.11.2018, 18:16
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее.
Прошу прощения, но почему qfor будет работать быстрее for?
джампов нет и проверки условий. тактов двадцать можно сэкономить
...
Sent from my mind
Изменено: 26.11.2018, 18:53 - Guest 002
Рейтинг: 0 / 0
26.11.2018, 19:06
    #760851
Бояннизд02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сообщение под именем пользователя
Кастомные прекомпиляторы
Guest 002  26.11.2018, 18:53
Кукусик  26.11.2018, 18:22
Droog  26.11.2018, 18:16
...
Прошу прощения, но почему qfor будет работать быстрее for?
джампов нет и проверки условий. тактов двадцать можно сэкономить
ТС мобрался свой компилятор писать?
А смысл с синтаксисом заморачиваться?
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
26.11.2018, 19:44
    #760897
Guest 002
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Кукусик  26.11.2018, 19:06
Guest 002  26.11.2018, 18:53
Кукусик  26.11.2018, 18:22
...
джампов нет и проверки условий. тактов двадцать можно сэкономить
ТС мобрался свой компилятор писать?
А смысл с синтаксисом заморачиваться?
прекомпилятор. заменять "неоптимальные" конструкции на "оптимальные". а компилятор оставить штатный
...
Sent from my mind
Рейтинг: 0 / 0
27.11.2018, 10:36
    #761894
Droog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Guest 002,

Да, всё так.
...
Рейтинг: 0 / 0
27.11.2018, 19:40
    #763889
Tayfur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Дельфи и прирост скорости... Может поменять язык разработки?
...
Рейтинг: 0 / 0
27.11.2018, 19:41
    #763893
Guest 002
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Tayfur  27.11.2018, 19:40
Дельфи и прирост скорости... Может поменять язык разработки?
brainfuck!
...
Sent from my mind
Рейтинг: 0 / 0
28.11.2018, 01:25
    #764683
Droog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Tayfur  27.11.2018, 19:40
Дельфи и прирост скорости... Может поменять язык разработки?
Ну нет, только не Щи++ )
Картинка
...
Рейтинг: 0 / 0
28.11.2018, 13:19
    #765582
лунный скиталец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кастомные прекомпиляторы
Droog  26.11.2018, 18:16
лунный скиталец  26.11.2018, 15:28
Несколько мыслей, в разброс:

1. Оптимизировать имеет смысл не все, а только некоторые участки кода. (если это вообще необходимо)
2. Что вы такое делаете, что его надо оптимизировать? Расчеты криптовалют? Разбиваете шифровки (криптованные сообщения)?
Я к тому, что ввод с клавиатуры нет смысла оптимизировать )) А чисто вычислительные задачи, они во-первых редкость, во-вторых там лучше оптимизировать алгоритм, а не код.

3. А вообще, Дельфи неплохо оптимизирует код, и там трудно что-то улучшить.

4. Современная программа, это всегда форма и за ней - база данных. Как правило, много вычислений производятся именно в базах данных, а Дельфи предоставляет только интерфейс к пользователям.
1.
Я слышал, тут может быть по-разному. В одних случаях критических (лимитирующих) участков кода немного, и всех их можно разобрать, оптимизировать или переписать на ассемблер. Но в других случаях эти участки размыты по разным местам кода, и трудно сходу найти где именно лимитирующая часть. И в таких ситуациях, как я понимаю, проявляются преимущества C++ перед Dephi
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее. И мой вопрос - насколько быстрее?
Вообще я давно думаю, что хороший ЯП должен поддерживать несколько вариантов одного и того же кода - для отладочной и финальной компиляции.
Надо начать с того - какие программы вы собираетесь писать? Бухгалтерия, космос, пивной ларек, торрентокачалки с мессенджерами.
в зависомости от выбора, ответ на ваш вопрос может быть от "нафиг не надо", до "не надо совершенно".
...
Рейтинг: 1 / 0
Нравится: Владайка
Форумы / Вопросы по IT / Кастомные прекомпиляторы / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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