bmstu-iu9 / bmstu-iu9/refal-5-lambda

Проблемы с производительностью clock() на macOS и Linux

Open
#206 43 comments 0 reactions 1 assignee Claimed by @Mazdaywik View on GitHub
bug
Dominant language
C++
Stars
97
Forks
40
PR merge metrics
No merged PRs in 30d

Description

Ситуация
======
Заметил на компьютере Дарьи Сухомлиновой (@StrixSeloputo), что у неё на макбуке цикл самоприменения (`makeself.sh`) выполняется 2–2,5 минуты. Без оптимизаций — около 150 секунд, с максимальной оптимизацией библиотек (`-OdPR`, `gcc -O3`) — около 100 секунд.

И это странно. На моём ноутбуке (Intel® Core™ i5-2430M CPU @ 2.40GHz, 8 Гбайт ОЗУ, DDR3 1333 МГц, SSD, Windows 10) цикл самоприменения требует только 20 секунд:
```
Total program time: 21.656 seconds (100.0 %).
(Total refal time): 17.555 seconds (81.1 %).
Linear result time: 8.311 seconds (38.4 %).
Linear pattern time: 6.725 seconds (31.1 %).
Native time: 2.464 seconds (11.4 %).
t- and e-var copy time: 1.488 seconds (6.9 %).
Runtime time overhead: 1.388 seconds (6.4 %).
Open e-loop time (clear): 0.985 seconds (4.5 %).
Context copy time: 0.249 seconds (1.1 %).
Repeated e-var match time (inside e-loops): 0.031 seconds (0.1 %).
Repeated t-var match time (outside e-loops): 0.015 seconds (0.1 %).
Identifiers allocated: 881
Step count 20452906
Memory used 645800 nodes, 645800 * 16 = 10332800 bytes
```
Используется компилятор BCC 5.5.1, ключи запуска:
```
set CPPLINEE=bcc32 -IC:\Borland\BCC55\Include -LC:\Borland\BCC55\Lib -w -e
```

Есть гипотеза, что на macOS медленно выполняется функция `clock()`, возвращающая время выполнения программы в тиках. Потому что та же проблема есть и у подсистемы Linux для Windows — на ней самоприменение выполняется долго именно из-за `clock`’а:
```
Total program time: 311.938 seconds (100.0 %).
(Total refal time): 240.672 seconds (77.2 %).
Linear pattern time: 163.969 seconds (52.6 %).
Linear result time: 58.625 seconds (18.8 %).
Runtime time overhead: 51.984 seconds (16.7 %).
Native time: 17.656 seconds (5.7 %).
Open e-loop time (clear): 9.297 seconds (3.0 %).
Repeated e-var match time (inside e-loops): 4.938 seconds (1.6 %).
t- and e-var copy time: 3.797 seconds (1.2 %).
Context copy time: 1.625 seconds (0.5 %).
Repeated t-var match time (inside e-loops): 0.047 seconds (0.0 %).
Identifiers allocated: 922
Step count 20447561
Memory used 2383264 nodes, 2383264 * 32 = 76264448 bytes
```

**Поэтому нужно понять, это проблема с конкретным компьютером @StrixSeloputo или проблема с macOS вообще.**

Что надо сделать
============
Нужно протестировать самоприменение компилятора на других компьютерах с macOS. Для этого надо склонировать репозиторий:
```
git clone https://github.com/bmstu-iu9/refal-5-lambda
```
раскрутить его командой
```
./bootstrap.sh --no-tests
```
(Тесты могут занять чуть ли не час в зависимости от машины.)

Перейти в папку `src/compiler` и выполнить там `makeself.sh`:
```
cd src/compiler
./makeself.sh
```
Написать сюда результаты профилировки (чиселки, подобные тем, что выше), характеристики компьютера, версию ОС и содержимое переменной `CPPLINEE`, устанавливаемое в файле `c-plus-plus.conf.sh`.

UPD:
-----
После этого нужно
* переключиться на ветку `posix-performance-benchmarks-bug206`,
* перейти в папку `performance-benchmarks` в корне репозитория,
* скомпилировать файл `linux-test-performance.c`:
* в файле в функции `test_clock_gettime()` будут константы, которые определены только на Linux:
https://github.com/bmstu-iu9/refal-5-lambda/blob/c04e09f64ab6e056d963ab3a03094034ac09312b/performance-benchmarks/linux-test-performance.c#L77-L87
на них компилятор ругнётся, их надо закомментировать,
* опубликовать в комментариях вывод программы.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.