Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Потери при выравнивании.  (Прочитано 38501 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 07-02-2015 07:53 » 

Насчет 286 машинок, Хотя адрессная шина и была 24 битная, Но процессор все равно оперировал с 16 битами. Было лва адресных регистра. по 16 бит. Например CS:IP. 

Я это привёл не для сопоставления 24->48, а для другого. RXL, сказал, что здесь плохо работает механизм сдвигов... а я иллюстрирую, что программные трудности на этом уровне присутствуют везде и, если они существенны, решаются аппаратно.

В 286-ом в реальном режиме, например, мы опрашиваем ds:si, а что делается аппаратно: ds сдвигается на 4 влево и к этому прибавляется si, итого физический адрес. В защищённом режиме преобразование виртуального адреса в физический ещё сложнее и дольше. Если нужно организовать умножение на 6 при адресации побайтно, то можно сделать команду умножения на 6 отдельной, быстро исполнимой на аппаратном уровне, условно, за 1 такт, также, как и shl.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #31 : 07-02-2015 08:09 » 

Aether, Умножение на шесть будет разлогаться в двоичной системе:
1) А = ...
2) B = A <<= 1
3) A <<= 1
4) А += B

Согласись, что это чуть сложнее реализовывается, чем умножение на восемь скажем
1) А = ...
2) A <<= 3
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 07-02-2015 08:50 » 

Конечно сложнее, но что весомее: экономия памяти в гигабайты или десяток другой ЛЭ в чипе?

Для Вас, как для программиста это будет выглядеть:

mov ax, ...
shl ax, 3

// на 8

mov ax, ...
mul6 ax

// на 6

(условно)
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #33 : 07-02-2015 09:20 » 

Aether,

Жесткий диск фирмы IBM 1956 год Вместимость 5 Мб

 640 K ought to be enough for anybody. (с) Bill Gates 1981 год


А что сейчас, Память уже измеряется в гигабайтах, Память на жестком диске перевалила за террабайты. И стоит это намного дешевле чем, тогда 5 Мб и 640 килобайт.

А что будет через 10 - 20 лет?


* IBM-305-RAMAC-5MB.jpeg (66 Кб - загружено 1247 раз.)
« Последнее редактирование: 07-02-2015 09:27 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 07-02-2015 13:37 » 

Откуда нам знать? Но, несомненно, это будет то, что разрабатывается уже сейчас.

Билл, для своего времени, сказал всё верно. Тем не менее, в каждой отрасли есть свои пределы, например, бензиновому двигателю уже  более 100 лет, но КПД выше 40% подниматься не хочет, ибо термодинамику Карно не отменишь. Однако, совершенствовать всё же есть что: массу, характеристику работы, долговечность... Так и в электронике: одно другое не исключает.

PS: хорошая фотка.  Улыбаюсь
Записан
darkelf
Молодой специалист

no
Offline Offline

« Ответ #35 : 07-02-2015 14:59 » 

Конечно сложнее, но что весомее: экономия памяти в гигабайты или десяток другой ЛЭ в чипе?

Для Вас, как для программиста это будет выглядеть:

mov ax, ...
shl ax, 3

// на 8

mov ax, ...
mul6 ax

// на 6

(условно)

Сорри, но Вы немного не чувствуете, имхо. Попытаюсь, как я понял, что объяснить то, что хотел сказать Finch.

Возьмём гипотетический процессор, с АЛУ, у которого есть модуль сдвига (пусть этот модуль даже позволяет сдвигать сразу на несколько бит за раз) и модуль сложения (тоже выполняющий операцию сложения за раз).

Умножение на 6 потребует задействования обоих этих модулей, причём:
1 такт засылаем на модуль сдвига исходное значение
2 такт сдвигаем на 2
3 такт засылаем результат сдвига на модуль сложения
4 такт засылаем на модуль сдвига исходное значение
5 такт сдвигаем на 1
6 такт засылаем результат сдвига на модуль сложения
7 такт выполняем сложение
8 такт выгружаем результат.

А теперь для сравнения умножаем на 8
1 такт засылаем на модуль сдвига исходное значение
2 такт сдвигаем на 3
3 такт выгружаем результат

В итоге для умножения на 6 нам понадобилось 8 тактов и оба устройства, а для умножения на 8 - всего 3 такта и одно устройство.

Можно немного ускорить умножение на 6, например, добавив ещё один сдвигатель и попытавшись выполнить операции сдвига параллельно:
1 такт засылаем на модуль сдвига 1 исходное значение и на модуль сдвига 2 исходное значение
2 такт сдвигаем на модуле сдвига 1 на 2, а на модуле сдвига 2 на 1
3 такт засылаем результат сдвига с модуля сдвига 1 на модуль сложения
4 такт засылаем результат сдвига с модуля сдвига 2 на модуль сложения
5 такт выполняем сложение
6 такт выгружаем результат.

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

А если сдвигатели выполняют по одному сдвигу за такт, то всё становится ещё хуже.

Умножение на 6
1 такт засылаем на модуль сдвига исходное значение
2 такт сдвигаем на 1
3 такт сдвигаем на 1
4 такт засылаем результат сдвига на модуль сложения
5 такт засылаем на модуль сдвига исходное значение
6 такт сдвигаем на 1
7 такт засылаем результат сдвига на модуль сложения
8 такт выполняем сложение
9 такт выгружаем результат.

Умножение на 8
1 такт засылаем на модуль сдвига исходное значение
2 такт сдвигаем на 1
3 такт сдвигаем на 1
4 такт сдвигаем на 1
5 такт выгружаем результат

Умножение на 6 два сдвигателя:
1 такт засылаем на модуль сдвига 1 исходное значение и на модуль сдвига 2 исходное значение
2 такт сдвигаем на модуле сдвига 1 на 1, а на модуле сдвига 2 на 1
3 такт сдвигаем на модуле сдвига 1 на 1, на модуле сдвига 2 ничего не делаем
4 такт засылаем результат сдвига с модуля сдвига 1 на модуль сложения
5 такт засылаем результат сдвига с модуля сдвига 2 на модуль сложения
6 такт выполняем сложение
7 такт выгружаем результат.

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

Сорри, за много букв.
« Последнее редактирование: 09-02-2015 06:10 от darkelf » Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 07-02-2015 16:12 » 

Finch привёл схему:
6*а = 2*а + 2* (2*а)

Любой регистр ax, bx, ecx - это наборы триггеров, когда процессор получает команду она отпирает некий "затвор" из элементов "И" (вообще, БЛЭ обычно "И-НЕ", но не суть). Открыв затвор токи с выходов триггера начинают течь в глубину требуемой схемы. Так вот, модуля сдвига тут не требуется - для того, чтобы организовать сдвиг влево, например, на 2 нужно всего лишь добавить 2 дорожки с логическими нулями справа, для сдвига на 4 добавить 4 нулевых дорожки, а потом оба значения подать на сумматор. В целом работать это будет не дольше ADD. Примерную схему рисовать? (Естественно, не для 48 бит, но хотя-бы для 4)))

Но, сначала, вопрос про сумматор:
А если вспомнить, что в реальности операция сложения выполняется через тот-же сдвиг и операцию "или", то всё становится ещё хуже (т.е. реально операция сложения будет занимать не один такт, а вовсе даже и больше, плюс она потребует очередной сдвигатель).
Вот это я подзабыл, но чую что-то здесь не так.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 07-02-2015 17:11 » 

че-то мне за железячников обидно) они там обычно стараются,  за каждый такт и мегагерц сражаются, каждый милливат считают.. каждый свободный миллиметр кристалла используют.
а потом приходит программист и говорит что херня какая то?! все так медленно и умножения на 6 за один такт не реализовано!...и еще стопясяттысячкоманд за один такт.

а вот у меня, блин, папка Windows - 20ГБ занимает! это что, лишних 32 бита потому что?

PS извините, крик души, наболело)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #38 : 07-02-2015 18:09 » 

Ochkarik, Не думаю, что 20 Гигов у тебя из-за 32 разрядности Улыбаюсь. У меня раздел, где сидит 64 битная система + все мне нужные программы занимает 11 гигов. Правда там еше висит кэш апдейтов. его я давно не чистил Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #39 : 07-02-2015 18:58 » 

Finch, фиг его знает, но это домашний ноут, я на нем вообще ничего не делаю практически. фильмы, фотки, интернет)
PS это как раз 64 бита.
« Последнее редактирование: 07-02-2015 21:45 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 07-02-2015 20:36 » 

...и еще стопясяттысячкоманд за один такт.
С умножением, естественно, не получится. Зря, я как раз железячников защищаю, конечно борются они и за то и за это, но борются они, выполняя тех. задание коммерсантов, военных... А программисты, потом, из сделанного ими, пытаются  разносторонние продукты разработать, поэтому у Вас винда и весит 20Гб. А ещё есть такая вещь, как спешка, когда приходит срок сдавать работу, а она ещё на пол пути, сами понимаете, будет сделано хоть как, лишь бы работало.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 07-02-2015 21:57 » 

а вот у меня, блин, папка Windows - 20ГБ занимает! это что, лишних 32 бита потому что?

Нет, Вам же только что всё объяснили - из-за потерь при выравнивании, обусловленных неправильным выбором архитектуры. Переходите на 48 бит, и все нормализуется. На БЭСМ-6 у Вас куда скромнее системный раздел будет.
Записан

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

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 09-02-2015 10:07 » 

Aether, Умножение на шесть будет разлогаться в двоичной системе:
...
Согласись, что это чуть сложнее реализовывается, чем умножение на восемь скажем

Сдвиг в электронике достигается перекоммутацией линий и не требует вычислительных блоков и тем более тактов на выполнение. Умножение, всегда требует времени, за исключением табличного метода с ПЗУ, требующего N*M адресных линий.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 09-02-2015 14:43 » 

Сдвиг вне МП, возможно, тактов и не требует. Внутри же МП любая операция обзаводится дополнениями. Если я не прав, поправьте:
команда shl ax, 3 примерно:
- с приходом восходящего фронта тактового импульса происходит установка значений промежуточного регистра, назовём его W, в соответствие со значениями регистра источника: ax -> W,
- выходы регистра W соединены таким образом, чтобы обеспечить перекоммутацию со смещением на 3 линии: W -> Res,
- с приходом нисходящего фронта происходит запись текущего перекоммутированного значения в ax: Res -> ax.
Строго говоря, любая команда требует времени, а не тактов, для обеспечения перехода логики в устойчивое состояние с гарантией результата. Если это время менее времени протекания одного такта, то команда займёт - один полный такт.
У меня нет актуальных данных сколько тактов занимает какая команда и когда, но нужно разделять задачи: умножение двух произвольных чисел и умножение произвольного числа на константу. Именно, поэтому Вы, умножая на 8 на деле используете сдвиг, но поэтому же можно реализовать отдельной логикой умножение и на 6.

Мне, впрочем, более уместным, кажется, адресация целыми словами без деления на байты, но с наличием в аппаратной базе команд упаковки/распаковки, аналогично, например, имеющимся в MMX.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 09-02-2015 14:53 » 

беда в том, что ни один программист не будет использовать явное умножение на 6. никогда... ибо 99.999999999% программистов (пардон) вообще редко думают об аппаратной платформе. даже я бы сказал - специально не думают об платформе.

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

да, и никто из производителей не согласится на внесение дополнительных команд, чья целесообразность вообще говоря довольна сомнительна, и кроме как к удорожанию кристалла мало к чему приведет.
« Последнее редактирование: 09-02-2015 14:56 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #45 : 09-02-2015 18:05 » 

Сдвиг в электронике достигается перекоммутацией линий и не требует вычислительных блоков...

В тех архитектурах, где мне посчастливилось заглянуть в самые пороха реализации, этот самый сдвигатель через коммутацию все-таки входил в состав АЛУ.

...и тем более тактов на выполнение.

Верно, сдвиг, как и прочие асинхронные операции АЛУ, тактов не требует (поскольку выполняется "мгновенно" за вычетом задержек на логических вентилях). Такт потребуется на фиксацию результата в регистре-получателе (если только результат не направляется в память, там тактом вряд ли дело обойдётся).
Записан

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

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #46 : 10-02-2015 00:32 » 

Я все таки имел в виду не АЛУ.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 10-02-2015 08:16 » 

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

Итак, суть вопроса разделилась на три ветки:

х48А: добавить к существующим решениям набор команд для работы с 48 бит структурами. Это, как раз то о чём Вы говорите. И это, действительно имеет минимум смысла, так как к существующему оборудованию добавится довесок принципиально дело не меняющий, кроме усложнения аппаратной части. Но стоит также упомянуть: а как относится к, например, режиму виртуального 86? Кому сейчас нужен реальный режим и поддержка соответствующего ПО?

х48Б: предложить новую архитектуру, которая будет поддерживать адресацию побайтно с ограничениями до размера максимального слова в 48 бит. Естественно, для тех, кто программирует, например, на "С" вся нагрузка ляжет на компилятор. Тем не менее стоит тоже вспомнить: изначально "С" разрабатывался, как язык имеющий уровень абстракций достаточный для построения аппаратно независимых программ. Например, int означало объявление просто целого числа без знания конкретного размера, который при необходимости вычислялся компилятором через sizeof. Реально же, используются понятия short int и long int, которые подразумевают размерность. Таким образом, я считаю, вполне допустимо объявить массив структуры int48 и компилятор поймёт, что на самом деле при поиске произвольного элемента нужно номер этого элемента умножить на 6, введя специальную команду, аналогично, могут быть оформлены структуры int24, int16, int12, int8.

х48В: предложить новую архитектуру, которая будет поддерживать только адресацию словами по 48 бит, с наличием только 48 бит регистров и комплектом команд упаковки/распаковки внутри самих регистров. При программировании на "С" подход будет похожим на ранее описанный, и нагрузка также ляжет на компилятор. Но с точки зрения аппаратной базы, естественно, кое что усложнится, но кое что и упростится.

PS: 99.999999999% - это получается менее одного человека, живущего сегодня.) Как же быть с системными программистами, разработчикауи драйверов... Имхо, когда программист исходит из предположения, что ресурсов для текущей задачи хватит, то да, на многое можно смотреть сквозь. Но, когда находятся узкие места, то так или иначе ему придётся спуститься на уровень ассемблера и понимания того, как работает его железо.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #48 : 10-02-2015 09:41 » 

Цитата
Кому сейчас нужен реальный режим и поддержка соответствующего ПО?
Я так понимаю, что товарищ совсем не знает об embedded system
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines