Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли реализовать ветвление / 25 сообщений из 31, страница 1 из 2
20.11.2017, 10:08:25
    #39555971
Сергей N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Столкнулся с тем, что мне не хватает отдельного типа ветвления, наподобие:
Код: pascal
1.
2.
3.
4.
COMPARE(VAR1,VAR2):
  VAR1 < VAR2: ;
  VAR1 = VAR2: ;
  VAR1 > VAR2: ;


как аналога ассемблеровских инструкций
Код: pascal
1.
2.
3.
4.
cmp
  jl
  je
  jg



Конечно, я могу записать,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
if VAR1 <= VAR2 then
  if VAR1 = VAR2 then
    ;
  else
    ;
else
  ;


однако компилятор (но крайней мере, в моем случае) переводит это в избыточный код с двойным сравнением VAR1 с VAR2 (как и записано). Если в качестве переменных используются результаты функций или сложных вычислений, приходится создавать отдельные переменные и выделять под них память. При этом операция повторного сравнения все равно остается.

Можно ли как-то избежать этого?
...
Рейтинг: 0 / 0
20.11.2017, 10:14:36
    #39555974
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей NМожно ли как-то избежать этого?
Если тип числовой, то можно вычесть одну переменную из другой и работать уже с результатом.
...
Рейтинг: 0 / 0
20.11.2017, 10:22:02
    #39555976
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей Nприходится создавать отдельные переменныенормальные программисты код пишут для людей, а не для компьютера ;-)
Сергей Nвыделять под них памятьвсе это и так неявно создается зачастую, при сложных вычислениях регистров не хватает
...
Рейтинг: 0 / 0
20.11.2017, 10:24:30
    #39555977
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей N,

Math.CompareValue();
...
Рейтинг: 0 / 0
20.11.2017, 11:11:06
    #39556004
Сергей N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Kazantsev Alexey, спасибо. С помощью собственной inline функции - аналога из Math и конструкций ifthen или case задачу решить конечно можно, но компилируемый код далек от того, чего хотелось бы.
...
Рейтинг: 0 / 0
20.11.2017, 12:05:14
    #39556061
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
fd00ch,

авторнормальные программисты код пишут для людей, а не для компьютера ;-)

Нормальные программисты, бывает, и прямо для процессора пишут, если сильно нужно :) Случаи всякие бывают.
...
Рейтинг: 0 / 0
20.11.2017, 12:07:18
    #39556062
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
makhaon, SOFT FOR YOU, перелогинься))
...
Рейтинг: 0 / 0
20.11.2017, 12:12:06
    #39556065
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей N,

Есть у меня стойкое чувство, что от в твоей оптимизации нет никакого смысла. Пыль - неизмеримые наносекунды.
...
Рейтинг: 0 / 0
20.11.2017, 12:15:13
    #39556068
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
fd00ch,

мне самому не очень нравится то, что делает софт фор ю. я предпочитаю делать некоторые куски кода на mmx'е, где от этого есть реальна польза (фильтры-свёртки, например).
...
Рейтинг: 0 / 0
20.11.2017, 13:26:29
    #39556135
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
wadmanЕсли тип числовой, то можно вычесть одну переменную из другой и работать уже с результатом.И отгрести переполнение
...
Рейтинг: 0 / 0
20.11.2017, 13:45:09
    #39556152
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
_Vasilisk_wadmanЕсли тип числовой, то можно вычесть одну переменную из другой и работать уже с результатом.И отгрести переполнение
Зависит от...
...
Рейтинг: 0 / 0
20.11.2017, 13:46:37
    #39556155
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
wadmanЗависит от...Лично я не люблю, когда код начинает зависеть
...
Рейтинг: 0 / 0
20.11.2017, 13:49:27
    #39556156
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей Nоднако компилятор (но крайней мере, в моем случае) переводит это в избыточный код с двойным сравнением VAR1 с VAR2 (как и записано). Если в качестве переменных используются результаты функций или сложных вычислений, приходится создавать отдельные переменные и выделять под них память.Студент? Писать программу на Delphi под Windows и волноваться из-за того, что компилятор делает на одну-две машинных инструкции сравнения больше - это какая-то опасная психическая мания.
...
Рейтинг: 0 / 0
20.11.2017, 13:59:49
    #39556165
Сергей N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Зашедший, а я раньше удивлялся, почему у нас везде культура производства такая низкая?

А вообще убедили. Делаю простые ассемблерные вставки и снимаю вопрос.
...
Рейтинг: 0 / 0
20.11.2017, 14:05:39
    #39556169
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей NЗашедший, а я раньше удивлялся, почему у нас везде культура производства такая низкая?
А вообще убедили. Делаю простые ассемблерные вставки и снимаю вопрос.Вот поэтому она и низкая, что дилетанты начинают блох подковывать вместо строительства конвейера и делать ассемблерные вставки там, где они не нужны.
Что-то переписывать на ассемблере есть смысл только после прогона профилировщиком и нахождения боттлнека, юноша.
...
Рейтинг: 0 / 0
20.11.2017, 14:05:54
    #39556170
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
_Vasilisk_wadmanЗависит от...Лично я не люблю, когда код начинает зависетьОт программиста?
...
Рейтинг: 0 / 0
20.11.2017, 14:21:20
    #39556185
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
wadmanОт программиста?От входных данных
...
Рейтинг: 0 / 0
20.11.2017, 15:01:42
    #39556216
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
_Vasilisk_wadmanОт программиста?От входных данных
Я не верю в цифровых духов. Считаю, что всё зависит от программиста.
...
Рейтинг: 0 / 0
20.11.2017, 15:46:07
    #39556262
Сергей N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Зашедший, то что вы умеете пользоваться профайлерами, это здорово. То, что вы с помощью них умеете искать узкие места, тоже прекрасно. Пожелаю вам и код писать красивый, ведь, красота - это неосознанное признание целесообразности, не правда ли.
...
Рейтинг: 0 / 0
20.11.2017, 15:57:13
    #39556274
AWSVladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей NМожно ли как-то избежать этого?
Сергей, ну вот не знаю как ты пишешь.
Делфя гененирует тот код, который тебе надо.
Код: 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.
var i,i2:integer;
procedure TForm1.Button1Click(Sender: TObject);
label l1,l2,l3;
begin
 i:=tag;
 i:=15;
 asm
   nop
   nop
 end;
 if i<i2 then  goto l1
 else if i=i2 then goto l2
 else goto l3;

 asm
   nop
   nop
 end;

 l1:
 l2:
 l3:

end;
...
Рейтинг: 0 / 0
20.11.2017, 15:59:00
    #39556275
AWSVladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
если 1 сравнение и ветка, то только самому руками
...
Рейтинг: 0 / 0
20.11.2017, 16:14:55
    #39556292
AWSVladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
i:=tag;
 i:=15;
 asm
   nop
   nop
      mov eax,i
      cmp eax,i2
      jl l1
      jz l2
      jmp l3
 end;
...
Рейтинг: 0 / 0
20.11.2017, 16:35:29
    #39556303
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей NЗашедший, то что вы умеете пользоваться профайлерами, это здорово. То, что вы с помощью них умеете искать узкие места, тоже прекрасно. Пожелаю вам и код писать красивый, ведь, красота - это неосознанное признание целесообразности, не правда ли.Красивый код - это в первую очередь легко поддерживаемый и расширяемый код, покрытый интеграционными и юнит-тестами. За использование без какой-либо нужды вместо читаемого "if" нагромождения ассемблера в софтверных компаниях с выстроенным процессом разработки тимлид сначала влепит выговор, а при упорствовании - уволит.
...
Рейтинг: 0 / 0
20.11.2017, 20:44:48
    #39556391
Гхостик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Зашедший, ну что ты в самом деле со своими приземленными материями пристал к страждущему высокого искусства низкоуровневой оптимизации! Он художник, он так видит.
...
Рейтинг: 0 / 0
20.11.2017, 20:53:52
    #39556395
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли реализовать ветвление
Сергей NСтолкнулся с тем, что мне не хватает отдельного типа ветвления, наподобие:
Код: pascal
1.
2.
3.
4.
COMPARE(VAR1,VAR2):
  VAR1 < VAR2: ;
  VAR1 = VAR2: ;
  VAR1 > VAR2: ;


...
однако компилятор...
Можно ли как-то избежать этого?


Код: pascal
1.
2.
3.
4.
5.
  case CompareStr('1', '2') of
    -1: ... ;
     0: ... ;
     1: ... ;
  end;


Во что там переводит канпилятор - не знаю и знать не хочу.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли реализовать ветвление / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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