OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 18 Апрель, 2024 08:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Пятница, 07 Июнь, 2019 11:00 

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
ilovb писал(а):
Оставлю тут информацию, возможно кому-то пригодится. Если я правильно понял, то разница таки в SSE.
И дело не в векторных операциях, а в количестве используемых регистров.
Другими словами компилятор BB в данном случае выдает более медленный код не потому что он не оптимизирующий,
а потому что не использует доступные ресурсы ЦП (XMM регистры) и делает слишком много обменов с памятью (кэшем).

Это гипотеза, но мне мерещится что BB можно ускорить на типовых числодробильных задачах примерно в 2 раза если научить его использовать xmm регистры. Еще можно ускорить переходом на 64 бита (там еще больше регистров, но по сравнению с 32+xmm эффекта много не будет)


"Количеством используемых регистров" , в лучшую сторону, отличался:
XDS Modula-2/Oberon-2

(
или см. ранее про "Intel C++"
)


P.S.

ilovb писал(а):
Код:
   LOOP
      w := ops[ip];
      
      b4 := w MOD 0100H;
      b3 := w DIV 0100H MOD 0100H;
      b2 := w DIV 010000H MOD 0100H;
      b1 := w DIV 01000000H MOD 0100H;
         
      CASE b1 OF
      |Get: reg[b2].Set(mem[b4]);
      |Set: mem[b4].Set(reg[b2]);
      |Add: reg[b2].SetReal(reg[b3].Num() + reg[b4].Num());
      |Jmp: ip := b4;
      |Jgt: IF reg[0].Num() > reg[1].Num() THEN ip := b4 END;
      |End: EXIT;
      END;
      INC(ip);
      
   END;
   



Пример на Modula-3 :

Код:
TYPE
  SymCode = BITS 9 FOR [0..262];
  (* symbol code:  0 .. 261
     set default:  262 *)

  Action = BITS 6 FOR [0..32];
  (* error:        -1   (not stored in table)
     shift:        1 .. 10
     accept:       11
     reduce:       12 .. 21
     shift&accept: 22
     shift&reduce: 23 .. 32  *)

  StateRef = BITS 5 FOR [0..28];
  (* no more:      0
     next state:   1..28 *)

  S = RECORD
    key: SymCode;
    action: Action;
    next: StateRef;
  END;




Код:
        WITH p=stack.ptr, a=stack.a, v=symbol.value, l=Rules[action].length DO
          CASE action OF
          | 12 => VAR w: expr := NIL;
            p1:expr:=a[p-1].value.value;
            BEGIN self.paren_expr(w, p1); v:=w; END;
 . . .
          | 20 => VAR w: expr := NIL;
            p1:STRING:=a[p].value.value;
            BEGIN self.string_expr(w, p1); v:=w; END;
          | 21 => VAR w: expr := NIL;
            p1:CHAR_RANGE:=a[p].value.value;
            BEGIN self.charRange_expr(w, p1); v:=w; END;
          ELSE
            <* ASSERT FALSE *>
          END;
          FOR i := p - l + 1 TO p DO a[i].value.value.discard(); END;
          DEC(p, l);
          curState := a[p].state;
        END;
        DebugState("popping to state");
        symbol.code := Rules[action].returnCode;
        skipTokenGets := 2;


Аналог механизма Modula-3 'BITS' есть и в ADA.

На что можно рассчитывать в языках программирования, "участниках гонки для решения конкретной задачи",
из тех "что под рукой", и которые Борис "готов использовать"?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB