ha

Архиватор HA на «Эльбрусе»

Мы тут «Эльбрус» решили оживить, который был куплен несколько лет назад для одного из проектов. Проект закончился и компьютер с тех пор лежал на складе.

Внутри стоит восьмиядерный процессор «Эльбрус-8C» 1,3ГГц. Он тогда-то был экзотикой, а после санкций стал буквально раритетом.

Я, чтобы прикинуть его производительностью, решил попробовать повторить на нём свой недавний эксперимент — скомпилировать архиватор ha и засечь время, — за сколько он на этой машине сожмёт «Дум».

Там довольно старая операционка стоит с компилятором gcc 7.3.0 и нет cmake. Пришлось переписать компиляцию на make и компилировать тем, что есть. Наверное новый компилятор соптимизировал бы код лучше, но взять его некуда — надо переставлять операционную систему, а это целая история.

Скриншот консоли программы HA 0.999β (1995, Harri Hirvola) — создание архива doom.ha с упаковкой файлов doom.exe, doom.wad и др. методами HSC/ASC; завершено за 18.77 сек.

На «Эльбрусе» «Дум» сжался за 18,77 секунды против 4,3 секунды на моём ноутбуке с M3 Max. Разница более чем в четыре раза. Я даже не знаю — много это или мало. Надо, наверное, посмотреть на каком-нибудь среднем компьютере, чтобы оценить результат.

2 комментария

Архиватор HA и современные компьютеры

Узнал сегодня о существовании архиватора lzip — им сжат исходный код свежей версии утилиты bc. Какой-то современный архиватор из мира Линукса, я не сталкивался ни разу.

Пока ехал домой, мысли крутились вокруг архиваторов и как-то незаметно докрутились до воспоминаний об архиваторе ha эпохи ДОС. Он тогда сжимал лучше всех, но делал это очень медленно. Я как-то уже вспоминал, что над «Думом» он трудился несколько часов. Это были ранние 90-е.

Я подумал — было бы интересно скомпилировать этот архиватор под мой процессор M3 Max, который сейчас считается довольно мощным, и посмотреть за какое время на нём сожмётся «Дум».

Скриншот терминала: архиватор HA 0.999β (1995, Harri Hirvola) сжимает файлы doom.ha, включая doom.exe и doom.wad, показывая прогресс упаковки и время выполнения.

Ответ — «Дум» теперь сжимается за 4,3 секунды! Надо будет повторить эксперимент лет через 10.

Кстати, результаты по коэффициенту сжатия тоже довольно достойные — сжалось чуть лучше, чем утилитой gzip и чуть хуже, чем bzip2. Но lzip, что было для меня полной неожиданностью, оставил всех далеко позади:

-rw-r--r--   1 bolk  staff   3688370 May 29 21:37 doom.tar.lz
-rw-r--r--   1 bolk  staff   5226359 May 29 21:39 doom.tar.bz2
-rw-rw-r--   1 bolk  staff   5312857 May 29 21:35 doom.ha
-rw-r--r--   1 bolk  staff   5497638 May 29 21:39 doom.tar.gz

4 комментария

HA

Сначала немного не по теме.

Все файлы на виртуалку я переношу через образ дискеты и перво-наперво несколько слов о том как создать образ дискеты на «Маке». Мне необходимо куда-то записать эту информацию, иначе она у меня постоянно теряется. Из командной строки это делается так:

dd if=/dev/zero of=floppy.img bs=1024 count=1440
diskutil eraseVolume MS-DOS VOLUME `hdiutil attach -nomount floppy.img`
hdiutil attach floppy.img

Последняя команда смонтирует получившийся образ, после чего можно записать туда любые файлы.

Как справедливо напомнили читатели в комментариях к моему эксперименту c ARJ, в 90-е чемпионом по сжатию был архиватор HA (с алгоритмом PPM). Он был очень медленным по тем временам (помню DOOM сжимался за часы) и поэтому не слишком распространённым, но я с ним сталкивался.

Скриншот командной строки: утилита HA 0.9991a сжатия файла FILE.TXT методом HSC (23,7%), создание архива FILE.HA, затем вывод списка директории C:\ через dir.
Успехи архиватора HA — 23,7% исходного объёма

Для тестирования я выбрал форк архиватора, с которым сталкивался во времена интереса к языку программирования Си-​-. Форк быстрее оригинала в 1,5 раза, впрочем, как оказалось, сейчас это вряд ли имеет значение — сжатие файла из вчерашнего теста заняло малозаметное время.

214962-байтный файл сжался в 51088 байт, это 23,8% от исходного объёма. Это лучше современного xz с его 25,4 процентами, но по-прежнему хуже архиватора Compressia с его космическими 20,6%!

3 комментария

99 бутылок: C-​-, WSH

12. Sphinx C-​-. Есть язык Си, есть Си++, а есть, оказывается, Си-​-. Язык, занимающий промежуточное положение между Си и ассемблером. Его автором является Peter Cellik (Канада), в данный момент поддержкой и расширением синтаксиса языка занимается Михаил Шекер (Россия).

Язык мне показался обычным ассемблером, с внедрёнными элементами синтаксиса Си. Этакий навороченный макроассемблер. Попался бы мне такой лет так пять назад — оторвал бы с руками, а сейчас… Но, хотя на ассемблере теперь я пишу только мелочь, а мелочь лучше писать без применения всяческих прилад, стирать все же не буду — вдруг пригодится.

P.S. Кстати, на страничке языка можно скачать архиватор HA, переписанный на Си-​-. Работать он после такой модификации стал в полтора раза быстрее. Заслуга языка и компилятора или автора модификации?

Программа, выводящая песню о пиве.

?use80486
?include "WRITE.h--"

void PRINTBEER ()
{
    $PUSH AX;
    IF (AX) WRITEWORD (AX); ELSE WRITESTR ("No");
    WRITESTR (" bottle");
    $POP AX;
    IF (AX<>1) WRITE ('s');
    WRITESTR (" of beer");
}

void main()
byte bott;
byte beer = 99;
{
    WHILE (beer)
    {
        PRINTBEER (beer);
        WRITESTR  (" on the wall, ");
        PRINTBEER (beer);
        WRITESTR  (".\nTake one and pass it around,\n");
        beer--;
        PRINTBEER (beer);
        WRITESTR  (" on the wall.\n\n");
    };

    WRITESTR ("No more bottles of beer...\n");
    WRITESTR ("Go to the store and buy some more...\n");
    WRITESTR ("99 bottles of beer.");

    AX = 0x4C;
    $INT 0x21;
}

13. Windows Script Host — технология, заботливо упрятанная в недра вашей Windows заботливой компанией Microsoft. Скрипт написан с применением второй версии технологии, которая распространяется вместе с Windows 2000. Впрочем, ничего не мешает поставить его на любую другую ОС этого семейства. Базируется она на JScript или VBScript и позиционируется как замена пакетному (batch) языку DOS.

Способ запуска: wscript.exe beer.js. Во время выполнения настоятельно не рекомендуется переключать окна.

Скрипт, выводящий песню о пиве (beer.js).

function PrintBeer(i)
{
    return (i?i:"No")+" bottle"+(i-1?'s':'')+" of beer"
}

WshShell = WScript.CreateObject("WScript.Shell")
with (WshShell)
{
    Run("notepad.exe")
    WScript.Sleep(100)
    AppActivate("Untitled - Notepad")

    for (i = 99; i>0;)
    {
        SendKeys (PrintBeer (i)+" of beer on the wall, ")
        SendKeys (PrintBeer (i)+".~")
        SendKeys ("Take one and pass it around,~")
        i--
        SendKeys (PrintBeer (i)+" on the wall.~~")
    }

    SendKeys ("No more bottles of beer...~")
    SendKeys ("Go to the store and buy some more...~")
    SendKeys ("99 bottles of beer.")
}


Оставить комментарий