Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт ноя 22, 2018 00:57

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Скорость исполнения кода
СообщениеДобавлено: Сб окт 13, 2018 10:50 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 08, 2018 10:48
Сообщения: 4
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Я (новичок в программировании FASM и SPF) правильно понимаю, что SPF устроен так, что очень часто использует прыжки с одной части кода в другую (от слова к слову), а потому полностью рушит ускорение исполнения кода с помощью конвейера процессора? И где можно просмотреть SPF_FAQ?

_________________
Я новичок, который ожидал развитую инфраструктуру Forth, но не нашёл её, и решил сделать в этом первый шаг! JNI, я иду к тебе!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Сб окт 13, 2018 11:54 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 655
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
:?:
Переход от одного слова к другому в СПФ это обычный вызов с помощью CALL (ассемблер). В СПФе всё нативно в этом плане без заморочек.

Цитата:
а потому полностью рушит ускорение исполнения кода с помощью конвейера процессора?

это как?

Цитата:
Где можно просмотреть SPF_FAQ?

\docs\intro.ru.html

Ещё в поставке СПФ есть справочник \docs\papers

Или спрашивайте тут на форуме. Поможем, чем сможем

_________________
Цель: сделать 64-битную Нову под Винду



За это сообщение автора Victor__v поблагодарил: Askalite
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Сб окт 13, 2018 15:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Askalite писал(а):
прыжки с одной части кода в другую (от слова к слову), а потому полностью рушит ускорение исполнения кода с помощью конвейера процессора?

Современные процессоры устроены не так просто. Для конвейеризованного процессора действительно важно, чтобы команды выполнялись последовательно, потому что за командой jmp, вошедшей в конвейер, тянутся еще команды, которые будут уже не нужны после перехода. Но если говорить о суперскалярной архитектуре (современные x86), то в них как раз анализируется конвейер, и если туда прочитана команда безусловного перехода, то чтение следующих команд начинается уже с нового адреса. Это неплохо работает даже для условных переходов https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2



За это сообщение автора Hishnik поблагодарил: Askalite
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Вт окт 16, 2018 09:28 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 08, 2018 10:48
Сообщения: 4
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Victor__v писал(а):
:?:
Переход от одного слова к другому в СПФ это обычный вызов с помощью CALL (ассемблер). В СПФе всё нативно в этом плане без заморочек.


Допустим два слова:

А Б

Интерпретатор идёт к первому слову А, предварительно в стек возрата адрес слова Б, а потом после выполнения делает jmp по неизвестному месту, из стека аозвратов, что по идее должно сбивать предсказание, но ваши ответы и Hishnik всё мне объяснили, даже больше чем вся документация, что я нарыл по SPF. А теперь к другому:

http://spf.sourceforge.net/docs/src.ru.html

EAX - вершина стека данных
EBP - указатель на стек данных (т.е. [EBP] - второй элемент стека данных)
Стек параметров адресуется регистром EBP, вершина стека хранится в EAX
Дно: S0

1) Я так понимаю стек параметров и данных одно и тоже?
2) Чем отличается EAX от EBP?
3) [EBP] это указатель на второй элемент или значение второго элемента?

Было бы неплохо объяснить и пример этого кода:
Код:
CODE DUP ( x -- x x )
    LEA EBP, -4 [EBP]
    MOV [EBP], EAX
    RET
END-CODE


Особенно непонятен момент с тем, где здесь работа с адресами/указателями, а где со значениями. (Я очень плохо знаю ASM)

_________________
Я новичок, который ожидал развитую инфраструктуру Forth, но не нашёл её, и решил сделать в этом первый шаг! JNI, я иду к тебе!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Вт окт 16, 2018 11:41 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 655
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Начнём с того, что в СПФ при вызове какого-либо слова интерпретатор перестаёт работать.
К примеру,
Код:
: TEST 10 . 20 . 30 . CR ." HELLO WORD" CR ;
TEST

1-я строчка: Создаём определение. нас это не интересует.
2-я строчка: Теперь вызываем слово из режима интерпретации.
В этом случае INTERPRET находит указатель на начало кода слова TEST и передаёт управление этому слову. Интерпретатор до завершения слова TEST никак не участвует.

Цитата:
Допустим два слова:

А Б

В данном случае в режиме интерпретации
Сначала выполнится слово A потом управление перейдёт на INTERPRET, а потом на Б и снова на интерпретатор

Код:
предварительно в стек возрата адрес слова Б, а потом после выполнения делает jmp по неизвестному месту

Интересная схема, но замудрённая. В известных мне фортах всё проще.

Цитата:
1) Я так понимаю стек параметров и данных одно и тоже?

Да, обычно под этим понимается одно и тоже.

Цитата:
2) Чем отличается EAX от EBP?
3) [EBP] это указатель на второй элемент или значение второго элемента?

Это разные регистры :D
в регистре EAX хранится первый элемент стека данных
а в EBP указатель на второй элемент
соот-но в 4 [EBP] хранится третий элемент и т. д.

По коду DUP
Наверно вас смущает инструкция LEA?
На мой взгляд самая лучшая инструкция в интеле
Она позволяет стабильно за 1 такт (поправьте, если ошибаюсь) загрузить в регистр сумму значений других регистров

Код:
LEA EBP, -4 [EBP]

В данном случае EBP = -4 + EBP

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Ср окт 17, 2018 04:58 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 08, 2018 10:48
Сообщения: 4
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Victor__v писал(а):
Это разные регистры :D
в регистре EAX хранится первый элемент стека данных
а в EBP указатель на второй элемент
соот-но в 4 [EBP] хранится третий элемент и т. д.


8 7 6 5 4 3 2 1 0 [адреса которые уменьшаются по росту стека]
7 0 1 2 3 4 5 0 r [значения где r — рандом]

7:0— нижний элемент стека 2:5 — верхний элемент
Итак:
S0 хранит адрес 8
[8] хранит значение 7

EAX хранит значение 5
EBP хранит адрес 3, а [3] имеет значение 4

Что хранит [EBP]? Адрес? Значение? "4 [EBP]" это какое-то отдельное слово где хранится 3 элемент?

Victor__v писал(а):
Наверно вас смущает инструкция LEA?

Код:
LEA EBP, -4 [EBP]

В данном случае EBP = -4 + EBP


Нет, LEA замечательная инструкция, меня смутил "-4 [EBP]", я ожидал увидеть [EBP-4] (изучаю синтаксис fasm).

_________________
Я новичок, который ожидал развитую инфраструктуру Forth, но не нашёл её, и решил сделать в этом первый шаг! JNI, я иду к тебе!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Скорость исполнения кода
СообщениеДобавлено: Ср окт 17, 2018 14:15 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 655
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Askalite писал(а):
Нет, LEA замечательная инструкция, меня смутил "-4 [EBP]", я ожидал увидеть [EBP-4] (изучаю синтаксис fasm).


В ассемблере и дизассемблере СПФа просто такой синтаксис. Вот и всё.

Так, теперь по стеку
По элементам:
1 EAX
2 [EBP]
3 [EBP+4]
4 [EBP+8]
и т. д.

Лучше сейчас этим не заморачиваться.
Тут как никак всё упирается в указатели.
Даже в сях указатели изучаются не сразу.

Наберётесь опыта всё станет понятнее.

_________________
Цель: сделать 64-битную Нову под Винду



За это сообщение автора Victor__v поблагодарил: Askalite
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB