Skip to content

Исправить ошибку многопоточных вычислений#22

Merged
netkeep80 merged 4 commits intonetkeep80:mainfrom
konard:issue-21-538542164f70
Jan 27, 2026
Merged

Исправить ошибку многопоточных вычислений#22
netkeep80 merged 4 commits intonetkeep80:mainfrom
konard:issue-21-538542164f70

Conversation

@konard
Copy link
Contributor

@konard konard commented Jan 27, 2026

Описание

Исправлена ошибка, из-за которой многопоточный режим обучения (-j N) не работал - использовался только 1 поток независимо от настроек.

Причина проблемы

В функции rndrod4_parallel() был установлен слишком высокий порог (500,000) для переключения на параллельный режим:

// Было: порог = 500000
if (count_max < 500000) {
    return rndrod4();  // Всегда использовался однопоточный режим
}

При типичных значениях (Neirons=2130, Receptors=20) получаем count_max = 2130 * 20 * 4 = 170,400, что всегда ниже порога. Поэтому многопоточный режим никогда не включался.

Решение

  1. Снижен порог для включения параллельного режима:

    • Новый порог: count_max >= 2000
    • Это позволяет включать параллелизм для большинства реальных задач
  2. Улучшена стратегия распределения работы:

    • Общее количество итераций делится между потоками
    • Каждый поток получает минимум MIN_ITERATIONS_PER_THREAD = 1000 итераций
    • Это обеспечивает баланс между скоростью и качеством поиска

Результаты тестирования

configs/benchmark.json (5 классов, 16 рецепторов):

Потоки Время Ускорение
1 22088 ms 1.00x
2 8197 ms 2.69x
4 5247 ms 4.20x
6 2919 ms 7.56x

configs/default.json (4 класса, 20 рецепторов):

Потоки Время Ускорение
1 47481 ms 1.00x
2 31183 ms 1.52x
6 14439 ms 3.28x

Изменения

  1. include/neuron_generation.h:

    • Изменена логика определения порога для параллельного режима
    • Улучшена стратегия распределения итераций между потоками
    • Увеличено минимальное количество итераций на поток для стабильного качества
  2. Добавлен experiments/test_multithreading_speedup.sh:

    • Скрипт для измерения ускорения при разном количестве потоков

Тесты

Все 8 тестов проходят успешно на всех платформах (Linux, macOS, Windows):

  • ✅ test_simple_classification
  • ✅ test_default_classification
  • ✅ test_benchmark_training_speed
  • ✅ test_model_save_load
  • ✅ test_extended_classification
  • ✅ test_multithreading_benchmark
  • ✅ test_verify_mode
  • ✅ test_retraining_mode

Test plan

  • Сборка проекта
  • Все существующие тесты проходят
  • Многопоточный режим показывает ускорение до 7.5x
  • Однопоточный режим работает корректно (--single-thread)
  • CI проходит на Linux, macOS и Windows

Fixes #21


🤖 Generated with Claude Code

konard and others added 2 commits January 27, 2026 21:23
Adding CLAUDE.md with task information for AI processing.
This file will be removed when the task is complete.

Issue: netkeep80#21
Проблема: многопоточный режим (-j N) не давал ускорения из-за
слишком высокого порога переключения на параллельный поиск (500000).
При типичных значениях (Neirons=2130, Receptors=20) count_max=170400,
что ниже порога, и всегда использовался однопоточный режим.

Решение:
1. Снижен порог для включения параллельного режима:
   - Было: count_max < 500000 (эффективно отключало параллелизм)
   - Стало: count_max < MIN_ITERATIONS_PER_THREAD * NumThreads
   - MIN_ITERATIONS_PER_THREAD = 100 обеспечивает качественный поиск

2. Каждый поток теперь выполняет полное количество итераций (count_max):
   - Общее количество исследованных комбинаций увеличивается в NumThreads раз
   - Это обеспечивает лучшее качество поиска при параллельном выполнении
   - Все ядра CPU загружаются полностью

Результаты тестирования:
- configs/benchmark.json: speedup 2.26x-2.69x (2-6 потоков)
- configs/default.json: speedup 1.16x-1.50x (2-6 потоков)
- Все 8 тестов проходят успешно

Добавлен эксперимент experiments/test_multithreading_speedup.sh
для измерения ускорения при разном количестве потоков.

Fixes netkeep80#21

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@konard konard changed the title [WIP] Исправить ошибку многопоточных вычислений Исправить ошибку многопоточных вычислений Jan 27, 2026
1. Увеличено минимальное количество итераций на поток с 100 до 1000
   для обеспечения достаточного покрытия пространства поиска

2. Изменена стратегия распределения работы:
   - Общее количество итераций делится между потоками
   - Каждый поток получает минимум MIN_ITERATIONS_PER_THREAD итераций
   - Это обеспечивает баланс между скоростью и качеством поиска

3. Установлен минимальный порог count_max < 2000 для использования
   однопоточной версии, чтобы накладные расходы на потоки
   не превышали выгоду от параллелизации

Результаты тестирования:
- configs/benchmark.json: speedup 2.69x-7.56x
- configs/default.json: speedup 1.52x-3.28x
- Все 8 тестов проходят стабильно (проверено 5 запусков)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@konard konard marked this pull request as ready for review January 27, 2026 20:49
@konard
Copy link
Contributor Author

konard commented Jan 27, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $5.265661 USD
  • Calculated by Anthropic: $4.120563 USD
  • Difference: $-1.145099 (-21.75%)
    📎 Log file uploaded as Gist (787KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@konard
Copy link
Contributor Author

konard commented Jan 27, 2026

🔄 Auto-restart 1/3

Detected uncommitted changes from previous run. Starting new session to review and commit them.

Uncommitted files:

?? ci-logs/

Auto-restart will stop after changes are committed or after 2 more iterations. Please wait until working session will end and give your feedback.

@netkeep80 netkeep80 merged commit db4c7dd into netkeep80:main Jan 27, 2026
3 checks passed
@konard
Copy link
Contributor Author

konard commented Jan 27, 2026

🔄 Auto-restart 1/3 Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $0.849004 USD
  • Calculated by Anthropic: $0.475290 USD
  • Difference: $-0.373715 (-44.02%)
    📎 Log file uploaded as Gist (948KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@konard
Copy link
Contributor Author

konard commented Jan 27, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $0.849004 USD
  • Calculated by Anthropic: $0.475290 USD
  • Difference: $-0.373715 (-44.02%)
    📎 Log file uploaded as Gist (952KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Исправить ошибку многопоточных вычислений

2 participants