Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 09:34

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Вычисление преобразования Фурье на процессоре SEAforth40
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Одна из наиболее насущных проблем при программировании ядер SEAforth40 - относительно небольшой объем оперативной памяти, вследстии чего, приходится постоянно искать компромис между привычным стилем программирования на Форте - определение "мелких" слов и их последующий вызов и "ассемблерным" стилем - прямой код + макровставки. Иногда ценой "красивого" структурированного кода можно выиграть пару-тройку свободных слов.
Контроль размера кода лежит на программисте, т.к. компилятор о выходе за границу 64х слов скромно умалчивает ( по крайней мере та версия, что установлена у меня).
Есть и альтернативный выход - исполнение кода с одного (или нескольких) из портов, объем линейной программы для ядра при этом может дорасти слов до 250-ти--300, но ценой снижения скорости исполнения (где-то 1,5--2 раза)
Сообщение Добавлено: Сб дек 26, 2009 14:18
  Заголовок сообщения:   Ответить с цитатой
для N=16 конвейер короткий получается. Т.е. у вас "степень" параллелизма 4. А влоб было 16. А эффективность быстрого преобразования для такой размерности выше ломового всего в три раза.

Т.е. 3*4<16

Все логично.

N увеличивайте. Или/и этапы распараллеливайте.
Сообщение Добавлено: Чт дек 17, 2009 23:54
  Заголовок сообщения:   Ответить с цитатой
распараллеливание ручное в данном случае.
Сообщение Добавлено: Чт дек 17, 2009 15:25
  Заголовок сообщения:   Ответить с цитатой
хм... не может ли быть так, что распараллеливание - само настолько сложный алгоритм, что приносит пользу только если его "выполнил сложный компилятор зараннее" а в случае с простым компилятором форта ... ?
Сообщение Добавлено: Чт дек 17, 2009 14:17
  Заголовок сообщения:   Ответить с цитатой
forther писал(а):
А быстрое преобразование Хартли будет?

что-то черновые результаты по быстрому алгоритму Хартли не очень радуют, по крайней мере для выбранной на данный момент стратегии: задействовано всего 7 ядер, распараллеливание конвейерное по этапам, локализация вычислений в ядрах (одно или два ядра выполняют преобразования этапа - или расчёт бабочек, или перемежение данных, или генерацию индексов).
по времени получается пока от прихода сигнала до выдачи спектра Хартли приходит около 10000 тиков (ну или примерно 14 мкс). на последний этап уходит порядка 6000 тиков (при удачном раскладе можно попробовать уложиться в 2000-3000 тиков ), что и определит скорость преобразования в непрерывном режиме работы (для метода грубой силы получалось почти в два раза быстрее, да и алгоритмы работы ядер по-проще). :-)
Сообщение Добавлено: Чт дек 17, 2009 14:10
  Заголовок сообщения:   Ответить с цитатой
И, как вы и сами наверно уже догадались, было бы ошибкой тащить это в цикл, чтоб поделить на 16.

Код:
: d16/
  $3fff0 # and a! +*
  +*    +*    +*
  a@    ;
Сообщение Добавлено: Ср дек 09, 2009 10:01
  Заголовок сообщения:   Ответить с цитатой
хм..... не в пример проще :-)
Сообщение Добавлено: Вт дек 08, 2009 19:39
  Заголовок сообщения:   Ответить с цитатой
почти

: d2/ 2/ 2* a! +*
a@ ;
Сообщение Добавлено: Вт дек 08, 2009 18:56
  Заголовок сообщения:   Ответить с цитатой
forther писал(а):
diver писал(а):
заменить деление сдвигом (но баловаться со сдвигами чисел двойной точности то ещё удовольствие)


Показать "ответ" или сами попробуете? Есть (на мой взгляд) элегантный вариант d2/. Конечно, как задача для всех она не подходит, потому что завязана на специфику SEAforth. Но вы, если подумаете, то сможете найти это решение.

примерно как-то так :-) :
Код:
: d2/ ( dh dl -- d2/h d2/l )
\ используем особенности реализации команды +*
  a! dup push \ a=dl ; -- dh ; r: -- dh
  dup xor \ -- 0 ; a=dl r: -- dh
  pop \ -- 0 dh ; a=dl r: --
  . +*  \ -- 0 dh2/ ; a=мл.бит_dh_dl/2;
  push  \ -- 0 ; a=мл.бит_dh_dl/2; r: -- dh/2
  drop pop a@ \ -- d2/h d2/l
;
Сообщение Добавлено: Вт дек 08, 2009 12:55
  Заголовок сообщения:   Ответить с цитатой
:-) побалуюсь ещё.
Сообщение Добавлено: Пн дек 07, 2009 23:34
  Заголовок сообщения:   Ответить с цитатой
diver писал(а):
заменить деление сдвигом (но баловаться со сдвигами чисел двойной точности то ещё удовольствие)


Показать "ответ" или сами попробуете? Есть (на мой взгляд) элегантный вариант d2/. Конечно, как задача для всех она не подходит, потому что завязана на специфику SEAforth. Но вы, если подумаете, то сможете найти это решение.
Сообщение Добавлено: Пн дек 07, 2009 23:01
  Заголовок сообщения:   Ответить с цитатой
forther писал(а):
А быстрое преобразование Хартли будет?

Если в "бабочках" разберусь :-).
Сообщение Добавлено: Пн дек 07, 2009 23:01
  Заголовок сообщения:   Ответить с цитатой
А быстрое преобразование Хартли будет?
Сообщение Добавлено: Пн дек 07, 2009 22:51
  Заголовок сообщения:   Ответить с цитатой
mOleg, ссылки на источники завтра добавлю и на преобразования и на доки по процессору. С кпк это не очень удобно . :-)

forther писал(а):
Здорово! Большое спасибо. А без деления на константу нельзя было обойтись?


В принципе можно попробовать, варианты могут быть следующие:
- учесть константу при задании таблиц cas(vt);
- работать с операндами такой длиры, чтобы результат произведения был не более 18-ти бит (в принципе для случая обработки сигналов с АЦП ситуация реальная);
- заменить деление сдвигом (но баловаться со сдвигами чисел двойной точности то ещё удовольствие);
- дописать умножение 2-словного числа на 1-словное.

Если рассматривать в плане выигрыша по времени - реальнее вариант второй. Остальные дадут порядка сотни тактов.
Сообщение Добавлено: Пн дек 07, 2009 22:30
  Заголовок сообщения:   Ответить с цитатой
Здорово! Большое спасибо. А без деления на константу нельзя было обойтись?
Сообщение Добавлено: Пн дек 07, 2009 21:27

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


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