Pull to refresh
-13
0

User

Send message
Это некорректное заявление.


Прафтаа?
Ну, ежели у Вас своё собственное определение понятия «процессор»…

У Itanium'а 2К только регистровой памяти.


У последнего?
И сколько VLIW команд исполняет одновременно?

Это раз, аппаратный стек может быть микроскопическим (см. Intel 4004), это два.


И толку от трёх уровней стека?

При программировании в машинных кодах — нифчом.


А в чём ещё может программироваться процессор? — В итоге всё всегда сводится к «машинным кодам» в той или иной форме.
А Вы часто программируете микрокод процессора?

Вопрос стоял в виде «есть ли в процессоре стек» и трактовке того, что такое «в процессоре есть».


Всю жезнь эта трактовка была одинаковой — «архитектура процессора/ЭВМ предполагает реализацию стека». Различие промежду «в памяти» или «в процессоре» — никогда не делалось.
Вот в ЕС ЭВМ, как и у её прородителя — IBM System/360 стека действительно не было.
В контексте разговора выше — аппаратная реализация.


Нокак, сэр?
Сама концерция [микро]процессора предполагает некую шнягу, которая умеет вычислять и «делать программу» — но не имеет памяти.
Если внутри системы будет много памяти (несколько К, к примеру) — то с чего это всё будет называться «процессором», а не микроконтроллером (однокристалльной микро-ЭВМ на старые деньги)?

Это может быть микропрограммная реализация, а не аппаратная.


Ифчом разница при программировании процессора?
И-ии какая разница?
А можно подробнее, при каких обстоятельствах вам понадобится атомарность инструкции call или инструкции ret?


Ой.

Допустим инструкцию прервали в середине


Инструкции не прерываются, они — атомарны by design.

произошло прерывание, если обработчик прерывания корректный, то он все вернет в состояние «как было»


фкакое «какбыло»?
Эмуляция инструкции call может выглядеть примерно так:

inc SP
mov (SP),IP
add (SP),offset __next
jmp <my_func>

__next:

(Ассемблер условный, скобочки — косвенная адресация, offset — смещение до метки.)
Прерывание между первой и второй командой — даёт нам мусор в стеке, между третьей и четвёртой — пропуск вызова функции.
Возврат из функции или прерывания — при не-атомарности тоже нарисуют цену на дрова.
По старинке, старшее поколение продолжает писать де-факто на fortran-77.

Хорошо хоть не Фортран-66.

Что замечено, опять же, на личном опыте:
1. Редкая программа используется более чем одним человеком. Есть всего пара примеров в поле зрения, где программы написаны давно, и потихоньку модифицируются.


Ну тогда вообще непонятен предмет разговора.
Люди не умеют программировать ни на Си/С++, на на чём другом.
Уйдут эти люди — придут другие, которые будут юзать Си, питон или Матлаб с Октавой.
Для МКЭ — Ансис или Саломе.
Ну и т.д.
А все разговоры о «преимуществах Фортрана» — это так, рассуждения для бедных.
Ну вот о том и речь, что громогласные рассуждения про «замечательную способность по работе с матрицами» как-то незаметно переводятся на кучу несвязных маломерных массивов — от чего код начинает выглядеть просто чудовищно.
А где может понадобиться 15-тимерный массив?


Везде.

Ограничение вполне уместно,


Ой, шо?
Здесь только что били пяткой в грудь, шо Фортран — круть немерянная по сравнению с Си — а теперь «ограничение вполне уместно»?

т.к. в физических приложениях редко больше 4х нужно бывает


Фкаких «физических»?

(разные там струнные теории и иже с ними — особый случай,


Откройте для себя понятие фазового пространства.
Для материальной точки — это будет шесть измерений, для протяжённого тела (с вращениями) — уже девять.
Массив таких тел… ой.
Обсчёт электромагнитного поля — две векторные величины в каждой точке, шесть отсчётов на точку трёхмерного пространства.
Приращения полей — по три отсчёта на каждую ось для обоих полей.
Т.е. это всё влёгкую улетает далеко и за три, и даже за пятнадцать измерений.
в самом процессоре, как у мат процессора.


Нонафига, сэр?

И возможно как у Форт (про форт ничего не знаю)


Форт by default исходит из модели стек-машины с 64кбайт общей памяти, стеком, размещённым в ней (что естествественно) и растущим «от верхней границы вниз».

call, ret и iret
можно эмулировать,


Слово «атомарность» благородному сэру незнакомо.
И прерывание, бодренько вклинившееся в эмулируемую очередь инсрукций — распишет авторский продукт по всем испостясям.
Либо потребует кажный разик enable/disable int.

ветку стоит прекращать, всё все поняли.


Зарадибога.
А что, по-Вашему, значит, что у «процессора есть стек»?
Основное назначение стека — хранение адресов возврата из процедур и прерываний, т.е. аппаратная поддержка рекурсивности вызовов, call, ret и iret (или их аналоги).
pop / push — оне чиста «вкусняшки».
Оддельный аппаратный стек мог быть организован, как минимум — ещё на древнем 580ИК80 ака i8080.
Май 14-го, LM-17 Qiana — ядро 3.13
Да, в общем, я примерно так себе и представлял — просто многие джуниоры, его похоже даже и не слышали.
А какая разница конечному пользователю, к примеру?
Он будет получать билды с «прогретым» кодом?
Вы правы — это Ада.
Там массивы индексируются круглыми скобочками.
Хотя и в фортране всё не так однозначно…



do k=1,10
do j=1,20
do i=1,100
arr(i,j,k)=25! правильно
brr(k,j,i)=0! работоспособно, но медленнее в несколько раз

end do; end do; end do


(цитата из Вики)
Паскаль изначально различал массивы и указатели «по дизайну».
Правда, там, в результате — были сложности с передачей массивов произвольного размера в процедуру.
Так вот, а в C передать массив в функцию нельзя. Точнее, можно, не нет специального синтаксиса, чтобы показать компилятору, что в функцию передаётся именно массив. Если написать:

void f (int a[2])

ну или:

void f (int a[])

То это будет эквивалентно такому коду:

void f (int *a)


Таки int * const a, что даёт некоторые нюансы.
Вообще, что характерно:



FORTRAN 77 (1980)[править | править вики-текст]
[...]
Увеличена максимальная размерность массива с 3 до 7. Сняты ограничения на индексы массива.
Усовершенствованы и расширены возможности работы с процедурами.


Fortran 2008 (2010)[править | править вики-текст]
Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran)[5][11]. Также предполагается увеличить максимальную размерность массивов до 15,


(Вики, наше всё)

Т.е. ценой внесения в язык высокоуровневых абстракций (в отличие от Си/С++) — становится ограничение на предельную размерность массива, которую необходимо изменять на уровне стандарта…
в x86 серии вплоть до x486 не было стека в процессорах


Ой.
Мне кажется, что некорректно измерять JIT через time.


Э-ээ, правда?

Вы же для Си время компиляции не считаете?


Вы ещё время разработки предложите учитывать…
Программа на Си компилируется один раз — а запускается многократно, время компиляции «размазывается» по всем запускам.
Например, Fortran, относящийся к той же «возрастной группе», что и С, в некоторых специфических задачах более производителен.


Щито?
Фортран лет на двадцать старше Си — от чего не имеет ряда полезных фич.
Плюс «моделей ассемблера» существует множество, не сводимое к AT&T и Интел, GAS — это GNU assembler.
Для ассемблера Вы используете AT&T синтаксис — что довольно специфично, fasm и masm юзают Интел.
Последний в x86 вообще более распространён, для которого характерны заметно другие подходы в синтаксисе: — т.е. «доллары» и «проценты» там не используются.
Ну и вообще, в других ассемблерах в качестве маркера «непосредственного значения» может использоваться '#', регистры пишутся непосредственно, без «процента», а «разыменовывание указателя» (косвенное обращение к памяти) может так же обозначаться знаком '@'.

P.S. Да, когда-то регистры общего назначение так же именовались «свероперативным запоминающим устройством».
Жуткая АЧХ — ниже 2,5 кГц бузер практически не пищит.
Хотя пищалка, конечно…
Круто было-бы реализовать вывод «аналогового» звука — через ШИМ на сотню килогерц или поболе, хотя вопрос потянет ли это процессор.
А «просто» пищать меандром — не так интересно.
ДНК — это практически единственный способ хранения, который может существовать тысячу или даже миллион лет,


Ой, правда?

и ДНК древних окаменелостей тому доказательство. Молекула ДНК устойчива в окружающей среде, ученые даже нашли 300000-летнюю митохондриальную ДНК медведя и расшифровали ее.


А вот полноценную ДНК мамонта или саблезубого тигра до сих пор найти не могут.

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


Представил.
Вспомнил про мутации и онкологию.
И про то, что в живом организме — сохранением ДНК в неизменном виде активно занимаются специальные белковые подсистемы клетки.

Information

Rating
4,515-th
Registered
Activity