Прафтаа?
Ну, ежели у Вас своё собственное определение понятия «процессор»…
У Itanium'а 2К только регистровой памяти.
У последнего?
И сколько VLIW команд исполняет одновременно?
Это раз, аппаратный стек может быть микроскопическим (см. Intel 4004), это два.
И толку от трёх уровней стека?
При программировании в машинных кодах — нифчом.
А в чём ещё может программироваться процессор? — В итоге всё всегда сводится к «машинным кодам» в той или иной форме.
А Вы часто программируете микрокод процессора?
Вопрос стоял в виде «есть ли в процессоре стек» и трактовке того, что такое «в процессоре есть».
Всю жезнь эта трактовка была одинаковой — «архитектура процессора/ЭВМ предполагает реализацию стека». Различие промежду «в памяти» или «в процессоре» — никогда не делалось.
Вот в ЕС ЭВМ, как и у её прородителя — IBM System/360 стека действительно не было.
В контексте разговора выше — аппаратная реализация.
Нокак, сэр?
Сама концерция [микро]процессора предполагает некую шнягу, которая умеет вычислять и «делать программу» — но не имеет памяти.
Если внутри системы будет много памяти (несколько К, к примеру) — то с чего это всё будет называться «процессором», а не микроконтроллером (однокристалльной микро-ЭВМ на старые деньги)?
Это может быть микропрограммная реализация, а не аппаратная.
(Ассемблер условный, скобочки — косвенная адресация, offset — смещение до метки.)
Прерывание между первой и второй командой — даёт нам мусор в стеке, между третьей и четвёртой — пропуск вызова функции.
Возврат из функции или прерывания — при не-атомарности тоже нарисуют цену на дрова.
По старинке, старшее поколение продолжает писать де-факто на fortran-77.
Хорошо хоть не Фортран-66.
Что замечено, опять же, на личном опыте:
1. Редкая программа используется более чем одним человеком. Есть всего пара примеров в поле зрения, где программы написаны давно, и потихоньку модифицируются.
Ну тогда вообще непонятен предмет разговора.
Люди не умеют программировать ни на Си/С++, на на чём другом.
Уйдут эти люди — придут другие, которые будут юзать Си, питон или Матлаб с Октавой.
Для МКЭ — Ансис или Саломе.
Ну и т.д.
А все разговоры о «преимуществах Фортрана» — это так, рассуждения для бедных.
Ну вот о том и речь, что громогласные рассуждения про «замечательную способность по работе с матрицами» как-то незаметно переводятся на кучу несвязных маломерных массивов — от чего код начинает выглядеть просто чудовищно.
Ой, шо?
Здесь только что били пяткой в грудь, шо Фортран — круть немерянная по сравнению с Си — а теперь «ограничение вполне уместно»?
т.к. в физических приложениях редко больше 4х нужно бывает
Фкаких «физических»?
(разные там струнные теории и иже с ними — особый случай,
Откройте для себя понятие фазового пространства.
Для материальной точки — это будет шесть измерений, для протяжённого тела (с вращениями) — уже девять.
Массив таких тел… ой.
Обсчёт электромагнитного поля — две векторные величины в каждой точке, шесть отсчётов на точку трёхмерного пространства.
Приращения полей — по три отсчёта на каждую ось для обоих полей.
Т.е. это всё влёгкую улетает далеко и за три, и даже за пятнадцать измерений.
Форт by default исходит из модели стек-машины с 64кбайт общей памяти, стеком, размещённым в ней (что естествественно) и растущим «от верхней границы вниз».
call, ret и iret
можно эмулировать,
Слово «атомарность» благородному сэру незнакомо.
И прерывание, бодренько вклинившееся в эмулируемую очередь инсрукций — распишет авторский продукт по всем испостясям.
Либо потребует кажный разик enable/disable int.
А что, по-Вашему, значит, что у «процессора есть стек»?
Основное назначение стека — хранение адресов возврата из процедур и прерываний, т.е. аппаратная поддержка рекурсивности вызовов, call, ret и iret (или их аналоги).
pop / push — оне чиста «вкусняшки».
Оддельный аппаратный стек мог быть организован, как минимум — ещё на древнем 580ИК80 ака i8080.
Паскаль изначально различал массивы и указатели «по дизайну».
Правда, там, в результате — были сложности с передачей массивов произвольного размера в процедуру.
Так вот, а в 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,
(Вики, наше всё)
Т.е. ценой внесения в язык высокоуровневых абстракций (в отличие от Си/С++) — становится ограничение на предельную размерность массива, которую необходимо изменять на уровне стандарта…
Мне кажется, что некорректно измерять JIT через time.
Э-ээ, правда?
Вы же для Си время компиляции не считаете?
Вы ещё время разработки предложите учитывать…
Программа на Си компилируется один раз — а запускается многократно, время компиляции «размазывается» по всем запускам.
Например, Fortran, относящийся к той же «возрастной группе», что и С, в некоторых специфических задачах более производителен.
Щито?
Фортран лет на двадцать старше Си — от чего не имеет ряда полезных фич.
Плюс «моделей ассемблера» существует множество, не сводимое к AT&T и Интел, GAS — это GNU assembler.
Для ассемблера Вы используете AT&T синтаксис — что довольно специфично, fasm и masm юзают Интел.
Последний в x86 вообще более распространён, для которого характерны заметно другие подходы в синтаксисе: — т.е. «доллары» и «проценты» там не используются.
Ну и вообще, в других ассемблерах в качестве маркера «непосредственного значения» может использоваться '#', регистры пишутся непосредственно, без «процента», а «разыменовывание указателя» (косвенное обращение к памяти) может так же обозначаться знаком '@'.
P.S. Да, когда-то регистры общего назначение так же именовались «свероперативным запоминающим устройством».
Жуткая АЧХ — ниже 2,5 кГц бузер практически не пищит.
Хотя пищалка, конечно…
Круто было-бы реализовать вывод «аналогового» звука — через ШИМ на сотню килогерц или поболе, хотя вопрос потянет ли это процессор.
А «просто» пищать меандром — не так интересно.
ДНК — это практически единственный способ хранения, который может существовать тысячу или даже миллион лет,
Ой, правда?
и ДНК древних окаменелостей тому доказательство. Молекула ДНК устойчива в окружающей среде, ученые даже нашли 300000-летнюю митохондриальную ДНК медведя и расшифровали ее.
А вот полноценную ДНК мамонта или саблезубого тигра до сих пор найти не могут.
Представьте, что вся человеческая история в виде текста, изображений, видео и аудио могут быть искусственно закодирована в молекуле ДНК и сохранена для наших потомков на тысячи лет.
Представил.
Вспомнил про мутации и онкологию.
И про то, что в живом организме — сохранением ДНК в неизменном виде активно занимаются специальные белковые подсистемы клетки.
Прафтаа?
Ну, ежели у Вас своё собственное определение понятия «процессор»…
У последнего?
И сколько VLIW команд исполняет одновременно?
И толку от трёх уровней стека?
А в чём ещё может программироваться процессор? — В итоге всё всегда сводится к «машинным кодам» в той или иной форме.
А Вы часто программируете микрокод процессора?
Всю жезнь эта трактовка была одинаковой — «архитектура процессора/ЭВМ предполагает реализацию стека». Различие промежду «в памяти» или «в процессоре» — никогда не делалось.
Вот в ЕС ЭВМ, как и у её прородителя — IBM System/360 стека действительно не было.
Нокак, сэр?
Сама концерция [микро]процессора предполагает некую шнягу, которая умеет вычислять и «делать программу» — но не имеет памяти.
Если внутри системы будет много памяти (несколько К, к примеру) — то с чего это всё будет называться «процессором», а не микроконтроллером (однокристалльной микро-ЭВМ на старые деньги)?
Ифчом разница при программировании процессора?
Ой.
Инструкции не прерываются, они — атомарны by design.
фкакое «какбыло»?
Эмуляция инструкции call может выглядеть примерно так:
inc SP
mov (SP),IP
add (SP),offset __next
jmp <my_func>
__next:
(Ассемблер условный, скобочки — косвенная адресация, offset — смещение до метки.)
Прерывание между первой и второй командой — даёт нам мусор в стеке, между третьей и четвёртой — пропуск вызова функции.
Возврат из функции или прерывания — при не-атомарности тоже нарисуют цену на дрова.
Хорошо хоть не Фортран-66.
Что замечено, опять же, на личном опыте:
1. Редкая программа используется более чем одним человеком. Есть всего пара примеров в поле зрения, где программы написаны давно, и потихоньку модифицируются.
Ну тогда вообще непонятен предмет разговора.
Люди не умеют программировать ни на Си/С++, на на чём другом.
Уйдут эти люди — придут другие, которые будут юзать Си, питон или Матлаб с Октавой.
Для МКЭ — Ансис или Саломе.
Ну и т.д.
А все разговоры о «преимуществах Фортрана» — это так, рассуждения для бедных.
Везде.
Ой, шо?
Здесь только что били пяткой в грудь, шо Фортран — круть немерянная по сравнению с Си — а теперь «ограничение вполне уместно»?
Фкаких «физических»?
Откройте для себя понятие фазового пространства.
Для материальной точки — это будет шесть измерений, для протяжённого тела (с вращениями) — уже девять.
Массив таких тел… ой.
Обсчёт электромагнитного поля — две векторные величины в каждой точке, шесть отсчётов на точку трёхмерного пространства.
Приращения полей — по три отсчёта на каждую ось для обоих полей.
Т.е. это всё влёгкую улетает далеко и за три, и даже за пятнадцать измерений.
Нонафига, сэр?
Форт by default исходит из модели стек-машины с 64кбайт общей памяти, стеком, размещённым в ней (что естествественно) и растущим «от верхней границы вниз».
Слово «атомарность» благородному сэру незнакомо.
И прерывание, бодренько вклинившееся в эмулируемую очередь инсрукций — распишет авторский продукт по всем испостясям.
Либо потребует кажный разик enable/disable int.
Зарадибога.
Основное назначение стека — хранение адресов возврата из процедур и прерываний, т.е. аппаратная поддержка рекурсивности вызовов, call, ret и iret (или их аналоги).
pop / push — оне чиста «вкусняшки».
Оддельный аппаратный стек мог быть организован, как минимум — ещё на древнем 580ИК80 ака i8080.
Он будет получать билды с «прогретым» кодом?
Там массивы индексируются круглыми скобочками.
Хотя и в фортране всё не так однозначно…
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
(цитата из Вики)
Правда, там, в результате — были сложности с передачей массивов произвольного размера в процедуру.
Таки int * const a, что даёт некоторые нюансы.
Вообще, что характерно:
FORTRAN 77 (1980)[править | править вики-текст]
[...]
Увеличена максимальная размерность массива с 3 до 7. Сняты ограничения на индексы массива.
Усовершенствованы и расширены возможности работы с процедурами.
Fortran 2008 (2010)[править | править вики-текст]
Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran)[5][11]. Также предполагается увеличить максимальную размерность массивов до 15,
(Вики, наше всё)
Т.е. ценой внесения в язык высокоуровневых абстракций (в отличие от Си/С++) — становится ограничение на предельную размерность массива, которую необходимо изменять на уровне стандарта…
Ой.
Э-ээ, правда?
Вы ещё время разработки предложите учитывать…
Программа на Си компилируется один раз — а запускается многократно, время компиляции «размазывается» по всем запускам.
Щито?
Фортран лет на двадцать старше Си — от чего не имеет ряда полезных фич.
Плюс «моделей ассемблера» существует множество, не сводимое к AT&T и Интел, GAS — это GNU assembler.
Для ассемблера Вы используете AT&T синтаксис — что довольно специфично, fasm и masm юзают Интел.
Последний в x86 вообще более распространён, для которого характерны заметно другие подходы в синтаксисе: — т.е. «доллары» и «проценты» там не используются.
Ну и вообще, в других ассемблерах в качестве маркера «непосредственного значения» может использоваться '#', регистры пишутся непосредственно, без «процента», а «разыменовывание указателя» (косвенное обращение к памяти) может так же обозначаться знаком '@'.
P.S. Да, когда-то регистры общего назначение так же именовались «свероперативным запоминающим устройством».
Хотя пищалка, конечно…
Круто было-бы реализовать вывод «аналогового» звука — через ШИМ на сотню килогерц или поболе, хотя вопрос потянет ли это процессор.
А «просто» пищать меандром — не так интересно.
Ой, правда?
А вот полноценную ДНК мамонта или саблезубого тигра до сих пор найти не могут.
Представил.
Вспомнил про мутации и онкологию.
И про то, что в живом организме — сохранением ДНК в неизменном виде активно занимаются специальные белковые подсистемы клетки.