Commit 5a7a4772 authored by Roman Alifanov's avatar Roman Alifanov

Update benchmark results

parent 9747dc33
......@@ -15,55 +15,55 @@
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 117ms | 1ms |
| Shell original | 280ms | 2ms |
| ContenT @awk | 1036ms | 10ms |
| ContenT noawk | 1429ms | 14ms |
| ELF binary | 110ms | 1ms |
| Shell original | 278ms | 2ms |
| ContenT @awk | 1052ms | 10ms |
| ContenT noawk | 1439ms | 14ms |
### TEST 2: count (2000 words, 100 iterations)
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 193ms | 1ms |
| Shell original | 440ms | 4ms |
| ContenT @awk | 1372ms | 13ms |
| ContenT noawk | 2922ms | 29ms |
| ELF binary | 183ms | 1ms |
| Shell original | 454ms | 4ms |
| ContenT @awk | 1362ms | 13ms |
| ContenT noawk | 2928ms | 29ms |
### TEST 3: union (2000 words with duplicates, 100 iterations)
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 171ms | 1ms |
| Shell original | 1378ms | 13ms |
| ContenT @awk | 1257ms | 12ms |
| **ContenT noawk** | **111875ms** | **1118ms** |
| ELF binary | 168ms | 1ms |
| Shell original | 1365ms | 13ms |
| ContenT @awk | 1209ms | 12ms |
| **ContenT noawk** | **108860ms** | **1088ms** |
### TEST 4: first (2000 words, 100 iterations)
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 189ms | 1ms |
| Shell original | 429ms | 4ms |
| ContenT @awk | 1279ms | 12ms |
| ContenT noawk | 2361ms | 23ms |
| Shell original | 444ms | 4ms |
| ContenT @awk | 1253ms | 12ms |
| ContenT noawk | 2379ms | 23ms |
### TEST 5: list (500 words, 100 iterations)
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 159ms | 1ms |
| Shell original | 360ms | 3ms |
| ContenT @awk | 891ms | 8ms |
| ContenT noawk | 1749ms | 17ms |
| ELF binary | 160ms | 1ms |
| Shell original | 359ms | 3ms |
| ContenT @awk | 897ms | 8ms |
| ContenT noawk | 1732ms | 17ms |
### TEST 6: strip (10000 words, 50 iterations)
| Реализация | Общее время | Среднее |
|------------|-------------|---------|
| ELF binary | 277ms | 5ms |
| Shell original | 688ms | 13ms |
| ContenT @awk | 3249ms | 64ms |
| ContenT noawk | 3993ms | 79ms |
| ELF binary | 282ms | 5ms |
| Shell original | 705ms | 14ms |
| ContenT @awk | 3345ms | 66ms |
| ContenT noawk | 4125ms | 82ms |
## Выводы
......@@ -73,31 +73,35 @@
|----------|-----|-------|------|-------|---------------|
| strip 500w | 1ms | 2ms | 10ms | 14ms | 1.4x |
| count 2000w | 1ms | 4ms | 13ms | 29ms | 2.2x |
| **union 2000w** | 1ms | 13ms | **12ms** | **1118ms** | **93x** |
| **union 2000w** | 1ms | 13ms | **12ms** | **1088ms** | **91x** |
| first 2000w | 1ms | 4ms | 12ms | 23ms | 1.9x |
| list 500w | 1ms | 3ms | 8ms | 17ms | 2.1x |
| strip 10000w | 5ms | 13ms | 64ms | 79ms | 1.2x |
| strip 10000w | 5ms | 14ms | 66ms | 82ms | 1.2x |
### Ключевые наблюдения
1. **ELF binary** — эталон производительности (~1-5ms)
2. **Shell original** — 2-13x медленнее ELF
3. **ContenT @awk** — сопоставим с Shell original на сложных операциях (union)
4. **ContenT noawk****катастрофически медленный на union** (1118ms vs 12ms)
2. **Shell original** — 2-14x медленнее ELF
3. **ContenT @awk** — сопоставим с Shell original на сложных операциях (union: 12ms vs 13ms)
4. **ContenT noawk****катастрофически медленный на union** (1088ms vs 12ms)
### Критическая разница: union
```
@awk: 12ms — AWK делает дедупликацию + сортировку за один проход
noawk: 1118ms — bash foreach + dict + вызов sort в subshell
noawk: 1088ms — bash foreach + dict + вызов sort в subshell
```
**@awk даёт 93x ускорение** на операции union с 2000 словами.
**@awk даёт 91x ускорение** на операции union с 2000 словами.
### Масштабирование на больших данных (10000 слов)
### Overhead инициализации
На strip с 10000 слов разница между @awk и noawk минимальна (64ms vs 79ms),
потому что основное время занимает передача данных и инициализация.
На strip с 10000 слов разница между @awk и noawk минимальна (66ms vs 82ms),
потому что основное время занимает инициализация классов и передача данных.
Для уменьшения overhead можно:
- Использовать функции без классов (flat version)
- Добавить dead code elimination в компилятор
## Запуск бенчмарка
......@@ -105,3 +109,5 @@ noawk: 1118ms — bash foreach + dict + вызов sort в subshell
cd examples/estrlist
./benchmark.sh
```
Скрипт автоматически компилирует `.ct` файлы перед запуском.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment