Исправить ошибку многопоточных вычислений#22
Conversation
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>
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>
This reverts commit db43ed2.
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
Now working session is ended, feel free to review and add any feedback on the solution draft. |
🔄 Auto-restart 1/3Detected uncommitted changes from previous run. Starting new session to review and commit them. Uncommitted files: Auto-restart will stop after changes are committed or after 2 more iterations. Please wait until working session will end and give your feedback. |
🔄 Auto-restart 1/3 LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
Now working session is ended, feel free to review and add any feedback on the solution draft. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
Now working session is ended, feel free to review and add any feedback on the solution draft. |
Описание
Исправлена ошибка, из-за которой многопоточный режим обучения (
-j N) не работал - использовался только 1 поток независимо от настроек.Причина проблемы
В функции
rndrod4_parallel()был установлен слишком высокий порог (500,000) для переключения на параллельный режим:При типичных значениях (
Neirons=2130,Receptors=20) получаемcount_max = 2130 * 20 * 4 = 170,400, что всегда ниже порога. Поэтому многопоточный режим никогда не включался.Решение
Снижен порог для включения параллельного режима:
count_max >= 2000Улучшена стратегия распределения работы:
MIN_ITERATIONS_PER_THREAD = 1000итерацийРезультаты тестирования
configs/benchmark.json (5 классов, 16 рецепторов):
configs/default.json (4 класса, 20 рецепторов):
Изменения
include/neuron_generation.h:Добавлен
experiments/test_multithreading_speedup.sh:Тесты
Все 8 тестов проходят успешно на всех платформах (Linux, macOS, Windows):
Test plan
--single-thread)Fixes #21
🤖 Generated with Claude Code