powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / Кастомные прекомпиляторы
14 сообщений из 14, страница 1 из 1
Кастомные прекомпиляторы
    #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
Кастомные прекомпиляторы
    #757129
Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
[не активирован]
sql server
Flash
Windows
1C
Unity3D
Droog  25.11.2018, 19:09
У меня вопрос, насколько это даст реальный прирост скорости. Я пока не знаю, как работает компилятор в текущем Delphi XE8, и поддерживает ли он, в частности, многоядерность (многопроцессорность). Я вообще не знаю чем отличается многоядерность от многопроцессорности, а также что такое интринсики и SIMD инструкции (и умеет ли Delphi XE8 их использовать).
Насколько я знаю, создатели компиляторов уже постарались оптимизировать выдаваемый код под современные процессоры.
Как это знание относится к Delphi и насколько он оптимизирует, не знаю.
Посмотрите, что пишут сами разработчики компилятора про свой код.

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

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

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

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

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

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

4. Современная программа, это всегда форма и за ней - база данных. Как правило, много вычислений производятся именно в базах данных, а Дельфи предоставляет только интерфейс к пользователям.
1.
Я слышал, тут может быть по-разному. В одних случаях критических (лимитирующих) участков кода немного, и всех их можно разобрать, оптимизировать или переписать на ассемблер. Но в других случаях эти участки размыты по разным местам кода, и трудно сходу найти где именно лимитирующая часть. И в таких ситуациях, как я понимаю, проявляются преимущества C++ перед Dephi
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее. И мой вопрос - насколько быстрее?
Вообще я давно думаю, что хороший ЯП должен поддерживать несколько вариантов одного и того же кода - для отладочной и финальной компиляции.
...
Рейтинг: 0 / 0
Кастомные прекомпиляторы
    #760727
Бояннизд02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сообщение под именем пользователя
Droog  26.11.2018, 18:16
А я предлагаю программу, которая не разбираясь размножит и проинлайнит весь код, так что и анализировать ничего не придётся - просто перекомпилировали (пропустили через препроцессор) проект, код получился страшный (сохранён в отдельном каталоге), но после его компиляции исходная программа в целом стала работать быстрее.
Прошу прощения, но почему qfor будет работать быстрее for?
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
Кастомные прекомпиляторы
    #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
Кастомные прекомпиляторы
    #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
Кастомные прекомпиляторы
    #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
Кастомные прекомпиляторы
    #761894
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest 002,

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

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

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

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


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