• Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук, Вы не поняли, мы с вами говорим об совсем разных сущностях. Почему вы продолжаете мне рассказывать про строение аппаратного стека? Я не знаю его устройство. Я знаю устройство программного стека и я пишу исключительно про него.
    Речь не идет о макроассемблере.

    Именно, речь идет об оверхеде. Он есть в ассемблере. Точнее: утверждение, что любой ассемблер для любого процессора любой архитектуры даёт биекцию между командами и опкодами, неверно. Это утверждение опровергается контрпримером. В качестве контрпримера можно использовать виртуальную машину.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    выделение и освобождение памяти в стеке это изменение одного регистра, один такт.

    Мы с вами говорим об совсем разных сущностях.

    Да неужели?

    Между ними есть биекция.

    Макроассемблер (от греч. μάκρος — большой, обширный) — макропроцессор, базовым языком которого является язык ассемблера.
    Возможно, конкретно в вашем ассемблере на вашем компьютере с конкретно вашей архитектурой есть биекция. Но не у всех всё так просто. А когда дело доходит до виртуальных машин, всё становится ещё сложнее.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    В чем разница?

    В том, что на машинном коде я могу написать программу без call, без автоматических действий и прочего. Только тот минимум, который необходим. С тем оптимизациями, которые уместны или недоступны верхнему уровню.
    Число операций для доступа к 'a' в обоих случаях одинакого.

    struct stack
    {
        char *data;
        struct stack *next;
    };

    Просто взгялнув на строчку кода нельзя дать однозначный ответ в какой физический регистр будет осуществен доступ.

    Вы спрашиваете про адрес. Затем вы говорите про физический носитель. Так адрес или носитель? Вы уж определитесь.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    Т.е. когда вы будете в куче выделять память, то оверхеда не будет?

    Да, будет, ещё больше в большинстве случаев. Но я сравниваю не с кучей, а с программой без call. Т.е. если бы вы писали на машинном коде, у вас бы программа работала бы быстрее, чем на ассемблере. Соответственно, если мы говорим про одну высокоуровневую операцию, то вполне реалистичен случай, когда возникает оверхед из-за подобных особенностей трансляции на низкий уровень.

    Что бы достать значение из стека не обязательно доставать элементы по очереди.

    Обязательно. В противном случае, эта абстракция называлась бы по-другому.

    Ни одна команда или микрокоманда не может быть исполнена менее чем за 1 такт.

    Если вы говорите про такты как про электрические импульсы, а не шаги выполнения машинного кода, тогда всё ещё проще. Одна команда выполняется за несколько тактов, состоит из нескольких микрокоманд, которые выполняются за 1 такт.

    Раз это такая же память, то как получить адрес регистра?

    Адреса регистров заранее известны. Получить их можно из спецификации. Процессору нет дела до вида памяти, это просто каскад электросхем, у которого есть входы и выходы. Какой выход подключён, туда и записывается результат (грубо говоря).
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    О каком оверхеде вы говорите?

    Процессор выполняет следующие действия при вызове подпрограммы:
    1. сохранить текущую позицию управления
    2. передать управление подпрограмме

    Затем выполняется какой-то код. Далее следует "return":
    1. загрузить предыдущую позицию управления
    2. передать управление этой позиции
    3.* Почистить локальные переменные (не всегда)
    4.* Вернуть какое либо значение (не всегда)

    Получается, что оверхед по командам составляет минимум 2х, а по времени - минимум 4х.

    Вы о каком стеке говорите то?

    Стек - это ограниченная по длине последовательность ячеек памяти заданной размерности. Для стека определены две операции:
    1. Добавить ячейку в начало последовательности
    2. Удалить первую ячейку последовательности и получить её значение

    Пусть наша подпрограмма использует стек длины L. Допустим, что мы обновили программу и начали использовать стек длины 5L. Тогда получаем, что на придётся выполнить минимум в 5 раз больше операции на стеке, следовательно, в 5 раз больше времени на это потратить. Предположим, что реально из-за ветвлений программы используется лишь 1/5 стека. Тогда оверхед составит 4L.

    Рассмотрим большую переменную, которая занимает N ячеек памяти стека. Тогда все операции с переменной занимаю тоже в N раз больше времени.

    Я знаю что такое микрокод.

    Это хорошо. Значит вы знаете, что некоторые команды в действительности являются микропрограммами. Но с точки зрения универсальной архитектуры - это атомарные операции. Поэтому с этой точки зрения микрокод выполняется за дробное количество операций.

    Куда уж быстрее, чем один такт? Полтакта? Компьютеры так не работают.

    Стек - это... ну я уже выше написал. Он никак не привязан к тактам, регистрам или чему-то ещё. Это абстракция. Куча - это тоже абстракция. Кстати, регистры - это тоже своего рода физическая абстракция, т.к. для процессора регистры являются такой же памятью, как и l1,l2,l3,ram,ПЗУ.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    Что простите? Ассемблер это просто человекочитаемый машинный код.

    Ассе́мблер (от англ. assembler — сборщик) — транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
    Также результатом ассемблирования может быть не исполняемый, а объектный модуль... в дальнейшем с помощью редактора связей может быть получен исполнимый файл.

    Каждая строчка на ассемблере однозначно кодируется машинной командой с точностью до смещений.

    Например, команда call вызывает процедуру, и транслируется в несколько инструкций (операций). Даже если подобные инструкции однозначны, они дают оверхед.

    Вы так и не объяснили, почему большой стек медленнее маленького?

    Не просто большой стек, а большой высоко утилизированный много фрагментированный (короче обычный) стек. Аналогично жёсткому диску, фрагментация замедляет работу.

    Какие ваши доказательства?
    Один такт это одно переключение транзистора.
    Как можно сделать какую-то работу, не переключив ничего?

    Микроко́д — программа, реализующая набор инструкций процессора. Так же как одна инструкция языка высокого уровня преобразуется в серию машинных инструкций, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций — микропрограммы, микрокода.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук, это у вас какая-то бессвязная речь. Я про стек - вы про кучу. Причём тут куча? Зачем вы это написали?

    Куда уж быстрее, чем один такт?

    Любой более высокий уровень даёт оверхед, в том числе и для работы со стеком. Даже программа на ассемблере работает медленнее аналога на машинном коде.

    Полтакта? Компьютеры так не работают

    А ещё существуют микропрограммы. Они работают быстрее машинного когда и как раз умеют в дробные такты.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук,
    чем больше стек, тем он медленнее

    Это на порядки быстрее кучи.

    Хмм... Могу только сказать, это на порядки медленнее машинного кода.
  • Стек и куча (память)?

    Griboks
    @Griboks
    Максим Мосейчук, чем больше стек, тем больше выполняется операций по работе с ним => тратится больше тактов процессора на несвязанные с программой действия => коэффициент утилизации падает.
  • Как разобраться в области машинного обучения?

    Griboks
    @Griboks
    freeExec,
    Оказывается не нужно быть профессором высшей математики, чтобы получить ответ на этот вопрос.

    Только вот ответ может быть неправильным или их может быть очень много. Или результат не подойдёт для решаемой задачи. Или не хватит ресурсов для выданного варианта сети. Или на метод тыка уйдёт 3 недели. Или гугл выдаст устаревший ответ, т. к. новые (а не популярные) технологии очень долго продвигаются на 1 страницу гугла.

    А так да, можно и через гугл. Вдруг повезёт...
  • Как разобраться в области машинного обучения?

    Griboks
    @Griboks
    Не забывайте, что крестики-нолики имеет конечное множество решений, а следовательно и стационарное состояние сети. Потом обязательно рассмотрите нестационарную задачу, например, классификацию новостей.
  • Как разобраться в области машинного обучения?

    Griboks
    @Griboks
    freeExec,
    Следуя моей логики нужно использовать дискриминант для решения квадратных уравнений, а не изучать его теорию и доказательство.

    Так вопрос не в том, как решать уравнения, а в том, как его вывести и доказать его работоспособность.

    Существует огромное количество методов машинного обучения, анализа данных, множество различный нейросетей, разных вариантов пред- и постобработки, визуализации, оценки моделей, подбора параметров, оптимизации. Всего примерно овермиллион комбинаций. Вы, конечно, можете запомнить все комбинации, но обычные люди предпочитают разобраться в базе, чтобы не учить всё это наизусть.
  • Как разобраться в области машинного обучения?

    Griboks
    @Griboks
    Следуя вашей логике, разбираться в коде смысла нет. Достаточно понять, что машинное обучение - это большая чёрная коробка с памятью. Сначала мы даём этой коробке много примеров (обучаем), затем она сама начинает нам предсказывать результат на основе примеров.
  • Как сделать код более точным?

    Griboks
    @Griboks Куратор тега C#
    И ещё не забывайте, что Math.Pow(x, 5/3);
    эквивалентно x
  • Задача на синхронизацию. Почему получается приоритет читателя?

    Griboks
    @Griboks Куратор тега C#
    taylor96,
    чтобы чередовалась работа потоков. В консоли должно выводиться по очереди

    Это называется последовательные чтение и запись. Это НЕ потоки. Потоки - это когда чтение и запись происходят параллельно.
    В вашем случае следует писать так:
    ReaderFunction();
    WriterFunction();
    ReaderFunction();
    WriterFunction();
    ...

    Или же ставить флаг, чья сейчас очередь. Что-то вроде:
    ReaderFunction(){
    while(!CanRead) sleep(1);
    read();
    CanRead=false;}
  • В чем разница между int.Parse() и Convert.ToInt32() в C#?

    Griboks
    @Griboks Куратор тега C#
    Relonir, это вопрос? Да, для значения "1" будет вызван parse.
  • В чем разница между int.Parse() и Convert.ToInt32() в C#?

    Griboks
    @Griboks Куратор тега C#
    Relonir, если метод возвращает значение, он дальше не выполняется, и parse не будет вызван. Следовательно, исключения не будет.
  • В чем разница между int.Parse() и Convert.ToInt32() в C#?

    Griboks
    @Griboks Куратор тега C#
    Relonir, null строки преобразуются в 0, остальные - через int.Parse. Что-то конкретное непонятно?
  • В чем разница между int.Parse() и Convert.ToInt32() в C#?

    Griboks
    @Griboks Куратор тега C#
    Для неинициализированной строки int.Parse выбросит исключение, Convert.ToInt32 вернет 0.

    А в чём вопрос?
  • Прокладка витой пары в новом здании. Как правильно?

    Griboks
    @Griboks
    hint000, согласен с вами. В каждой конкретной ситуации надо делать проект, а не надеяться на чей-то опыт, какой-то стандарт.

    ополнительные коммутаторы + шкафы+ ИБП стоят дороже нескольких КМ витухи

    Уже могут иметься в наличии.
    опорную сеть уже на оптике

    Только сейчас их цена сравнялась. Но при том, оптика сократит расходы в несколько раз, даже если будет стоить в 2 раза больше. Причём, оптика тут вовсе необязательна.
    обслуживать один узел агрегации проще чем сеть из узлов

    Современное обслуживание заключается в ssh (два окна вместо одного?), а оборудование стоит месяцами/годами А если вспомнить его наработку на отказ, то, скорее фирма закроется, чем оно сломается. Конечно, если кинуть коммутатор куда-нибудь в гардероб под куртки, то его придётся обслуживать чаще.
    телефонию аналоговую вы уже не пустите просто никак

    Никакой связи между телефоном и коммутатором нет. Как пришлось бы тянуть кабель, так и придётся. Как пришлось бы ставить шлюз, так и придётся, только в другом месте.