|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Я переделал на сначала генерацию большого количества маленьких матриц. И теперь замеряю суммирование сразу их всех N раз. Теперь на маленьких матрицах вариант № 1 обгоняет вариант № 2 в 1.2 раза. Это не потому что я пытаюсь письками мерятся, как вы предположили. Я вообще (точнее почти) не думал о производительности когда код писал. Да я и о бенчмарке особо не думал. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:11 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Ребят. Сейчас уже трудно собрать осколки сорцов в кучку. Вы можете еще раз их актуализировать. Где чей последни релиз? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:13 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, мои можно не смотреть, они явно хуже, чем у petrav и я пока даже не знаю, что в его алгоритме ещё можно оптимизировать. Кажется, он случайно создал самое эффективное решение. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev Кажется, он случайно создал самое эффективное решение. :) Чисто случайно - это самый лучший паттерн разработки! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:24 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev mayton, мои можно не смотреть, они явно хуже, чем у petrav и я пока даже не знаю, что в его алгоритме ещё можно оптимизировать. Кажется, он случайно создал самое эффективное решение. :) Ну прямо случайно... лицом по клавиатуре катался и случайно создал. Удача не простое ремесло. Судьба всегда на стороне сильных. Если по делу и без шуток. Я видел матричную арифметику реализованную и в стиле arr[i][j], и в стиле сдвигания указателей *++ptr. Причём вторая (на сдвиге указателей) побеждала в бенчмарках. Хотя теоретически было совершенно непонятно почему? Логически казалось, что что должно быть наоборот. Я думаю можно мой алгоритм улучшить. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:46 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav, в английском флоте в личном деле офицеров указывают "индекс удачливости". Вобщем... petrav, ты - фартовый. Тебя можно кидать на нерешаемые проблемы и ты рандомно постучав по клавиатуре - все порешаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:53 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav ... Я видел матричную арифметику реализованную и в стиле arr[i][j], и в стиле сдвигания указателей *++ptr ... если нет помех, то ++ptr инлайнится в регистровую операцию. это невозможно обогнать, mini.weblab давала же цитату из Кернигана, а ты игнорируешь... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 17:17 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
boobymini.weblab давала же цитату из Кернигана Вот только у современной интеловской системы команд нет косвенной автоинкрементной адресации. Та цитата относилась к дековской продукции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 18:04 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Если в OpenMP версии уменьшить размер матрицы до 1 или до нуля то мы наверное сможем как-раз увидеть накладные расходы на ::createThread или pthread_create (для linux) и для джоина их обратно в основной поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:00 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, во, страсть какая... Регистры-то хоть есть какие-нибудь, чтобы смещение на константу организовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:03 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Я видел матричную арифметику реализованную и в стиле arr[i][j], и в стиле сдвигания указателей *++ptr. Причём вторая (на сдвиге указателей) побеждала в бенчмарках. Хотя теоретически было совершенно непонятно почему? Логически казалось, что что должно быть наоборот. у Голуба был пример: # 88. Используйте указатели вместо индексов массива. Вообще, инкрементирование указателя - лучший способ перемещения по массиву, чем индекс массива. Например, простой цикл, подобный следующему, страшно неэффективен: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Выражение array[row][col] требует двух умножений и одного сложения во время выполнения. Вот что происходит на самом деле: array + (row * size_of_one_row) + (col * size_of_a_thing) Каждая структура имеет размер 12 байтов, и 12 не является степенью 2, поэтому вместо умножения нельзя использовать более эффективный сдвиг. Код: plaintext 1. 2. 3. 4. 5.
При этом здесь вообще нет умножения во время выполнения. Оператор инкрементирования p++ просто прибавляет 12 к p. С другой стороны, указатель лучше только тогда, когда вы можете его инкрементировать, то есть когда вы обращаетесь к последовательным элементам. Если вам нужен по настоящему случайный доступ в массив, то запись с квадратными скобками намного проще читается и разницы в скорости выполнения нет. Аналогично, если внутренняя часть цикла в принципе неэффективна - скажем, например, мы сделали следующее: Код: plaintext 1. 2. 3. 4.
и f() требует для выполнения две секунды - тогда относительный выигрыш от использования указателей будет существенно перевешен накладными расходами на вызов функции, и, естественно, вы можете утверждать, что квадратные скобки легче читаются. Конечно, если f() является встроенной функцией С++, то накладные расходы на вызов функции могут быть минимальными и есть смысл использовать указатель, поэтому вы можете возразить, что вариант с указателем лучше, ибо накладные расходы тяжело определить. Наконец, верно, что оптимизатор часто может преобразовать вариант цикла с индексами массива в вариант с указателями, но я думаю, что это плохой стиль - писать неэффективный код в надежде на то, что оптимизатор очистит его после вас. Указатели так же хорошо читаемы, как и индексы массивов, для того, кто знает язык программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:11 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Офтопим мы последнее время сурово. Ну и я добавлю. Как я вижу через 20-ть минут планируется первый запуск SpaceX Crew Dragon с людьми на борту. Ждём прямой трансляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:12 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, подозревается мне, что в вопросах нахождения именно суммы (на непрерывном отрезке памяти) векторизация интересней параллелизации будет. если уж идти до низа, то ромб интереснее делить на зоны подходящей векторизации, а не параллелить. Это функция размера ромба, и формирует самостоятельную задачу. Параллелизацию, если строить, то уже вторым этажом над этим. Вот такое мне сейчас подумалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Да ромб смешал все карты. Если-бы можно было свести это к пересечению квадратной матрицы и единичной-ромбовидной одновременно со сложением через SIMD тогда нам было бы все равно какая там форма внутри. Бубновая или Трефовая. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 19:33 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Транспонируем матрицу на 45 градусов и ромб превращается в привычный квадрат. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 20:10 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, у меня сильное дежа-вю в плане поворота матрицы на 45 градусов. Был тут один.. любитель вращать матрицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 20:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton petrav, в английском флоте в личном деле офицеров указывают "индекс удачливости". Вобщем... petrav, ты - фартовый. Тебя можно кидать на нерешаемые проблемы и ты рандомно постучав по клавиатуре - все порешаешь. На моей первой работе я ведущему программисту показал сидиром, который я себе купил. Начало 2000-ных. И вот такой разговор: - Дерьмовый сидиром ты купил. Плохо будет работать. Деньги по-дурацки потратил. - Но почему? Нормально же выглядит. Я его подключал. - Не знаю. Но наверное же моё мнение основано на личном опыте? PS: Работал сидиром хреново. Но это было уже в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 21:11 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
ну я когда работал сис.админом в молодости тоже компьютеры лечил взглядом бывает, жалуется тётка, что комп тупит подошёл к нему, зыркнул... и уже не тупит ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 21:32 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
полудух, это называется "Эффект присутствия". Звонит юзверь, жалуется, мол, что-то глючит ворд/эксель/пауэрпоинт. Приходишь, просишь воспроизвести проблему - не выходит, всё работает. :) Я вообще толковых пользователей (power users) встречал раз-два и обчёлся. Помню как-то более 20 лет назад работал на фарм.предприятии. Звонят из лаборатории, говорят, дискету 5,25 из дисковода вытащить не могут. Прихожу, смотрю на системник - никакого дисковода нет, одни заглушки на морде. Спрашиваю - куда же вы дискету вставляли? Отвечают - а вот в щёлочку (между двумя заглушками). Вскрываю корпус а там дискета лежит себе на полочке для устройств. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 22:27 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
полудух, а ещё забавный показательный случай, что не только в России пользователи дундуки. Приехала как-то делегация из пендостанской HQ, прямиком из Коста-Мезы, вопросы порешали, специалисты из делегации разбрелись по разным кабинетам своих российских коллег и вот один такой российский коллега звонит, просит подойти и помочь. Прихожу... Просят засунуть несколько документов на одну дискету 3.5'', а размер документов сильно больше 1.4 Мб. Жму архиватором, запихиваю на дискету, а меня пендосы спрашивают как им потом эти документы выудить. Ити иху мать! Пришлось объяснить на пальцах и записать на бумажке, как использовать консольную утилиту arj.exe. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 22:34 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Мы их на 1.7 мб форматировали. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 22:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav rdb_dev mayton, мои можно не смотреть, они явно хуже, чем у petrav и я пока даже не знаю, что в его алгоритме ещё можно оптимизировать. Кажется, он случайно создал самое эффективное решение. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 09:01 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Мы их на 1.7 мб форматировали. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 09:02 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev Да, качество носителей некоторых Это ничего, что неформатированная ёмкость 3,5-дюймовой дискеты - два мегабайта? P.S. Дистрибутив OS/2, если что, поставлялся на дискетах, отформатированных на 1,7МБ. И даже на компакт-диске были образы этих дискет, что позволяло установить OS/2 и на компьютеры без CD. Достигалось это нестандартным сектором в 1КБ, который уменьшает межсекторные потери и позволяет разместить на дорожке близкий к максимуму объём данных. P.P.S. В OS/2 дискеты с нестандартным форматированием читал штатный драйвер. Для записи образов использовалась специальная утилита. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 12:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, мне, таки, удалось написать алгоритм на указателях по массиву, размерность которого известна только в рантайме, сравнимый по производительности с алгоритмом petrav по массиву, размерность которого известна на стадии компиляции. Конечно, не обошлось без шаманства с арифметикой указателей. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 16:05 |
|
|
start [/forum/topic.php?fid=57&msg=39963091&tid=2017415]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 411ms |
0 / 0 |