Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
         
Обсуждаем новые возможности и баги
 
Просьба писать про Embarcadero RAD Studio XE5, XE6, XE7, XE8, 10.x (Seattle, Berlin,Tokyo)
  По вопросам скачивания - Тема в Варезнике (lite-версии тут)
  Вопросы по неюникодным версиям Delphi — шестая бумага
  Бесплатные Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus
  Коммерческие компоненты и утилиты для Delphi/BCB
  Вопросы по компонентам для Delphi, C++ Builder разных версий
  Новые языковые возможности, начиная с Delphi 2005 по XE4 — здесь, и New!здесь еще
  Англоязычный официальный форум Embarcadero — здесь
  Embarcadero Quality Central, веб интерфейс — здесь, новый Quality Portal тут
  Программирование на Delphi — викиверситет
  Другие ресурсы
   Предыдущие бумаги
 
     Вопросы ..XE4       Вопросы ..XE3    Вопросы ..XE2      
  Вопросы ..2009-XE    Вопросы ..<2009 / ч.5    Вопросы ..<2009 / ч.4      
  Вопросы ..<2009 / ч.3    Вопросы ..Delphi 2 / ч.2    Вопросы ..Delphi  

  Выключение встроенного эксперта Castalia  для XE8 (иногда помогает при вылетах и тормозах)  
  Полезные плагины(эксперты)

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:25 11-09-2013 | Исправлено: Komandor, 18:58 18-03-2022
glk63

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая вот проблема: с некоторых пор перестал работать GodeGuard. (RadStudio 10.2.1, Win10 x64). Т.е. включаешь CodeGuard, запускаешь программу (любую) и в момент возникновения любого события, связанного с CodeGuard, программа "уходит в себя" (не вылетает, а просто висит). Не могу понять, с чем сие может быть связано.

Всего записей: 112 | Зарегистр. 10-10-2005 | Отправлено: 07:00 26-10-2018 | Исправлено: glk63, 08:20 26-10-2018
McTarik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RAD Studio 10.3 Riо представление в Париже (Франция) 15-го Ноября  
Полная инфа тут...

Всего записей: 92 | Зарегистр. 21-11-2009 | Отправлено: 19:50 28-10-2018
vizier1966

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
появился такой вопрос - была установлена XE7  с named лицензией. пришло время поменять боевую машину на новую, при переустановке и попытки регистрации новой машине, говорит, что лимит на лицензии исчерпан. что делать, как удалить лицензию со старой?

Всего записей: 33 | Зарегистр. 28-02-2006 | Отправлено: 17:28 07-11-2018
vez



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Добрый день!
появился такой вопрос - была установлена XE7  с named лицензией. пришло время поменять боевую машину на новую, при переустановке и попытки регистрации новой машине, говорит, что лимит на лицензии исчерпан. что делать, как удалить лицензию со старой?

Никак, исчерпание на сайте абаракадабры. Если лицензия - то надо обратиться  
https://supportforms.embarcadero.com/
если все правильно заполнено то они добавят еще 5 установок.

Всего записей: 559 | Зарегистр. 02-06-2003 | Отправлено: 19:49 07-11-2018 | Исправлено: vez, 19:50 07-11-2018
vizier1966

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vez, спасибо. заполнил заявку, ожидаю ответ

Всего записей: 33 | Зарегистр. 28-02-2006 | Отправлено: 00:13 08-11-2018
vizier1966

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добавили)

Всего записей: 33 | Зарегистр. 28-02-2006 | Отправлено: 11:21 08-11-2018
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Про вкручивание мозгов компилятору Delphi ничего не слышно было в новых версиях?
Меня очень угнетают вот такие его "изыски"... Очень бы хотелось, чтобы это был уже нормальный компилятор, а не что бы "абы как работало"... Все-таки иногда (читай "всегда") нужна и скорость работы приложения. Понятно что вручную будет максимально быстро (именно в случае с Delphi), но используя FPC ты хотя бы уверен, что он старался...
 
Оригинальный код:

Код:
 
  RGBColor = record
      case DWORD of
      0: (U: UInt32);
      1: (b, g, r, a: Byte);
    end;
 
  mem: PByte;
  c: RGBColor;  
 
  (mem + 0)^ := c.b;
  (mem + 1)^ := c.g;
  (mem + 2)^ := c.r;
  (mem + 3)^ := c.a;
  inc(mem, 4);
 

 
Delphi (Release, Optimizations):

Код:
 
movzx   rax, byte ptr [rbp+var_s64]
mov     rcx, [rbp+var_s40]
mov     [rcx], al
movzx   rax, byte ptr [rbp+var_s64+1]
mov     rcx, [rbp+var_s40]
mov     [rcx+1], al
movzx   rax, byte ptr [rbp+var_s64+2]
mov     rcx, [rbp+var_s40]
mov     [rcx+2], al
movzx   rax, byte ptr [rbp+var_s64+3]
mov     rcx, [rbp+var_s40]
mov     [rcx+3], al
add     rcx, 4
 

 
К слову...
FPC (O3+):

Код:
 
mov     dl, byte ptr [rbp+var_10]
mov     [rax], dl
mov     dl, byte ptr [rbp+var_10+1]
mov     [rax+1], dl
mov     dl, byte ptr [rbp+var_10+2]
mov     [rax+2], dl
mov     dl, byte ptr [rbp+var_10+3]
mov     [rax+3], dl
add     rax, 4
 

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 18:12 10-11-2018 | Исправлено: Sulphide, 18:58 10-11-2018
ChSerg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Про вкручивание мозгов...

Вспоминается, когда я на ASM писал под DOS резидентные .COM - модули, и написанный код не помещался в 64К... Да, были времена...

Всего записей: 936 | Зарегистр. 30-08-2001 | Отправлено: 20:08 10-11-2018 | Исправлено: ChSerg, 20:09 10-11-2018
MBo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Оригинальный код

 
А... зачем этот код, который делает 4 шага вместо одного? Он ведь ничего не переставляет, просто копирует.
 
PDword(mem)^ := c.U;  или Move

Всего записей: 36 | Зарегистр. 02-09-2004 | Отправлено: 21:06 10-11-2018 | Исправлено: MBo, 21:08 10-11-2018
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А... зачем этот код, который делает 4 шага вместо одного?  

Суть не в том как именно работает этот код. Он здесь только для наглядного примера. Суть в том, что каким бы ни был mem (PByte, PDword, PSingle, PDouble и т.д.) и BGRA, компилятор при каждой записи значения по нему будет читать значение этого mem из памяти, Карл! А не держать его в регистре как это делает компилятор FPC. Это рукалицо, просто.
 
ps Ну и пользоваться именно дельфовским Move - это, конечно, верх оптимизации... Вы внутрь-то заглядывали этого самого Move? Там же побайтовое копирование, плюс к этому гарантированные один call, один jmp, ret и ещё куча всего.

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 21:14 10-11-2018 | Исправлено: Sulphide, 22:18 10-11-2018
MBo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
>омпилятор при каждой записи значения по нему будет читать значение этого mem из памяти
 
ОК, понятно. Но не похоже, что кто-нибудь возьмётся за улучшение кодогенератора, ничего по этому поводу эмбари  даже не обещают.
 
 
>Вы внутрь-то заглядывали этого самого Move? Там же побайтовое копирование
Да, заглядывал. Эта функция была оптимизирована -  что характерно-  силами сообщества (конкурс FastCode к выходу 2006)
 
size case s 4: PInteger(D)[0] := PInteger(S)[0];
 
@@M04:
        MOV     ECX, [EAX]
        MOV     [EDX], ECX
        RET

Всего записей: 36 | Зарегистр. 02-09-2004 | Отправлено: 06:24 11-11-2018
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sulphide
64-х битный компилятор у них не очень хорош, сравните, что генерируется в 32-х битном режиме?
 
И попутный вопрос: а как вы в режиме Release ассемблерный код посмотрели, из самой IDE или сторонним декомпилятором?

Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 09:21 11-11-2018
SuPriTo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
В последней версии Tokyo 64-битный компилятор таки правильно оптимизирует, а 32-битный нет.

Всего записей: 1474 | Зарегистр. 24-03-2009 | Отправлено: 12:50 11-11-2018
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
64-х битный компилятор у них не очень хорош, сравните, что генерируется в 32-х битном режиме?

Можно было бы сравнить, но 32 бита в 2018 году, это такое... Особенно для дельфи и вот почему - самый главный косяк в 32х битах это то, что  компилятор дельфи все еще использует FPU для арифметики с плавающей запятой. Это треш и угар надо сказать. Не SSE, а FPU со всеми его задержками, тормозами и недостатками.

Цитата:
И попутный вопрос: а как вы в режиме Release ассемблерный код посмотрели, из самой IDE или сторонним декомпилятором?

В данном случае сторонним. Но ничто не мешает в релиз конфиге поставить "отладочная информация" и оставить "оптимизации". Должно стопорнуть там где надо. Вроде я так делал когда-то. Ну или в дебаг версии поствить галочку "оптимизация".
 
Нарыл в глубинах интернета я исходники для простецкого рейтрейсера для дельфи, но выдает он очень красивую картинку. Это консольное приложение, которое рендерит картинку в один поток в TBitmap и после сохраняет бмпшку в файл. Вобщем решил от нечего делать загнать туда TParallel.For, всё сразу залетало на все мои 12 потоков в x64)) После решил сравнить как оно у FPC c этими же исходниками. Портанул под FPC. Вместо TParallel.For там используется TProcThreadPool.DoParallel, идентичная фактически с TParallel.For. Поставил AVX2 для компилятора FPC.  
Результаты для 6 ядер 12 потоков, картинка 8192 x 8192 x 32бит:
 
дельфи x64 - 16.5 секунд
дельфи x32 - 25 секунд
FPC x64 - 15.2 секунд
 
В приложении используется Double везде где только можно и я понял, что для x64 лучше не менять его на Single. Т.к. компилятор все Single будет преобразовывать в Double. Ну оно и понятно Single родной тип только для FPU, но не для SSE. Скорость дико падает вместо того чтобы расти за счет меньшей точности. Возможно в x32 замена на Single чуть даст скорости (не проверял), но не для x64 точно. Делал я по самому простому пути для потоков выдавались только индексы строк картинки тоесть 8192 шутки и по сути параллельно считались только 12 строчек, то есть очень много времени уходит на переключение потоков для расчета всей картинки. А если картинку заранее разделить на 12 частей по числу потоков без их частого переключения и дать каждому потоку свою часть, то думаю что отрыв у FPC будет значительно больше.
 
зы Собственно тот код, что я выкладывал ранее и есть частичка этого рендера.
Пример картинки - https://imgur.com/90Nmkm1

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 19:22 11-11-2018 | Исправлено: Sulphide, 21:04 11-11-2018
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi 10.2.3 x64, Release

Код:
 
type
  RGBColor = record
    case DWORD of
    0: (U: UInt32);
    1: (b, g, r, a: Byte);
  end;
 
procedure DoTest;
var
  mem: PByte;
  c: RGBColor;
begin
  mem := GetMemory(8);
 
  (mem + 0)^ := c.b;
  (mem + 1)^ := c.g;
  (mem + 2)^ := c.r;
  (mem + 3)^ := c.a;
  inc(mem, 4);
 
  writeln('DoTest');
end;
 

генерирует такой ассемблер (декомпилятор IDA Pro 6.8)

Код:
 
sub_4265A0 proc near
 
var_C= byte ptr -0Ch
var_B= byte ptr -0Bh
var_A= byte ptr -0Ah
var_9= byte ptr -9
 
sub     rsp, 38h
mov     ecx, 8
call    sub_4105E0
movzx   rcx, [rsp+38h+var_C]
mov     [rax], cl
movzx   rcx, [rsp+38h+var_B]
mov     [rax+1], cl
movzx   rcx, [rsp+38h+var_A]
mov     [rax+2], cl
movzx   rcx, [rsp+38h+var_9]
mov     [rax+3], cl
mov     rcx, cs:off_42E7C8
lea     rdx, aDotest    ; "DoTest"
call    sub_406C60
mov     rcx, rax
call    sub_406DC0
call    sub_4059B0
add     rsp, 38h
retn
 
sub_4265A0 endp
 

 
Добавлено:

Цитата:
Т.к. компилятор все Single будет преобразовывать в Double.

На сколько я помню, все типы в итоге приводятся к Extended (родной формат сопроцессора).

Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 20:09 11-11-2018 | Исправлено: zedxxx, 20:09 11-11-2018
Sulphide

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
генерирует такой ассемблер (декомпилятор IDA Pro 6.8)  

Вот то-то оно и странно, что раз на раз не приходится, в данном случае у нас mem - результат работы GetMem, после которого дельфи решил держать результат в RAX. А в примере, который я приводил ранее память уже была выделена заранее и передавалась в записывающую процедуру как параметр и там компилятор решил каждый раз читать ее перед записью.
 

Цитата:
На сколько я помню, все типы в итоге приводятся к Extended (родной формат сопроцессора).

Extended в x64 дельфи = Double. Тоесть 8 байт. А сопроцессор в x64 не используется вообще.
В x32 Extended 10 байт и работает на сопроцессоре (FPU)
 
 
Вобщем теперь я не могу повторить то, что у меня было... Либо я что-то не так сделал, хотя был релиз код. Либо дельфи создавала дебаг версию все равно без оптимизации (там с настройками проекта была какая-то беда по началу, дебаг версия не дебажилась, а дебажилась релиз версия, я конечно это исправил, но видимо не до конца, возможно отсутствовала галочка - оптимизация).
Теперь в абсолютно новом проекте дебаг версия компилятора без оптимизации гарантировано вставляет чтение пойнтера перед каждой записью, а в дебаг с оптимизацией делает это 1 раз. В итоге кипиш был напрасным. Всем пардон!))

Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 20:17 11-11-2018 | Исправлено: Sulphide, 20:48 11-11-2018
SuPriTo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zedxxx
У вас код получился без оптимизации.
Я сделал с оптимизацией получилось так (10.2.3, 64 bit, Debug, optimization):

Код:
 
mem := GetMemory(8);
mov ecx,$00000008
call GetMemory
movzx rcx,byte ptr [rbp+$2c]
mov [rax],cl
movzx rcx,byte ptr [rbp+$2d]
mov [rax+$01],cl
movzx rcx,byte ptr [rbp+$2e]
mov [rax+$02],cl
movzx rcx,byte ptr [rbp+$2f]
mov [rax+$03],cl
 

Всего записей: 1474 | Зарегистр. 24-03-2009 | Отправлено: 21:20 11-11-2018
zedxxx

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SuPriTo
С оптимизацией. И у вас код полностью аналогичен моему листингу, просто записан чуть иначе. Байт со стека записывается в регистр rcx, а затем записывается в память по адресу из регистра rax.

Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 22:15 11-11-2018 | Исправлено: zedxxx, 22:18 11-11-2018
StalkerSoftware



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vez

Цитата:
 
Никак, исчерпание на сайте абаракадабры. Если лицензия - то надо обратиться  
https://supportforms.embarcadero.com/
если все правильно заполнено то они добавят еще 5 установок.

А мне (Delphi 10.2.3) только 3 добавили.

Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 16:47 12-11-2018
VitaliM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
vez
А взять SRK код со старой машины и установить его на новой машине и использовать файл лицензии со старой машины уже никто и не помнит как? У меня регистрация от 2013 года гуляет с компьютера на компьютер без проблем, только SRK переношу. SRK находится в файле c:\users\<юзер имя>\sanct.log, там он называется Registration Key=xxxxxx, а перенос SRK делается с помощью набора S_2k9_2k10_CustomSRK.rar (более новый RS10_CustomSRK.7z), которому уже скоро 10 лет стукнет, а он все работает. Только искать\спрашивать надо  в варезнике. Оригинальный пост был здесь.

Всего записей: 2180 | Зарегистр. 12-01-2005 | Отправлено: 17:02 12-11-2018 | Исправлено: VitaliM, 17:44 12-11-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru