Project

General

Profile

Actions

Task #4094

closed

[template] Отладка шаблона Euclide

Added by Alexander Kamkin over 11 years ago. Updated over 10 years ago.

Status:
Closed
Priority:
High
Assignee:
Andrei Tatarnikov
Category:
-
Target version:
Start date:
04/10/2013
Due date:
04/30/2014
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:
140417

Description

Выяснить причину зацикливания и устранить (возможно с помощью Андрея).

Actions #1

Updated by Andrei Tatarnikov over 11 years ago

Проблема 1: FIXED - Revision r1188

Неправильная конкатенация буферов.

При трансляции конструкций типа:

carry::ALU_OUT = GPR[src2] + src3;

(где "::" означает конкатенацию: carry - higher part, ALU_OUT - lower part) получается Java код типа:

carry.access().concat(ALU_OUT.access())

Метод concat неправильно объединяет буферы. Получается, что: carry - lower part, а ALU_OUT - higher part.

Должно быть наоборот.

Проблема 2: FIXED - Revision r1189

Проблема при симуляции следующего шаблона:

CMP blank, REG(0), register1
SUB greaterThan, setsOff, REG(0), REG(0), register1
SUB lessThan,    setsOff, REG(1), REG(1), register0

Выполняются обе команды SUB (обе изменяют значение регистров), хотя должна выполняться только одна, а вторая не выполнять никаких действий. Похоже, что-то нет с флагами, которые выставляет CMP или с проверкой этих флагов.

Проблема может быть в спецификации (Sim-nML) или в API модели. Нужно разбираться.

Похоже, что-то к коде инструкции CMP не чисто (Sim-nML). Нужно разбираться.

Нашёл проблему. Спецификация условия greaterThan отличалась от, того что написано в ARM Reference Manual.

Actions #2

Updated by Andrei Tatarnikov over 11 years ago

После исправления Sim-nML спецификации зацикливание прекратилось (я обновил примитивы условий greaterThan и lessThan в соответствии с ARM Reference Manual). Корректность остальных аспектов работы алгоритма Евклида нужно проверять.

Actions #3

Updated by Andrei Tatarnikov over 11 years ago

  • % Done changed from 0 to 40
Actions #4

Updated by Andrei Tatarnikov over 11 years ago

Вообще зацикливание всё же не совсем пропало - пару раз удалось воспроизвести. Но теперь в большинстве случаев цикл завершается. Нужно отлаживать дальше.

Actions #5

Updated by Alexander Kamkin over 11 years ago

  • Assignee changed from Artemiy Utekhin to Andrei Tatarnikov
Actions #6

Updated by Andrei Tatarnikov almost 11 years ago

  • Status changed from New to Open

Сейчас arm_demo_euclid.rb не работает. Не реализованы некоторые операции над битовыми векторами. До реакторинга IR, эти операции выполнялись над встроенными типами Java. Нужно дореализовать все операции или вернуть старое поведение.

Actions #7

Updated by Alexander Kamkin over 10 years ago

  • Due date set to 04/30/2014
  • Priority changed from Normal to High
  • Target version set to 2.0
Actions #8

Updated by Andrei Tatarnikov over 10 years ago

  • Status changed from Open to Resolved
  • % Done changed from 40 to 100

Нашел ещё одну причину зацикливания и исправил её в r1876. Теперь вроде бы всё нормально.

Проблема была в следующем: Шаблон описывает программу, которая ищет наибольших общий делитель для двух случайных чисел. Если одно из них равно нулю, что поиск решения не имеет смысла (результат не определён). Алгоритм не предусматривает этот случай и программа зацикливается. Исключил 0 из возможных значений.

Также разделил данный пример на два и описал в комментариях:

  1. arm_demo_euclid.rb (простой вариант - ищет решение один раз)
  2. arm_demo_euclid_loop.rb (исходный вариант - ищёт решение пять раз, дублирует код при помощи цикла, даёт длинную программу с пятью метками)
Actions #9

Updated by Alexander Kamkin over 10 years ago

  • Status changed from Resolved to Closed
  • Published in build set to 140417
Actions

Also available in: Atom PDF