Задать вопрос
  • Как работает аппаратное распараллеливание?

    @Mercury13
    Программист на «си с крестами» и не только
    Попробую рассказать.

    Шаг 1. Конвейерная архитектура (Pentium 1).
    Чем-то напоминает многоствольный пулемёт. Один патрон заряжается, другой выстреливается, третий выбрасывается. Стоп… Одна команда выбирается, вторая декодируется, третья и четвёртая исполняются.

    Шаг 2. Суперскалярность (Pentium то ли Pro, то ли MMX).
    У нас есть несколько исполнительных блоков (в данном случае целочисленных). Если команды не противоречат друг другу, их можно пустить на обоих блоках параллельно.

    Шаг 3. Микрокоманды и VLIW (если не ошибаюсь, из x86 первым реализован в Transmeta Crusoe).
    Состоит из таких этапов.
    1. Разбиваем операции x86 на микрокоманды — например, «перебросить из eax в сумматор», «сдвинуть содержимое сумматора на 1 вправо»…
    2. Собираем это самое «очень длинное слово операции» из микрокоманд, заботясь о том, чтобы не было зависимостей по данным. Один сумматор получает слово из eax, а параллельно второй сдвигает на 1. Каждый из разрядов «длинного слова» управляет своим блоком процессора: сумматором, памятью, вводом-выводом…
    3. Ну и исполняем это самое слово.

    Всем этим архитектурам важно т.н. предсказание ветвлений. Чтобы всё это дело работало, нужно, чтобы несколько операций были декодированы наперёд. Проблема — ветвление: если мы не угадаем, случилось ли ветвление, вся предварительная работа насмарку. В микроконтроллерах с коротким конвейером и предсказуемым до такта временем работы мы на это чхаем: например, в инструкции к AVR говорится, что там двухместный конвейер: один такт декодирование и один (два, три) — исполнение. Обычно такт на декодирование не важен (и не указан в инструкции), но мы теряем его, если случился переход.

    А в x86 алгоритмы предсказания ветвлений довольно сложны.

    ЗЫ. В суперскалярных процессорах несколько десятков регистров, на которые динамически навешиваются ярлыки: сейчас EAX=r5, а через две команды — уже r13. Так называемое «переименование регистров».
    Ответ написан
    3 комментария
  • Как работает аппаратное распараллеливание?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну вот представьте. Есть у вас поток команд. Скажем подряд идут команды в духе "сложи мне два числа", "скопируй значение из памяти в регистры", "пошли что-то на шину что бы к девайсу ушло". Для всех этих трех операций нужны разные штуки. Для первой - свободный АЛУ, для второго - управляющие сигналы на оперативку послать, для третьего - третье. И все эти операции занимают сильно по разному времени.

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

    Или например... есть у нас у ядра процессора аж 4 АЛУ. То есть мы по хорошему можем сразу 4 арефмитические операции выполнять. Можно распаралелить если команды подряд идут.

    Вообще тут лучше почитать по конвееризации процессоров. Это весьма жирная тема.

    Как операционная система выбирает ядро для исполнения


    Почитайте про планировщики, например вот: Process Scheduling in linux
    Ответ написан
    1 комментарий
  • Как верно задать разметку?

    Ewintory
    @Ewintory
    Java / Android developer
    Вообще то это неправильно внутри ScrollView использовать GridView, ListView. Они не умеют считать свою максимальную высоту. Попробуйте обойтись без ScrollView.
    Ответ написан
    Комментировать
  • Как реализовать для 1 активити несколько действий?

    Scorpi
    @Scorpi
    Попробуйте так
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.VIEW" />
    Ответ написан
    3 комментария
  • Android ListView как релизовать разные параметры виджетов в ListView?

    @Copperfield
    Android dude
    Ответ написан
    Комментировать
  • Как в python json определить количество объектов?

    un1t
    @un1t
    d = {'a':1, 'b':2}
    len(d)


    Если это именно строка, а не обьекты, то сначала надо распарсить json
    s = "{'a':1}"
    import json
    d = json.loads(s)
    len(d)
    Ответ написан
    1 комментарий
  • Как выгрузить приложение в play google после потери цифровой подписи?

    @FoxInSox
    Никак. Создавайте новое приложение.
    Ответ написан
    Комментировать