|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Всем доброго времени суток! Сразу оговорюсь, что мой первый вопрос довольно прост, но что-то все никак не могу разобраться, как бы прискорбно это не звучало. Итак, задача состоит вот в чем: 1) всего лишь нужно найти сумму элементов заштрихованной области матрицы nxn, где n - число нечетное, которая вводится вручную с клавиатуры (данное условие обязательное) (рисунок прилагаю). (если найдется человек, который захочет и сможет помочь, очень прошу вписать код полностью с начала и до конца, а не его часть) 2) а вот вторая часть интересней (лично для меня, так как любопытно, это придумал такой бред мой мозг, либо это действительно можно сделать) вопрос следующий: нужно эти же элементы матрицы отсортировать по возрастанию. Можно ли это как-то выполнить в одном коде вместе с 1 пунктом, но после того, как сумма была найдена, либо же это обязательно нужно делать отдельным кодом? Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 18:09 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
1) А в чём проблема-то? if (заштриховано) сумма += матрица[i][j]; 2) Можно и одновременно. Третий том Кнута в помощь, сортировка вставками. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 18:52 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, упорно не доходит как делается 1 пункт, в отличии от второго, за что Вам спасибо) А вот с первым совсем беда. Понимаю, что нужно задать условие отбора элементов, но в этом сама проблема, не соображу что нужно в if записать ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 19:33 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething Dimitry Sibiryakov, упорно не доходит как делается 1 пункт, в отличии от второго, за что Вам спасибо) А вот с первым совсем беда. Понимаю, что нужно задать условие отбора элементов, но в этом сама проблема, не соображу что нужно в if записать Ну давайте подумаем. Если размер матрицы нечётный то как найти координату по ширине верхнего (по X) угла? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 19:51 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dima T, да, спасибо, но прочла это еще до того как зарегистрироваться здесь) С первым вопросом пытаюсь разобраться уже второй день, при этом пособие моего же преподавателя не помогло, а на второй вопрос получила грамотную подсказку, хотя впрочем как и на первый) Так что абсолютно не пыталась просто получить решение, не прилагая усилий со своей стороны) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 21:35 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, подумайте как устроить циклы перебора элементов матрицы. Предположительно нарисован ромб . Тогда перебираем все элементы справа от левой-верхней стороны ромба. Левая вершина с координатами в матрице: y0=(n-1)/2, x>=1 Строчкой выше, y1=y0-1, x>=2 Строчкой выше y=y1-1, x>=3 ........ Наконец, верхняя строка матрицы y=1, x>=(n-1)/2 Ограничения справа в каждой строке - сообразите сами. Аналогично в нижней половине ромба. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 21:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething Dima T, да, спасибо, но прочла это еще до того как зарегистрироваться здесь) С первым вопросом пытаюсь разобраться уже второй день, при этом пособие моего же преподавателя не помогло, а на второй вопрос получила грамотную подсказку, хотя впрочем как и на первый) Так что абсолютно не пыталась просто получить решение, не прилагая усилий со своей стороны) Тут в основном высококвалифицированные программисты, мы плохо помним школьную арифметику, а задача не тривиальная. У меня за пять минут не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2020, 21:58 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, код писать точно не буду, но что можно сделать подскажу :) 1) рассматриваем тривильный случай M = {a11=25}, в данном случае матрица состоит из одного элемента n = 1, sum = a11 = 25 2) рассматриваем следующий случай n = 3 Код: plaintext 1. 2. 3.
n=3, sum = a12 + a21 + a22 + a23 + a32 = 2 + 4 +5 + 6 + 8 = 25 3) дальше рассмотрите случай n=5, ну и т.д, просто все нужно выписать на бумаге, и тогда все станет понятно 4) в коде нужно просто пройтись по выделенным элементам матрицы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 00:39 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
exp98, да что там ромб. Давай общий случай решим. Произвольный выпуклый многоугольник вписан в прямоугольник (матрица). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 09:54 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, ну что, Данила-мастер, не выходит Аленький цветок? Ещё подсказки нужны? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:15 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev, честно говоря, аж стыдно признаваться, что после стольких подсказок я все еще сижу над первым пунктом. Даже решение нашла по моему условию, пусть и на C#. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Все никак не доходит, а это ведь только 1/2 заданий. (код смещается, там он не так ужасно выглядит, а времени разбираться можно ли здесь вставлять код нормально, увы, нет) Модератор: Оформляй исходники тегом SRC ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 13:07 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, Работает? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 13:32 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Решение двух пунктов сразу. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 13:51 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, задачка не стоит и выеденного яйца! Смотрите, "серединку" (k) вы уже нашли. k определяет индекс элемент первой и последней строки двумерного массива, а также индекс строки, все элементы которой необходимо включить в сумму. Для первой строки индекс первого элемента для суммирования равен k, а кол-во элементов = 1. Для второй строки индекс первого элемента равен k-1, а кол-во элементов равно 2 и т.д. На лицо декремент на единицу индекса первого суммируемого элемента в строке и инкремент кол-ва суммируемых элементов в строке до тех пор, пока индекс строки < k или пока индекс первого суммируемого элемента > 0, после чего наоборот - инкремент индекса первого элемента и декремент кол-ва суммируемых элементов в строке, до тех пор, пока индекс первого элемента не равен k или пока индекс строки не равен n-1. Для упрощения алгоритма я рекомендую сделать два последовательных цикла. Первый цикл для индексов строк от 0 до k-1 и индексов первых суммируемых элементов строк от k до 1, а второй цикл для индексов строк от k до n-1 и индексов первых суммируемых элементов от 0 до k. Так алгоритм будет даже быстрее, так как нет никакого дополнительного условия внутри цикла. Соответственно: 1. Инициализация индекса первого суммируемого элемента (k) и кол-ва элементов (1); 2. Цикл по строкам от 0 до k-1 с декрементом индекса первого суммируемого элемента и инкрементом кол-ва элементов + вложенный цикл по соответствующим элементам (проще через while); 3. Реинициализация индекса первого суммируемого элемента (0) и кол-ва элементов (n); 4. Цикл по строкам от k до n-1 с инкрементом индекса первого суммируемого элемента и декрементом кол-ва элементов + вложенный цикл по соответствующим элементам; ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:04 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav, и чему твой исходный код может научить? Здесь не принято давать готовые решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:05 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
У автора-ж надо посчитать сумму элементов расположенных по "diamond". Как в бубновой масти. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:12 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
И у меня есть некое недоверие к тестовым данным которые расположены слишком уж ... закономерно. Можем получить некую авто-компенсацию суммм. Давайте возьмем случайные числа. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:14 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton У автора-ж надо посчитать сумму элементов расположенных по "diamond". Как в бубновой масти. А разве я не это посчитал? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:14 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton И у меня есть некое недоверие к тестовым данным которые расположены слишком уж ... закономерно. Можем получить некую авто-компенсацию суммм. Давайте возьмем случайные числа. Возьмите. Нужно написать unit test-ы. Это мы вам поручим. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav, а сколько у тебя получилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:19 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton petrav, а сколько у тебя получилось? 186. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton petrav, а сколько у тебя получилось? 186. Я прошу прощения. Да. Ты был прав. Я не заметил коррекцию цикла здесь. Код: plaintext 1.
Так что твой код - корректен. Кстати я хотел усугубить этот топик но несколько в другом направлении. Ты читал Степанова (он по STL книжки писал) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:28 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Кстати я хотел усугубить этот топик но несколько в другом направлении. Ты читал Степанова (он по STL книжки писал) ? Нет, Степанова не читал. Я что-то некорректно написал с точки зрения STL? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:35 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Нет у тебя все корркетно. Я просто по инерции продолжаю топик https://www.sql.ru/forum/1280222/tyapnichnaya-hvostovaya-rekursiya Мысль такая. У нас есть козырная бубновая функция которая чего-то считает в сях императивно. Она - эффективна. В этом никто не сомневается исходя из нашего понимания компиллятора. Далее. Я хочу ее транформировать в хвостовую функцию . И посмотреть как ее понял компиллятор (хотя-бы 2 варианта GCC, Clang). И во что он свернул рекурсию. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:46 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Можно написать свой собственный итератор, который позволил бы сортировать элементы матрицы прямо на месте, т.е. прямо в матрице. И находить сумму. Но я боюсь, что такой код не поняли бы ни автор топика, ни её преподаватель. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:47 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton ... Ты читал Степанова (он по STL книжки писал) ? он в 1995 году книжку по stl выпустил, единственную... у него есть других полезных книжек почитать. 2petrav а где pop_back? значения отсортированные в ромб Степанов возвращать будет? Ты вообще почему такой малограмотный? складывать и сортировать можно за один проход. Это называется сортировка подсчётом. Потом раскладываешь назад сортированно-подсчитанное. Тут программа на две строки, а не на три. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:48 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
booby складывать и сортировать можно за один проход. Это называется сортировка подсчётом. Потом раскладываешь назад сортированно-подсчитанное. Тут программа на две строки, а не на три. Стоп-стоп. При чем здесь это? Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных. Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:52 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
booby Ты вообще почему такой малограмотный? Не знаю. А не знаю, видимо, потому что малограмотный. booby складывать и сортировать можно за один проход. Это называется сортировка подсчётом. Потом раскладываешь назад сортированно-подсчитанное. Тут программа на две строки, а не на три. Давай код. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 14:57 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
booby он в 1995 году книжку по stl выпустил, единственную... Обобщенное программирование - это вобщем - тоже про STL. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 15:07 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Стоп-стоп. При чем здесь это? ... задание целиком описано в первом посте. авторОбобщенное программирование - это вобщем - тоже про STL с точно таким названием у него книжки нет, а то, что ты подразумеваешь, является, в некотором смысле, глобусом, по отношению к сове stl. 2petrav здесь ты программист на c/c++, а не я. хочешь кода на vba или pl/sql? хотя требовать кода вообще для такой задачи - убожество. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 15:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton booby складывать и сортировать можно за один проход. Это называется сортировка подсчётом. Потом раскладываешь назад сортированно-подсчитанное. Тут программа на две строки, а не на три. Стоп-стоп. При чем здесь это? Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных. Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна. Может быть booby просто сумасшедший? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 15:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Стоп-стоп. При чем здесь это? Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных. Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна. Может быть booby просто сумасшедший? Он - истинный мастер кун-фу. Но его стиль искусств для тебя будет слишком странным! Слишком! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 15:37 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Стоп-стоп. При чем здесь это? Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных. Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна. Может быть booby просто сумасшедший? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:03 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev, давайте из этого сделаем pure-function. Чтоб точкой входа у нас был не какой-то уродский main. А чтоб была видимость какого-то красивого входа наподобие. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:14 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, а смысл? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Я продолжаю форк своей темы. Хвостовой рекурсии. Автор я думаю уже получил своё и пошел курить. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:18 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, мне лень вкрячивать проверку на нечётность (!(dim && 1)) и выброс исключения ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:21 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Пускай нечетность будет по заданию всегда. Не будем обращать внимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:28 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav пропущено... Может быть booby просто сумасшедший? Можно и без сортировки, но в ТЗ написано отсортировать. Что по поводу кода, то, имхо, ваш вариант крайне плохо-читабельный. Я очень не люблю такие вот варианты: *ptr++. Мой же код (первый) отображает логику происходящего и тоже в один проход, и тоже без промежуточных результатов. Но интересно было бы увидеть бенчмарки всех трёх вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:37 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav rdb_dev пропущено... Ну почему же он сумасшедший? Можно и в один проход, и без сортировки, и промежуточных результатов, и без STL... Можно и без сортировки, но в ТЗ написано отсортировать. Что по поводу кода, то, имхо, ваш вариант крайне плохо-читабельный. Я очень не люблю такие вот варианты: *ptr++. Мой же код (первый) отображает логику происходящего и тоже в один проход, и тоже без промежуточных результатов. Но интересно было бы увидеть бенчмарки всех трёх вариантов. Сортировки - это очень злая тема. И она изъезжена вдоль и поперек и самые лучшие алгоритмы хороши только в некоторых узких случаях. Чаще всего мы должны обладать априорной информацией о том что сортируем и какого оно объема чтобы выбрать подходящую стратегию. Поэтому давайте отложим сортировки тем более что они - коробочные в STL и ничего новаторского мы тут не превнесем. По поводу реализации rdb_dev - она - хорошая. Мне нравится, но для трансформаци по Степанову - не подходит. Поэтому я возьму некий более краткий вариант. Без конечного автомата с состояниями внутри. Грубо говоря мне нужна функция без состояний. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 16:55 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton По поводу реализации rdb_dev - она - хорошая. Мне нравится... Вы давеча резко критиковали код в стиле *++ptr. И учили новичков так не делать. Вариант rdb_dev интересен, но, имхо, он квинтэссенция запутанности кода, когда с первого взгляда совершенно не очевидно, что этот код делает. Мне думается мой код проще и максимально "математичен". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:02 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Да я и щас критикую все эти инкременты внутри операций. Но его код напоминает мне мой, 20 летней давности. Когда я в SVGA режиме рисовал цветные полигоны. Там тоже была идея таким вот скользящим указателем заполнить все что нужно. Я брал сложный полигон. Даже вогнутый Резал его на трапеции и дальше - дело техники. Основной критерий - скорость и он достигался. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:13 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Автор я думаю уже получил своё и пошел курить. Только недавно заметила что получила ответ на свой вопрос. Восхищаюсь всеми вами, насколько для вас это уже все просто. Мне же к этому ещё шагать и шагать. Но это такое дело, прорвемся. Бесконечно благодарна всем вам, при этом не только за полностью решенную задачу, но и за понимание, к какому уровню стремиться! Вся моя благодарность - вам! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:15 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething mayton Автор я думаю уже получил своё и пошел курить. Только недавно заметила что получила ответ на свой вопрос. Восхищаюсь всеми вами, насколько для вас это уже все просто. Мне же к этому ещё шагать и шагать. Но это такое дело, прорвемся. Бесконечно благодарна всем вам, при этом не только за полностью решенную задачу, но и за понимание, к какому уровню стремиться! Вся моя благодарность - вам! Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:24 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого. Вам выражаю особую благодарность) (не могла же я обойти людей, которые пытались поставить меня на правильный путь в решении задачи, потратив на это такой дорогой ресурс как время. Жаль только мой мозг решил выйти погулять, либо же я пытаюсь найти себе оправдание того, что моих знаний и навыков не хватило для решения такого задания) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:34 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton По поводу реализации rdb_dev - она - хорошая. Мне нравится, но для трансформаци по Степанову - не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:40 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:42 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Да я и щас критикую все эти инкременты внутри операций. Но его код напоминает мне мой, 20 летней давности. Когда я в SVGA режиме рисовал цветные полигоны. Там тоже была идея таким вот скользящим указателем заполнить все что нужно. Я брал сложный полигон. Даже вогнутый Резал его на трапеции и дальше - дело техники. Основной критерий - скорость и он достигался. Я не вижу, что бы тут у rdb_dev достигалась скорость. Я написал бенчмарк. В Релизе мой код быстрее в 1.3 раза. ИМХО, мой код проще и для человека, и для компилятора. Последнему проще оптимизировать мой код. Вы можете попробовать мой бенчмарк. И сообщить результаты. Код: plaintext 1. 2. 3.
Код: 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. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:44 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Ты серьезно? Кто же тестит на такой мелкой матрице. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:47 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav, а теперь в calc_times поменяй вызовы diamond1 с diamond2 и проверь ещё разок. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:53 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Ты серьезно? Кто же тестит на такой мелкой матрице. Виноват, не додумал. Увеличил матрицу до 129*129, заполнил std::rand(). Теперь мой код обгоняет в три раза. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:57 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav, а теперь в calc_times поменяй вызовы diamond1 с diamond2 и проверь ещё разок. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 17:59 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav, вполне возможно и именно в 3 раза при использовании 32 разрядного приложения и в 7 раз при использовании 64 разрядного. Проблема производительности в доступе по декрементному указателю. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:03 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething petrav Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого. Вам выражаю особую благодарность) Спасибо. :) Я пошутил, обращайтесь. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:07 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Можно переделать декремент. Он немножко портит картину доступа к памяти. Пускай суммирование идет слева направо и все. До упора. Справа налево - не надо. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:21 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev mayton По поводу реализации rdb_dev - она - хорошая. Мне нравится, но для трансформаци по Степанову - не подходит. Она хорошая только в условиях однопоточности. На данный момент средствами объективного контроля я наблюдаю, что твоя реализация плохая во всех смыслах. Без обид. Она не читаемая, сложная, запутанная и плохо оптимизируемая. Попробуй обгони мой код. Думаю это возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:23 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Да и возьмите матрицу хотя-бы в миллион. И еще petrav. Чтобы тест был честным ты должен запускать в шахматном порядке обе функции несколько раз и брать среднее время в финале. Это важно потому-то первая-функция -первопроходец может наблюдать картину кешей L1/L2/L3 отличную от второго запуска. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
И выровняйте ширину матрицы по кеш-линии. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:32 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Да и возьмите матрицу хотя-бы в миллион. И еще petrav. Чтобы тест был честным ты должен запускать в шахматном порядке обе функции несколько раз и брать среднее время в финале. Это важно потому-то первая-функция -первопроходец может наблюдать картину кешей L1/L2/L3 отличную от второго запуска. Взял 1024+1*1024+1. Миллион же? Ситуация ещё более усугубилась. Теперь не три, а 3.5 раза отставание. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:45 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Показывай сорцы. И вообще. Ты пользуешся GitHut или BitBucket? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:52 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Показывай сорцы. И вообще. Ты пользуешся GitHut или BitBucket? Нет. Показываю. Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:55 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton И выровняйте ширину матрицы по кеш-линии. В смысле? Выравнивание по умолчанию. 32-ва бита. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:59 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton И выровняйте ширину матрицы по кеш-линии. В смысле? Выравнивание по умолчанию. 32-ва бита. Ну х*евое выравнивание. Кеш-линия - 64 байта. Вот посчитай. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 19:02 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Ну и надо чтоб господин rdb_dev пофиксил свой реверсный итератор. А я - сорян ребята. Я очень хочу тут с вами покомпилировать. Но у меня щас prod-дефект. Так что я удаляюсь пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 19:04 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton petrav пропущено... В смысле? Выравнивание по умолчанию. 32-ва бита. Ну х*евое выравнивание. Кеш-линия - 64 байта. Вот посчитай. Ну я переключился на Релиз 64. Ситуация улучшилась. Теперь отставание в 2.2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 19:10 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Итак, и снова у меня появились вопросы. Перейдя от теоретической части к практической, и скомпилировав данный код от уважаемого petrav petrav Решение двух пунктов сразу. получила следующее: .... /usr/bin/x86_64-linux-gnu-ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21 /usr/bin/x86_64-linux-gnu-ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2 /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status Пошарившись в интернетах, нашла такое: авторЯ не уверен в ваших неверных ошибках перемещения, но очевидная вещь отсутствует, так как у вас нет функции main. Вам необходимо определить точку входа в ваше приложение под названием main, определенное в глобальной области видимости, например: int main() { // TODO: implementation } Хотела уточнить, это дело в компиляторе или мне действительно нужно добавить ф-цию main? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 20:26 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething Хотела уточнить, это дело в компиляторе или мне действительно нужно добавить ф-цию main? Ну вообще да, main() желательна. Напишите хотя бы так: Код: plaintext 1. 2.
А оттуда уже всё вызывайте. Но лучше, конечно, прочитать Кернигана и Ритчи. Всего-то 300 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 20:32 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomething, переходите на Питон! будет проще! :-) это же тройной вынос мозга получается -> матрицы + (что-то с ними сделать) + С/С++! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 23:45 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab, Вы знаете, я бы может и перешла, кто знает, что больше понравится, но вот эти странные люди как научные руководители говорят писать курсовую на плюсах ну и вот что ты будешь с этим делать?) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 00:52 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomethingвот что ты будешь с этим делать? Прямо заявить им в наглые глаза, что "я вообще программировать не умею, не хочу и не буду, отвалите". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 00:58 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, так а кто сказал что не хочу и не буду? Не припоминаю что-то чтоб говорила такое) То, что не совсем хорошо получается, это да, не спорю, но это ведь не значит, что на этом конец) Добра Вам и позитива! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 01:04 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
по мотивам, а можно ли транспозицию матрицы сделать через указатели? т.е. мы не трогаем матрицу, а переставляем указатели на элементы матрицы нужным нам образом? примерно так Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 02:31 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Транспозиция это транспонирование? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 10:57 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 11:11 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
JustSomethingа кто сказал что не хочу и не буду? Весь топик об этом. Собственных попыток - ноль. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 12:37 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab JustSomething, переходите на Питон! будет проще! :-) Модератор: Под спойлер ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 12:43 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Интересно что Python-разработчик как таковой - редок в вакансиях. Его часто подмешивают к таким хеш-тегам как data-engineer, data-scientist, devops. +Еще часто его можно видеть как необходимый в машинном обучении. Тоесть он необходим как bash, но о нем не говорят как о независимом языке. Скорее как о слое который управляет более низким слоем написанном уже на этих ваших CUDA-х, OpenCV-ах. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 12:47 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
я не призываю никого становиться Питон-разработчиком :) просто для начинающего алгоримы было бы проще начать изучать на Питоне (а не на С или С++) в данном случае я за divide and conquer :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 13:02 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab, проще всего начинать с Intel x86 ассемблера под flat модель, если преподам показать правильный подход к его изучению. После чего учащийся сможет легко и непринуждённо самостоятельно осваивать любые языки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 13:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_devпроще всего начинать с Intel x86 ассемблера под flat модель Замороченный всё же у интеля ассемблер. DEC PDP-11 попроще будет и на Си хорошо проецируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 13:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, можно даже VAX или MIPS, что интереснее, полезнее и денежнее. Главное - показать чем и как, в конечном итоге, оперирует АЛУ. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 13:35 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab я не призываю никого становиться Питон-разработчиком :) просто для начинающего алгоримы было бы проще начать изучать на Питоне (а не на С или С++) в данном случае я за divide and conquer :) Дидактические свойства Питона - под большим сомнением. Мне кажется что единственный полезный язык для обучения новичков - это Pascal. В нем соблюден баланс информативной полезности сообщений об ошибках в случае если таковые есть. Грубо говоря новичок сравнительно легко читает их и фиксит. В этом плане Никлаус Вирт - молодец хотя и зануда. Сообщения-же компилляции которые выдает С++ - поражают воображение объемом трафика особнно когда не сматчились паттерны процессора шаблонов, или ошибки линкера (смотрим топик где бедный Петро пытается победить Visual Studio и при том он - не новичек). Тоесть такой подход в обучении обречен сразу на провал и на демотивацию если нет учителя который в состоянии прочитать и прокомментировать эту техническую лабуду. И не дай бох это рантайм где мы видим ошибку как дамп памяти + содержимое регистров процессора (ага) посчитайте какой объем знаний уже тут нужен чтоб разобраться. Это к С++ надо еще и учебник Юрова читать про Ассемблер. Тоесть в учебном смысла С++ - непригоден если вы нуб и решили его учить самостоятельно. Демотивация гарантирована особенно на фоне C# к примеру. Щас еще крупно-корпорации открывают курсы для детей где обучают их Scratci но я этот язык пока не видел и ничего не могу сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:00 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, сделал как ты хотел! Не желаешь потестить производительность на больших массивах? :) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:13 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev, дружище я протещу только вечером. Доберусь до своей линукс машинки где у меня и железо хорошее. И clang установлен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
я тоже свою версию написала (С) :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:19 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev mayton, сделал как ты хотел! Собирать надо с опцией -fopenmp mayton , делает неверное предположение, что тестировать нужно обязательно с большими матрицами. В то время как есть куча прикладной математики где матрицы маленькие. На маленьких матрицах ваш OpenMP тормознёт алгоритм разов в 10-ть. Ну а вы вообще... писать страшные алгоритмы один за одним вам не лень, подставить их в бенчмарк вам лень. Типа я должен сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:21 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
maytonМне кажется что единственный полезный язык для обучения новичков - это Pascal. Лично я начинал на ДВК-1 с Бейсика и машинных кодов, так что считаю эту связку оптимальной. Первый даёт языковые навыки для всех директивных языков и при этом достаточно беден чтобы руководство (список операторов) уместилось на один листок, второй - понимание как работает компьютер. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
я сейчас тоже попробую бенчмарки делать, но не знаю получится или нет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:23 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, забыл добавить, что нужно ещё заинклюдить <omp.h> ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:25 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav На маленьких матрицах ваш OpenMP тормознёт алгоритм разов в 10-ть. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Ну а вы вообще... писать страшные алгоритмы один за одним вам не лень, подставить их в бенчмарк вам лень. Типа я должен сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:36 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav На маленьких матрицах ваш OpenMP тормознёт алгоритм разов в 10-ть. Я уже проверял много лет назад с перемножением маленьких матриц с использованием OpenMP. Результаты были плачевные, ожидаемо, один только барьер памяти тебе снесёт все надежды на производительность. А у тебя нет возможности проверить? Как написать так возможность есть, как проверить так нет возможности. Зачем тогда писать. Короче ждём бенчмарк на маленьких матрицах. Например, 9. Размерность мира в котором мы двигаемся — 3, а не миллион. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:38 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonМне кажется что единственный полезный язык для обучения новичков - это Pascal. Лично я начинал на ДВК-1 с Бейсика и машинных кодов, так что считаю эту связку оптимальной. Первый даёт языковые навыки для всех директивных языков и при этом достаточно беден чтобы руководство (список операторов) уместилось на один листок, второй - понимание как работает компьютер. Мой первый язык это был Бейсик для Электроника БК 10. И первый софт я не написал а содрал с книжки 1 в 1. Вот такое было обучение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 16:52 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Dimitry Sibiryakov пропущено... Лично я начинал на ДВК-1 с Бейсика и машинных кодов, так что считаю эту связку оптимальной. Первый даёт языковые навыки для всех директивных языков и при этом достаточно беден чтобы руководство (список операторов) уместилось на один листок, второй - понимание как работает компьютер. Мой первый язык это был Бейсик для Электроника БК 10. И первый софт я не написал а содрал с книжки 1 в 1. Вот такое было обучение. Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:01 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav rdb_dev mayton, сделал как ты хотел! Собирать надо с опцией -fopenmp mayton , делает неверное предположение, что тестировать нужно обязательно с большими матрицами. В то время как есть куча прикладной математики где матрицы маленькие. На маленьких матрицах ваш OpenMP тормознёт алгоритм разов в 10-ть. Давай порассуждаем. У этой задачи есть 2 аспекта. Первый - это оценка асимптоматики. Она - квадратичная по size - матрицы. Что-бы мы не придумывали. Какие - бы хитровыеб.... умные способы мы не избирали - все одно сведем к перебору всех чисел "бубнового туза". Второй аспект - чисто машиный. Это - игры с указателями. Оптимальная арифметика инкрементов где мы должны вообще уйти от операций умножения и свести их к алгоритмам наподобие Брезенхема. - Игры с кешами L1/L2/L3. И padding с целю попадания в кеш-линию. Есть творческая задачка где умножаются 2 большие матрицы. Кстати вторая - транспонируется предварительно (угадай зачем). И в зависимости от кластеризации данных (близко они лежат или далеко в памяти) мы можем получать в разы отличающееся характеристики. А поскольку эта задача идеально ложиться в map-reduce - то мы можем этот ромбик как торт резать на трапеции так как будет выгодно Threads процессора или разложить данные в 2 канала памяти. Или предварительно прогрев кеши нужными данными очень быстро дернуть сложение и таким образом "нае6аtь" потенциального заказчика показав ему сферическое сложение в вакууме. Ведь время загрузки матрицы с диска мы не учли. А хардкодные цифры никому не интересны. - Игры с разрядностью. С компиллятором. С железом. Все части машинного аспекта - выгодно тестировать на больших объемах оперативки. На малых - непонятно что мы тестируем. Ведь ты должен динамически генерить новые матрицы для каждого вызова. Ты-же думал об этом? Верно? Ну а вы вообще... писать страшные алгоритмы один за одним вам не лень, подставить их в бенчмарк вам лень. Типа я должен сделать. Какой ты... нетерпеливый. По моему ... я вообще первый энтузиаст кто на скруле поднял тему бенчмарков и даже организовал группу разработчиков в некий соревновательный процесс лет 5 назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:07 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Мой первый язык это был Бейсик для Электроника БК 10. И первый софт я не написал а содрал с книжки 1 в 1. Вот такое было обучение. Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . Я помню его. (Калькулятор). Я решал кубическое уравнение исопльзуя только стек. Из 4х ячеек. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:09 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Кстати вторая - транспонируется предварительно (угадай зачем). Не вижу зачем заранее транспонировать матрицу если нам нужна транспонировання матрица. Ведь можно написать спец. функцию где индексы i и j будут просто поменяны местами. mayton Все части машинного аспекта - выгодно тестировать на больших объемах оперативки. На малых - непонятно что мы тестируем. Мы тестируем то что нам нужно по прикладной задаче. У нас размерность мира 3, а не 1000000. mayton Ведь ты должен динамически генерить новые матрицы для каждого вызова. Ты-же думал об этом? Верно? Ну я доработал бенчмарк до генерации массива для каждого вызова. Теперь в 64-бит отставание в 1.8 раз. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:36 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
кстати, для тестов хорошо подходят единичные матрицы ( а также матрицы со всеми одинаковыми элементами ) думаю что для бенчмарков тоже подойдут ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:40 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton Кстати вторая - транспонируется предварительно (угадай зачем). Не вижу зачем заранее транспонировать матрицу если нам нужна транспонировання матрица. Ведь можно написать спец. функцию где индексы i и j будут просто поменяны местами. Разумеется можно менять местами индекcы. А что почувствует канал памяти когда первая матрица сканируется for(i...) for (j... ) а вторая матрица - наоборот for(j...) for (i...) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:43 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Блин, я же забыл матрицу сделать размера 9. Теперь результаты одинаковые: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:46 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab кстати, для тестов хорошо подходят единичные матрицы ( а также матрицы со всеми одинаковыми элементами ) думаю что для бенчмарков тоже подойдут Нет. Не подойдет. Единичную матрицу можно свести к функции которая продуцирует единички или нули а это сводит на нет все предыдущие достижения по памяти например. Тоесть вы поиграетесь с полиморзимом но его результаты можно будет натянуть только на единичные матрицы но никак не на общие (real-world matrix). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 17:48 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab просто для начинающего алгоримы было бы проще начать изучать на Питоне (а не на С или С++) для начинающего лучше сразу на C++, чтобы понять, как и что работает кроме того, только на нём ты получаешь ровно тот результат, который ожидаешь ты точно знаешь, где какой байт за что отвечает без сюрпризов. это важно. нужен только правильный Учитель. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:19 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Сообщения-же компилляции которые выдает С++ - поражают воображение объемом трафика особнно когда не сматчились паттерны процессора шаблонов есть такая штука: -Wfatal-errors оставит 1 строчку ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:22 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... Мой первый язык это был Бейсик для Электроника БК 10. И первый софт я не написал а содрал с книжки 1 в 1. Вот такое было обучение. Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . и у нас есть победитель! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:27 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Алексей Роза mayton Сообщения-же компилляции которые выдает С++ - поражают воображение объемом трафика особнно когда не сматчились паттерны процессора шаблонов есть такая штука: -Wfatal-errors оставит 1 строчку Смысл же не в том чтобы оставить строчку. А в том чтобы месседж об ошибке нес смысл для newcomer-а который только вчера взялся изучать С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Алексей Роза petrav пропущено... Это не круто. Программируемый калькулятор МК-52 круче, ассемблер и машинный код. Я на нём программировал даже в поезде на втором "этаже". А ещё мама приносила из института перфокарты и я умел их расшифровывать. Но первый софт я написал на советском лунаходе . и у нас есть победитель! Не завидуй так громко. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:34 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Алексей Роза пропущено... есть такая штука: -Wfatal-errors оставит 1 строчку Смысл же не в том чтобы оставить строчку. А в том чтобы месседж об ошибке нес смысл для newcomer-а который только вчера взялся изучать С++. ну так он и получит инфу о последней ошибке, а не простыню на 8 экранов 1 ошибку пофиксит, получит инфу по следующей... ...и заряд оптимизма ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 18:35 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Сорямба. Я только щас добрался до компа. И то не до мощной рабочей станции а до Corei3 ноутбучика. Из хорошего. Помимо OpenMP есть еще другая библиотечка. Называется OpenACC. Поддерживается в GCC, и для Clang. И мы ее попробуем для "туза бубей". Из вопросов. У кого из вас есть учётка в github? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 22:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
По OpenMP, OpenAAC, OpenCL может отдельный топик создать? Тут как-то цели никакой не поставлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2020, 23:40 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton - Игры с разрядностью. С компиллятором. С железом. И еще забыл. SIMD. Это конечно уже далеко от С++ но - тоже машинный аспект. IMHO. Надо попробовать SIMD. Может подойдет а может и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 11:09 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab я тоже свою версию написала (С) :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Давай - еще короче. Два цикла - обычно связанны зависимостью. Если предположить что они - разряды системы счисления с основанием SIZE. Заменим циклы на итерацию по всему диапазону двухзначного числа (SIZE,SIZE) А внутри по сути идет проверка что координата ограничена четырьмя гипер-прямыми под 45 градусов. Этот алгоритм будет не очень быстрый - зато самый короткий. У нас в топике два совревнования. В одном два чела выжимают скорость из С++ с ОпенМП. В другом мы будем сокращать функцию до брейнфака. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 12:55 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. Добрался до i5 с детерминированным TSC и сделал свой платформозависимый бенчмарк для GNUC'а. Результат использования OpenMP для маленьких массивов просто катастрофический даже с "прогревом" OpenMP - хуже в тысячу раз!!! Но на массиве размером в гигабайт твой же распараллеленный алгоритм обгоняет однопоточный примерно в 1.3 раза. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Benchmark Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 13:38 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Давай - еще короче. это будет нечитабельно и неэффективно. я потренируюсь лучше бенчмарки делать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 13:54 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mini.weblab mayton Давай - еще короче. это будет нечитабельно и неэффективно. я потренируюсь лучше бенчмарки делать :) Хорошо. Потренируйся. Но этот синтетический тест - не особо показателен. Его эффективность мало зависит от алгоритма а больше предварительного состояния кешей и количества threads процессора которые в этом участвуют. Вобщем я к тому что резултаты этого теста сложно будет на что-то другое натянуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 14:44 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, главное, разобраться как это делается покa что, функция умножения матриц Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
по матрицам в С: мне бы хотелось работать с элементами матрицы, типа mtx[ i ][ j ], но не я понимаю как это сделать, и можно ли это вообще сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:00 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav Я, правда, не уверен, что <chrono> честно считает время. А прикручивать QPC мне лень. Ваши слова натолкнули меня на мысль, что я вообще по-дибильному время считаю. Я генерирую маленькую матрицу, подсчитываю время одного вызова функции и так в цикле суммирую. Время, понятно, крайне маленькое. И библиотека <chrono> не справляется. По сути я суммирую некие минимально доступные кванты времени. Я переделал на сначала генерацию большого количества маленьких матриц. И теперь замеряю суммирование сразу их всех N раз. Теперь на маленьких матрицах вариант № 1 обгоняет вариант № 2 в 1.2 раза. Это не потому что я пытаюсь письками мерятся, как вы предположили. Я вообще (точнее почти) не думал о производительности когда код писал. Да я и о бенчмарке особо не думал. rdb_dev Добрался до i5 с детерминированным TSC и сделал свой платформозависимый бенчмарк для GNUC'а. Ну WinAPI QPC вроде как тоже возвращает значение некоего аппаратного счётчика. MS пишет про точность 10 -6 сек. rdb_dev Результат использования OpenMP для маленьких массивов просто катастрофический даже с "прогревом" OpenMP - хуже в тысячу раз!!! Прикольно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:01 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Наверное OpenMP на старт-стоп потоков тратит накладные расходы. Их в коде не видно но они-же где-то стоят. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:16 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, про "прогрев" я упомянул, но дело даже не в этом. Просто получается очень маленькая "зернистость" и скорость выполнения каждого зерна выше, чем скорость синхронизации результатов через барьеры и атомарные функции (по крайней мере на том компе, где я тестировал, так как реальная скорость зависит от скорости шины памяти или от скорости FSB на предыдущих поколениях процессоров). Соответственно, реальный выигрыш получается только на очень больших массивах - свыше 1 Гб, но такие массивы пихать целиком в адресное пространство процесса как-то некомильфо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:26 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton Их в коде не видно но они-же где-то стоят. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:29 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Я-ж про это писал. Настоящую мощь этих оптимизаций можно почувствовать только на больших данных. Какой смысл др04ить параллелизм когда 5х5 целых чисел сложатья быстрее чем мы подготовим потоки и диспетчер их успеет форкнуть и менеджер ОС успеет их разложить по ядрам и они в ядрах успеют получить в L1 нужный им срез матрицы. Этож не зелёные мать их потоки как в Java. И не корутины. Это реальные потоки операционки. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:30 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
mayton, это понятно, но я не ожидал таких огромных накладных расходов, увеличивающих время выполнения более чем в тысячу раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:33 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Кстати - в тему Java - самый убойный вопрос на собеседовании - как сделать kill для JavaThread. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:50 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
А в чём, собственно, проблема? Регулярно проверяем состояние прерывания и, при необходимости, выходим, делая нужную очистку. Насколько я понимаю, оно везде так, не только в Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 15:59 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Да вы можете вежливо (gracefully) попросить поток завершиться. И он завершиться. Если такая возможность была заложена. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 16:06 |
|
Работа с матрицей
|
|||
---|---|---|---|
#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 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Надо только заменить три нижних строки на: Код: plaintext 1. 2. 3. 4.
:) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 16:24 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev, дело не только в регистрах. Двигаться с обоих концов навстречу друг другу - это алгоритмика начала 60-х, время молодости Кнута Тогда модели памяти не предусматривали понятия "пропуск кеша". на современных процах и больших размерах блока памяти - это шторм по перезагрузке кеша на каждой следующей операции. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 17:15 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
booby rdb_dev, дело не только в регистрах. Двигаться с обоих концов навстречу друг другу - это алгоритмика начала 60-х, время молодости Кнута Тогда модели памяти не предусматривали понятия "пропуск кеша". на современных процах и больших размерах блока памяти - это шторм по перезагрузке кеша на каждой следующей операции. Кстати да! Мой алгоритм тоже этим грешит. Сейчас перепишу. Точнее ещё один даимонд_н создам. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 17:25 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
boobyДвигаться с обоих концов навстречу друг другу - это алгоритмика начала 60-х Зато ничто не мешает двигаться навстречу друг другу с разных сторон матрицы по вертикали. На больших размерах каждая строка всё равно в линию не влезет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 17:44 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Ромбик - симметричен. И для мультипоточки к примеру гораздо оптимальнее заранее сделать некую декомпозицию или некий план разбиения tasks на суб-таски (по аналогии с ForkJoinPool) и работать сверху вниз везде. Да учитывая свойсвта ромбика можно предположить что у него серединка - мясная и там цикл будет чуть дольше считать если делать не 2 а 4 потока к примеру. Я исхожу из предпложения что каждый поток обрабатывает "трапецию". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 17:54 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
вот еще немного потока сознания, навеянного алгоритмами инвертирования массива. Пусть задача не сумму получить, а инвертировать "очень большой" массив. Пропуск кеша неизбежен, но хочется его как-то компенсировать/минимизировать. Тогда инвертируют блоками (включая векторизацию). То есть, текущие края копируются в малые буферы, взаимно инвертируется содержание буферов, а затем каждый из буферов копируется целиком блоком на свое место. Когда в качестве буферов используются векторные регистры, векторизация получается сама-сама. Эту идею можно приспособить для данной задачи, если уж именно с двух сторон складывать. Можно и к одностороннему проходу пришить, с оговоркой на то, что нечетность задачи требует к себе уважения, и, может быть, заведенияе отдельного указателя на левый или правый нечетный элемент, с последующим самостоятельным сложением, а сам буфер сложения (четный) можно и скользящим окном видеть для зоны сложения, с обработкой правого края начале/конце траектории движения. Мне кажется какого-то такого рода ходы могли бы проверяться... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 18:00 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
booby rdb_dev, дело не только в регистрах. Двигаться с обоих концов навстречу друг другу - это алгоритмика начала 60-х, время молодости Кнута Тогда модели памяти не предусматривали понятия "пропуск кеша". на современных процах и больших размерах блока памяти - это шторм по перезагрузке кеша на каждой следующей операции. Я доработал свой алгоритм учитывая ваши замечания. Ожидаемо на больших матрицах выигрыш в примерно 1.4 раза, на маленьких проигрыш в 1.3. Привожу оба. summ_diamond_1() и summ_diamond_1a(). Кажется второй не очень написан, но лень думать, в индексах запутался. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 18:08 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Кстати да! Мой алгоритм тоже этим грешит. Дело в том, что современные процессоры Intel x86 "оформляют" доступ к данным в памяти чтением сразу 8 выровненных байт (QWORD), причём, это делает RISC'овое ядро, которое используется микрокодом CISC-обвязки. По всей видимости, ядро процессора просто не умеет пользоваться чем-либо, кроме 64 бит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 18:08 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav Кстати да! Мой алгоритм тоже этим грешит. Строки вперёд, а столбцы на встречу. Первый алгоритм summ_diamond_1(). rdb_dev Дело в том, что современные процессоры Intel x86 "оформляют" доступ к данным в памяти чтением сразу 8 выровненных байт (QWORD), причём, это делает RISC'овое ядро, которое используется микрокодом CISC-обвязки. По всей видимости, ядро процессора просто не умеет пользоваться чем-либо, кроме 64 бит. А что будет при суммировании "назад"? Потому что summ_diamond_1a() суммирует нижнюю часть бриллианта по столбцам именно назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 18:19 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav А что будет при суммировании "назад"? Потому что summ_diamond_1a() суммирует нижнюю часть бриллианта по столбцам именно назад. Я предлагаю краш-тест. Выдели 2Гига. И просто прочитай их спереди-назад. А потом сзаду-наперед. Ясно что здесь кеш-линия уже особ роли играть не будет. Но возможно мы не просекли еще какие-то эффекти оптимизаций? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 18:40 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
Я наверное register с вашего позволения уберу. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 19:48 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
А есть здесь что-то специфичное, чего не знает gcc-4.6.3 (из сборки Rtools version 2.15.0.1919 для х32)? или специфичное для х64 (вместо х32) ? rdb_dev Benchmark Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
error: expected initializer before 'noexcept' и далее очень много разных error: attribute(target("default")) is unknown error: attribute(target("default")) is unknown ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2020, 19:51 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
exp98, ещё более старый GNUC найти не получилось? Так-то уже версия 10+ :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 00:54 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav А что будет при суммировании "назад"? Потому что summ_diamond_1a() суммирует нижнюю часть бриллианта по столбцам именно назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 09:08 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
exp98 А то gcc ругается и сразу на шаблон void volatilize(T &r) noexcept ... error: expected initializer before 'noexcept' и далее очень много разных error: attribute(target("default")) is unknown error: attribute(target("default")) is unknown ..... Выкиньте __target__("default")! В чём проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 09:17 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
petrav Я доработал свой алгоритм учитывая ваши замечания. Ожидаемо на больших матрицах выигрыш в примерно 1.4 раза, на маленьких проигрыш в 1.3. Привожу оба. summ_diamond_1() и summ_diamond_1a(). Кажется второй не очень написан, но лень думать, в индексах запутался. На матрице 128x128 результат одного прогона очень нестабилен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
против Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 09:53 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
rdb_dev petrav А что будет при суммировании "назад"? Потому что summ_diamond_1a() суммирует нижнюю часть бриллианта по столбцам именно назад. Да, вы правы. Я написал третью версию своего алгоритма summ_diamond_1b(). Только движение вперёд, никаких скачков вперёд-назад по столбцам. На больших матрицах она самая быстрая из моих алгоритмов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 13:18 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
В общем убрал я всю ерундистику, что выше Сpp2003. Правда и с замерами возиться не стал, использовал обычный Clock() и без потоков. Да тут и отладчика нету. Ну да, фоновыые процессы есть и отнимают ~4% времени неизвестно в какие моменты. Компик 32x, 1 ядро, 1.6Ггц, винд-7, памяти 2 Г, но под задачку оставалось около 260 М. Конкретно для матрицы 11К*11К-1 все три диамонда около 750мс. И матрица int32. Для размерости 12К*12К-1 не дождался ответа. Возможно не хватило памяти. Если интересны замеры для мелких матриц на медленном компе, приложу позднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2020, 23:44 |
|
Работа с матрицей
|
|||
---|---|---|---|
#18+
exp98, мой бенчмарк годится только для более-менее современных процессоров с ядром Nehalem и выше, так как в более ранних ядрах TimeStampCounter тикал по частоте процессора, которая могла меняться по Intel SpeedStep. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 12:48 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017415]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
153ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 498ms |
0 / 0 |