|
|
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Почему когда есть в таблице VAR какие нибудь переменные указатели, то функция inline сходит с сума ? И тормозит дико код. Ведь на вызовах должна быть экономия! Может что в настройках не так ? - Выдаёт : 0.250906 сек. Код: pascal 1. - Выдаёт : 0.265767 сек. Код: pascal 1. Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 16:50:08 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикПочему когда есть в таблице VAR какие нибудь переменные указатели, то функция inline сходит с сума ? И тормозит дико код. Ведь на вызовах должна быть экономия! Может что в настройках не так ? - Выдаёт : 0.250906 сек. Код: pascal 1. - Выдаёт : 0.265767 сек. Код: pascal 1. Код: pascal 1. 2. 3. 4. 5. 6. "Почему когда я пью газировку, меня шибает не в нос, а в самую маковку ?" Смотри ассемблерный код, лучше выкладывай сюда оба случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 16:59:53 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, inline меняет распределение регистров в вызывающей и вызываемой процедурах и, следовательно, может влиять на качество их оптимизации из-за потребности в большем количестве регистров для "объединенной" процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:07:46 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, в качестве примера, именно поэтому в поразрядной сортировке http://guildalfa.ru/alsha/node/21 мне пришлось фазы распределения реализовать как самостоятельные процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:12:13 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
schi, Вот сама функция которая копирует строки (по несколько байтов, за один такт), и остаток. Чем move не подошёл - я проект ещё делаю под лазур, и там она медленно работает, вот пишу что бы там и там. Код: 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. 27. 28. 29. Её ассемблер Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Рассматривать Ассемблер будем на такой функции Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Без inline выходит Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Вместе с inline Код: 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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:12:40 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Пользуюсь случаем, дабы спросить... Я воспользовался компилятором GCC и сделал ASM благодаря сайту godbolt Дальше полученный код засунул в Delpho Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Но, по результату она оказалась медленной на 0.011862 сек. Это говорит о том, что GCC медленнее Delphi ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:28:11 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Для сайта того я задал максимальную оптимизацию -m32 -O3 -Os -S -masm=intel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:32:04 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, какой смысл переизобретать Move? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:44:46 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Какая офигенная "оптимизация". Еще и с ошибками =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:45:49 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНяшик, какой смысл переизобретать Move? В скорости, если Delphi нам выдаёт хорошие результат в виде Код: pascal 1. 2. 3. 4. 0.258414 сек. То лазур уже выдаёт 0.520669 сек. =___= БРРР ... С моим велосипедом он выдаёт 0.472578 сек Опять же все оптимизации выставил на максимум.. Siemargl, Ну уж какая есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:52:05 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, Поизучай что ли матчасть https://github.com/graemeg/freepascal/blob/master/rtl/i386/fastmove.inc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:56:05 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, тебе намекают на SizeOf(EngineChar) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 17:56:59 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovНяшик, тебе намекают на SizeOf(EngineChar) А что тут такого? Мне удобнее когда все типы - заранее переопределяются настройками движка, в зависимости под какую я платформу хочу собрать, и какие типы строк я хочу использовать. Сейчас у меня там Код: pascal 1. 2. SiemarglНяшик, Поизучай что ли матчасть https://github.com/graemeg/freepascal/blob/master/rtl/i386/fastmove.inc А на боевых действиях это как - то коряво работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 18:02:05 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, сам посмотри, сколько лишних пересылок порождается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 18:22:28 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, Так ты код посмотрел? Проверил, что у тебя RTL с USE_FASTMOVE собран? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 18:59:42 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
SiemarglНяшик, Так ты код посмотрел? Проверил, что у тебя RTL с USE_FASTMOVE собран? Вроде как. Поставил Код: pascal 1. И ничего не изменилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 20:14:10 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикSiemarglНяшик, Так ты код посмотрел? Проверил, что у тебя RTL с USE_FASTMOVE собран? Вроде как. Поставил Код: pascal 1. И ничего не изменилось поставил где, у себя в программе, использующую уже собранную RTL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 20:48:36 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Vizit0rНяшикпропущено... Вроде как. Поставил Код: pascal 1. И ничего не изменилось поставил где, у себя в программе, использующую уже собранную RTL ? А ну так собирать ещё RTL нужно... Ну если в гугле 1 запрос по данному поводу "USE_FASTMOVE LAZARUS" то тут уже не совсем мой косяк. Киньте мануал как это сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 21:14:01 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Кстати, интересно, а зачем нужен режим без USE_FASTMOVE, который по-умолчанию, как я понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:08:43 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикSiemarglНяшик, Так ты код посмотрел? Проверил, что у тебя RTL с USE_FASTMOVE собран? Вроде как. Поставил Код: pascal 1. И ничего не изменилось :LOL: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:22:26 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикНо, по результату она оказалась медленной на 0.011862 сек. Это говорит о том, что GCC медленнее Delphi ? Это говорит о том, что там более оптимизированный алгоритм используется - он GPU использует. Кстати, алгоритм запатентованный вроде бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:29:05 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикПользуюсь случаем, дабы спросить... Я воспользовался компилятором GCC и сделал ASM благодаря сайту godbolt .... Выбери там же Clang 4 и получишь SSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:56:56 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)НяшикНо, по результату она оказалась медленной на 0.011862 сек. Это говорит о том, что GCC медленнее Delphi ? Это говорит о том, что там более оптимизированный алгоритм используется - он GPU использует. Кстати, алгоритм запатентованный вроде быА давай еще сказку на ночь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:59:02 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
SiemarglНяшикПользуюсь случаем, дабы спросить... Я воспользовался компилятором GCC и сделал ASM благодаря сайту godbolt .... Выбери там же Clang 4 и получишь SSE Ну... Поставил, впихнул в Delphi... И вижу что моя функция на Delphi - 0.002525 сек быстрее.. Пробовал с разными оптимизациями, остановился на -m32 -O3 -Os -Oz Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. И всё же, почему так медленно? Может это Delphi ассемблер как - то коверкает. Вот листинг Код: 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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 00:06:11 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, Вот код от Clang4 с SSE (-O3 -m32), у тебя же лишние опции. Код: plaintext 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. Ес-но XMM инструкции начнут работать, если у тебя > 32 байт данных. QueryPerformanceCounter используй для высокой точности. Ну и ошибка никуда не делась - если области перекрываются, может быть мусор, а не копия. Дальше - инлайнить такие огромные функции - обычно невыгодно, используй fastcall - два параметра в регистрах ECX, EDX . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 08:50:40 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Сонный и сам - нарушил главное правило - не мешай оптимизатору =) Код: plaintext 1. 2. 3. 4. 5. 6. 7. asm Clang4 -O3 -m32 Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 08:58:12 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
И ради интереса, полное развертывание циклов с опциями -O3 -m32 -mfpmath=sse -fno-builtin -march=haswell ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 09:10:38 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
А я вот краем уха где-то слышал, что в современных процессорах MOVSD (MOVSQ для 64 бит), работает с той же скоростью, что и все ваши хитропопые оптимизации... (Интересуют ли нас не совсем современные процессоры - вот в чём вопрос.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 09:17:38 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
ваш край уха немного запаздывает ) в приложенном листинге есть 128-битная movups, которая из древнего SSE можно явно указать другую архитектуру, тогда используется vmovups -до 256 бит, поновее из AVX, но тоже весьма древняя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 09:48:13 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик, авторЭто говорит о том, что GCC медленнее Delphi ? Странно как-то у тебя GCC собрал, да и в делфи ты какой-то странный код приводишь. Вод XE6 Для больших блоков: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. По 8 байт (64 бита) переносит, элайн учитывает. Будет ли по 128 или 256 бит быстрее - вопрос спорный, с учетом 64х битности шины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 10:15:04 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Няшик Может это Delphi ассемблер как - то коверкает. Да, конечно. Меняет твои правильные команды на свои неправильные. Это заговор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 10:52:05 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
makhaon Будет ли по 128 или 256 бит быстрее - вопрос спорный, с учетом 64х битности шины. Какой шины ? И причем тут шина ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 10:53:22 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
SiemarglНяшик, Вот код от Clang4 с SSE (-O3 -m32), у тебя же лишние опции. Далее, еще надо правильно измерять и не забывать про погрешности измерений. Ес-но XMM инструкции начнут работать, если у тебя > 32 байт данных. Ну использовать XMM инструкции я не могу позволить себе - из за компилятора. Так что, опции далеко не лишние, особенно m32 SiemarglQueryPerformanceCounter используй для высокой точности. Её и использую как раз - таки. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. SiemarglНу и ошибка никуда не делась - если области перекрываются, может быть мусор, а не копия. У меня такого не будет, так как код всегда находится в движении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:10:22 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
SiemarglСонный и сам - нарушил главное правило - не мешай оптимизатору =) Код: plaintext 1. 2. 3. 4. 5. 6. 7. asm Clang4 -O3 -m32 Код: plaintext 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. Данный код перемешает по 1 символу за такт, когда можно по 2 что влияет на скорость выполнение в N сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:14:13 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикДанный код перемешает по 1 символу за такт, когда можно по 2 что влияет на скорость выполнение в N сек. С какого перепуга? Код: plaintext 1. 2. Сколько перемещают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 12:07:02 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
SiemarglНяшикДанный код перемешает по 1 символу за такт, когда можно по 2 что влияет на скорость выполнение в N сек. С какого перепуга? Код: plaintext 1. 2. Сколько перемещают? И опять же эти инструкции которые мой 32 битный компилятор не скушает. Хм.. И да, код на 0.000079 сек быстрее оказался, в отличии от Delphi кода (Delphi код так хорош? В своём 32 битном режиме) Код: 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. А тот же GCC 7.1 генерит вот такое .. По одному символу судя по погрешности в дохера.. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 12:27:03 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
НяшикSiemarglпропущено... С какого перепуга? Код: plaintext 1. 2. Сколько перемещают? И опять же эти инструкции которые мой 32 битный компилятор не скушает. ... Это 32-битные инструкции. Если же встроенный в Д/Лазарь ассемблер их не знает, замени на FILD/FSTP как XE6 делает - это одинаково опции для gcc 5/6/7 я уже писал -O3 -m32 -mfpmath=sse -fno-builtin -march=ivybridge (marh по возможному для тебя выбору) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 12:41:04 |
|
||
|
inline корявo работает
|
|||
|---|---|---|---|
|
#18+
Начиная с Nehalem, Интел заоптимизировал инструкцию REP MOVSx. Реализующий ее микрокод использует сторадж максимально возможной длины, то есть обычный вызов REP MOVSD покажет производительность не уступающую SSE-инструкциям, по факту пересылая ГОРАЗДО больше четырех байт за такт (точное число зависит от архитектуры). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 12:44:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2042284]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 281ms |

| 0 / 0 |
