waqur: (Евро)
[personal profile] waqur
Когда-то компилятор Watcom был лучшим в мире, с точки зрения скорости работы результирующего кода. В частности, им были скомпилированы такие шедевры своего времени как Duke Nukem 3D, Warcraft II и Doom.

Сейчас ситуация изменилась, с распространением 64-разрядных процессоров, да и 32-разрядных с SSE2-регистрами, в которые gcc автоматически делает предвыборку из памяти, если задать соответствующий ключик -march. Все эти фокусы старичку-ваткому не под силу.

Но даже для сборки под более широкий класс процессоров (Open)Watcom использовать уже не следует.

Смотрите:

/**
 *
 *  @brief  Очистить экран
 *
 */
void  UI_ClearScreen()
0000                          void near UI_ClearScreen():
0000    B8 00 80 0B 00            mov         eax,0x000b8000
0005    8D 80 00 00 00 00         lea         eax,[eax]
000B    8D 52 00                  lea         edx,[edx]
000E    8B DB                     mov         ebx,ebx

{
    unsigned short*  screen_buffer = (unsigned short*)VIDEO_MEMORY_ADDR;
    for( unsigned int  i = 0; i < TEXT_ROW_COUNT * TEXT_COLUMN_COUNT; ++i )
        screen_buffer[i] = 0x0720;
0010                          L$1:
0010    66 C7 00 20 07            mov         word ptr [eax],0x0720
0015    83 C0 02                  add         eax,0x00000002
0018    3D A0 8F 0B 00            cmp         eax,0x000b8fa0
001D    75 F1                     jne         L$1

}
001F    C3                        ret



В 486-х и первых пентиумах был такой недостаток дизайна - AGI (Address Generation Interlock). Это затык работы конвейера, когда одна команда работает с памятью с использованием адресации по базе или индексу (например mov по адресу 0x10), а предшествующая ей пишет в тот же регистр (например mov по адресу 0).

Три нопа по адресам 0x05, 0x0B, 0x0E - это "привет из 90-х", контрмеры против AGI. В современных процессорах (Pentium Pro+) уже нет AGI, а вот нопы по-прежнему кушают свои такты.

Лучше бы компилятор сделал здесь развёртку цикла.

Date: 2011-06-02 09:38 pm (UTC)
From: [identity profile] addicted-to-q.livejournal.com
Я всегда думал, что игры под DOS на Watcom пишут только из-за встроенной поддержки защищенного режима.

Date: 2011-06-02 09:56 pm (UTC)
From: [identity profile] waqur.livejournal.com
Да, она там есть, через DOS-расширитель DOS4G/W или аналоги (DOS32A, PMODE/W, ZRDX, тысячи их).

Но также для своего времени это был выдающийся оптимизирующий компилятор, очень тесно привязанный к особенностям архитектуры x86.

Особенно на фоне тогдашних конкурентов - Microsoft Quick C и Borland C++. У них качество генерации кода было ниже плинтуса.

Впрочем, даже сейчас watcom иногда обходит gcc по скорости работы сгенерированного кода. От icl и msvc он безнадёжно отстал, а из открытых компиляторов пальму первенства у gcc постепенно отбирает llvm, у которого и промежуточная оптимизация лучше, и язык описания машин мощнее, и промежуточное представление выбрано очень удачно - элегантно позволяет обойти ряд серьёзных проблем, и есть LTO, в общем окончательные похороны ваткома уже не за горами.

Date: 2011-06-03 03:47 am (UTC)
From: [identity profile] cd-riper.livejournal.com
по-моему, ни Borland, ни M$ не умел в те годы собирать 32-х разрядный код, работающий в защищенном режиме 386-го процессора.

а насчет нынешней ситуации -- создание хорошо оптимизирующего плюсового компилятора это чертовски затратное дело. кому сегодня нужен еще один компилятор?

Date: 2011-06-03 06:45 am (UTC)
From: [identity profile] waqur.livejournal.com
кому нужен -- дело в том, что GCC лицензируется под GPL, а это запрещает связывать его с закрытым кодом -- даже фриварным -- в один продукт, например такой как IDE

таким образом, индустрии нужен компилятор под BSD-лицензией, на базе которого можно делать производные работы с закрытыми исходниками

Date: 2011-06-03 06:53 am (UTC)
From: [identity profile] waqur.livejournal.com
т.е. GPLная свобода - она примерно такая же, как та свобода, которая подразумевалась в нацистских концлагерях ободряющей надписью на входе "arbeit macht frei" - в ней есть неизбежный принудительный элемент

нужен более свободный компилятор

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Автор стиля

Развернуть

No cut tags
Page generated 2026-03-01 10:22 am
Powered by Dreamwidth Studios