Да, шланг грамотно раскочегарил, развернул цикл и складывал в четыре независимых ymm регистра, на небольших массивах, в 2 раза ускоряется. (хотя avx2 порта 4, но load unit только 2)
Интересно, можете куда нибуть выложить исходник? (pastebin/gist) мне пришлось немного помучаться, чтобы вызов был внутри цикла, так как иначе результат "оптимизировался" чисто математически (накапливаемая сумма или чтото в этом духе)
Прямо магия какаято, интересно как она устроена. Если в linq sum однопоточка, то она в принципе не может быть, зняАчимо быстрее simd. Плюсовый компилятор выплюнул примерно такой же код.
Кэш L3 сопоставимый - 32МБ, плюсом здесь линейный паттерн доступа, то есть гарантированно должен срабатывать префетч. Но я попробовал уменьшить размер массива в десять раз, и добавить повторов, результат все те-же +5%.
По поводу "памяти", имелось как раз в виду производительность кэша, так как инструкция одно тактовая, то он мог просто больше 32 байт, за этот такт "не прокачивать", даже если делать сложение на разных параллельно работающих портах.
unsigned long sum_array(unsigned long* array, unsigned long size)
{
unsigned long sum = 0;
for (unsigned long i = 0; i < size; ++i)
sum += array[i];
return sum;
}
Да, я в курсе кто учится в ВУЗах. ) Поэтому и советую, то что считаю наиболее доступным, при этом содержащее достаточно хорошего материала, и правильного, системного подхода к предмету. Кнута я к примеру и сам не осилил. Кормен очень хорош, даже если сравнивать с википедией.
В книжках это обычно более системно все описано, и в определенном смысле проще, вводится аппарат построения различных алгоритмов и доказательства корректности . По моему вкусу, как по простоте изложению, так и обхвату тематики, Кормен просто отличный. Сам его читал в начале нулевых, когда только учился.
Только это не волновой алгоритм(который является частным случаем алгоритма Дейкстры для регулярной сетки), а обычный поиск в глубину/ширину. Да и как по мне реализованный довольно вырвиглазно. (но это субъективно)
В процессоре самое сложное это не однородный массив транзисторов, а их расположение и связи между ними(точнее логическими элементами/ячейками памяти). И очень высокая степень надежности получения единичного элемента в рамках техпроцесса, потому что их на ядро нужно несколько сотен миллионов.
Проблема в ифами и кодами возврата, в том, что их никто не проверяет. А если и проверять тотально, то с увеличением вложенности это выливается в лапшу из ифов проверяющих коды возврата на каждом уровне.
Конечно, есть разные подходы, на тех же плюсах, гугл пишет с отключенными исключениями Но это тоже палка о двух концах, если вам нужна надежная система на плюсах, в которой точно не текут ресурсы или другие неожиданные проблемы, то проще писать без исключений. Если же просто надо красиво завершится с дампом и стэк трейсом, или понятным сообщением, то проще писать с исключениями.
Если выживут государства, а это наиболее вероятный сценарий, если не будет тотального уничтожения. То первым делом они разберутся между собой, пытаясь уничтожить и подчинить, устроившего заварушку(или наоборот будут действовать те кто устроил). Следующим шагом они начнут наводить порядок внутри. У гопников, очень мало шансов против организованной армии. Поэтому идея пересидеть два-три года ни такая безумная как кажется. Да, конечно главный вопрос, чем дышать, что есть и что пить.
Да и сомневаюсь, что гопники будут вызывать сочувствие, у оставшегося населения, достаточно будет раздать калаши, и организовать.
Формально если подходить с позиций мат. логики. математические построения и доказательства это некоторая форма синтаксических манипуляций, можно даже это назвать "игрой". С другой стороны, то какие именно результаты и построения получать, теории строить, определяется носитилем этого языка, то есть математиком/сообществом, и носят чаще всего глубоко интуитивный характер, часто связанные с их "представлением о прекрасном".
При этом драйвером развития математики, часто были практические потребности для других фундаментальных наук и инжиниринга.
Сами же математические теории имеющие абстрактный характер, позволяют их применять в широком спектре, как научных так и инженерных вопросов. Фактически нам достаточно принять верность или как хорошую аппроксимацию, базовых аксиом, чтобы применять накопленные математические результаты.
Разве я говорил где-то подобное? "Математика - язык науки", и как минимум исходя из этого представляет огромную ценность. Оставим в стороне вопрос, что многим просто нравится решать головоломки, которые находят практическое применение через 10-50 лет.
Наличие подтверждающих примеров очевидно, не может служить, решающим словом в справедливости теории. К примеру, вы можете выдвинуть теорию СТО(специальной теории относительности), и набрать сколько угодно примеров в классическом пределе скоростей, и никакое количество таких примеров(описываемых как старой теорией так и новой) не будет служить доказательством чего либо.
Конечно, ученые могут поддерживаться статистического подхода и искать корреляции, в исследуемых явлениях, это никак ничему не противоречит.
А то, что в гуманитарных науках "нет прогресса", так это следствие, очевидного отсутствия механизма сходимости различных точек зрения, и не способности однозначно любую(точку зрения) из них подтвердить или опровергнуть. "Гуманитарии" могут в принципе спорить до бесконечности, а господство точки зрения определяется лишь ее популярностью.
А так есть вполне логичная точка зрения, что настоящая наука строит модели исследуемых вопросов(тут мы не говорим про математику, которая по сути язык создания моделей). Они могут быть дедуктивные, могут быть статистические, подходов много. Эти модели должны описывать явление то есть согласованны с реальностью. Но встает вопрос, насколько любая новая модель лучше предыдущих, и тут есть два варианта - она описывает все тоже самое выраженное другим языком, и тогда ее ценность не очевидна, и второй - она дает, что-то новое. То есть какие-то новые, фальсифицируемые предсказания.
Да, шланг грамотно раскочегарил, развернул цикл и складывал в четыре независимых ymm регистра, на небольших массивах, в 2 раза ускоряется. (хотя avx2 порта 4, но load unit только 2)
Интересно, можете куда нибуть выложить исходник? (pastebin/gist) мне пришлось немного помучаться, чтобы вызов был внутри цикла, так как иначе результат "оптимизировался" чисто математически (накапливаемая сумма или чтото в этом духе)
Прямо магия какаято, интересно как она устроена. Если в linq sum однопоточка, то она в принципе не может быть, зняАчимо быстрее simd. Плюсовый компилятор выплюнул примерно такой же код.
Кэш L3 сопоставимый - 32МБ, плюсом здесь линейный паттерн доступа, то есть гарантированно должен срабатывать префетч. Но я попробовал уменьшить размер массива в десять раз, и добавить повторов, результат все те-же +5%.
По поводу "памяти", имелось как раз в виду производительность кэша, так как инструкция одно тактовая, то он мог просто больше 32 байт, за этот такт "не прокачивать", даже если делать сложение на разных параллельно работающих портах.
Скорее всего, упирается в "память" (кэши) поэтому больше разворачивать, возможно не имеет смысла.
Ради интереса сделал бенчмарк: https://gist.github.com/xmvlad/726961dfefe59e9fc0c77d4cd3795eed
У меня на Zen3 разница между gcc и clang в пределах погрешности(может быть максимум 5% шланг добрасывает).
Тот же изначальный код на плюсах, если попросить -O3 и -mavx2: https://godbolt.org/z/nEKodK8c1
Сразу генерится, в такой внутренний цикл:
и тут вряд ли что-то можно улучшить.
Да, я в курсе кто учится в ВУЗах. ) Поэтому и советую, то что считаю наиболее доступным, при этом содержащее достаточно хорошего материала, и правильного, системного подхода к предмету. Кнута я к примеру и сам не осилил. Кормен очень хорош, даже если сравнивать с википедией.
В книжках это обычно более системно все описано, и в определенном смысле проще, вводится аппарат построения различных алгоритмов и доказательства корректности . По моему вкусу, как по простоте изложению, так и обхвату тематики, Кормен просто отличный. Сам его читал в начале нулевых, когда только учился.
Только это не волновой алгоритм(который является частным случаем алгоритма Дейкстры для регулярной сетки), а обычный поиск в глубину/ширину. Да и как по мне реализованный довольно вырвиглазно. (но это субъективно)
Подобную это какую? Распознавание машинописного паспорта? Возможно.
Но тут ведь задача немного другая, надо знать куда смотреть, где наиболее вероятно проявление подделки.
Да мне тоже интересно, мнение автора.
Но это все уже в каком-то виде есть https://www.tomshardware.com/news/amazon-web-services-takes-on-intel-with-64-core-arm-graviton2 (те самые Neoverse которые Arm в принципе может продать кому угодно). У Китая скорее будет проблема с фабами и тех процессом, где это все можно производить.
Так кто же им лицензию на x64 даст. А по мощности есть сопоставимые процы, тот же Arm Neoverse который продают всем желающим.
В процессоре самое сложное это не однородный массив транзисторов, а их расположение и связи между ними(точнее логическими элементами/ячейками памяти). И очень высокая степень надежности получения единичного элемента в рамках техпроцесса, потому что их на ядро нужно несколько сотен миллионов.
Проблема в ифами и кодами возврата, в том, что их никто не проверяет. А если и проверять тотально, то с увеличением вложенности это выливается в лапшу из ифов проверяющих коды возврата на каждом уровне.
Конечно, есть разные подходы, на тех же плюсах, гугл пишет с отключенными исключениями Но это тоже палка о двух концах, если вам нужна надежная система на плюсах, в которой точно не текут ресурсы или другие неожиданные проблемы, то проще писать без исключений. Если же просто надо красиво завершится с дампом и стэк трейсом, или понятным сообщением, то проще писать с исключениями.
Если выживут государства, а это наиболее вероятный сценарий, если не будет тотального уничтожения. То первым делом они разберутся между собой, пытаясь уничтожить и подчинить, устроившего заварушку(или наоборот будут действовать те кто устроил). Следующим шагом они начнут наводить порядок внутри. У гопников, очень мало шансов против организованной армии. Поэтому идея пересидеть два-три года ни такая безумная как кажется. Да, конечно главный вопрос, чем дышать, что есть и что пить.
Да и сомневаюсь, что гопники будут вызывать сочувствие, у оставшегося населения, достаточно будет раздать калаши, и организовать.
Формально если подходить с позиций мат. логики. математические построения и доказательства это некоторая форма синтаксических манипуляций, можно даже это назвать "игрой". С другой стороны, то какие именно результаты и построения получать, теории строить, определяется носитилем этого языка, то есть математиком/сообществом, и носят чаще всего глубоко интуитивный характер, часто связанные с их "представлением о прекрасном".
При этом драйвером развития математики, часто были практические потребности для других фундаментальных наук и инжиниринга.
Сами же математические теории имеющие абстрактный характер, позволяют их применять в широком спектре, как научных так и инженерных вопросов. Фактически нам достаточно принять верность или как хорошую аппроксимацию, базовых аксиом, чтобы применять накопленные математические результаты.
Разве я говорил где-то подобное? "Математика - язык науки", и как минимум исходя из этого представляет огромную ценность. Оставим в стороне вопрос, что многим просто нравится решать головоломки, которые находят практическое применение через 10-50 лет.
Если мы говорим о применении математики в других науках, то да, создание моделей наблюдаемых явлений.
Наличие подтверждающих примеров очевидно, не может служить, решающим словом в справедливости теории. К примеру, вы можете выдвинуть теорию СТО(специальной теории относительности), и набрать сколько угодно примеров в классическом пределе скоростей, и никакое количество таких примеров(описываемых как старой теорией так и новой) не будет служить доказательством чего либо.
Конечно, ученые могут поддерживаться статистического подхода и искать корреляции, в исследуемых явлениях, это никак ничему не противоречит.
А то, что в гуманитарных науках "нет прогресса", так это следствие, очевидного отсутствия механизма сходимости различных точек зрения, и не способности однозначно любую(точку зрения) из них подтвердить или опровергнуть. "Гуманитарии" могут в принципе спорить до бесконечности, а господство точки зрения определяется лишь ее популярностью.
А так есть вполне логичная точка зрения, что настоящая наука строит модели исследуемых вопросов(тут мы не говорим про математику, которая по сути язык создания моделей). Они могут быть дедуктивные, могут быть статистические, подходов много. Эти модели должны описывать явление то есть согласованны с реальностью. Но встает вопрос, насколько любая новая модель лучше предыдущих, и тут есть два варианта - она описывает все тоже самое выраженное другим языком, и тогда ее ценность не очевидна, и второй - она дает, что-то новое. То есть какие-то новые, фальсифицируемые предсказания.