Меня интересует любая общепринятая мудрость, как подходить к следующей проблеме.Обратите внимание, что я аппаратный парень, поэтому будьте осторожны, используя отраслевые знания / терминологию / сокращения.
Я предоставляю онлайн-приложение, которое включает в себя очень сложные математические вычисления, такие как быстрые преобразования Фурье, которые включают в себя вложенныециклы for и очень большие массивы данных (1,6 ГБ каждый).Пользователи в Интернете получат доступ к этому приложению, введут некоторые пользовательские параметры и отправят задание, которое вызывает эти математические вычисления.Чтобы свести время ожидания пользователя к минимуму и разрешить несколько независимых сеансов для нескольких одновременных пользователей (каждый пользователь имеет отдельный поток), мне интересно, как я могу ускорить математические вычисления, которые, как я ожидаю, станут узким местом.
Я не очень ищу советы о том, как структурировать программу (например, используйте целочисленные типы данных, когда это возможно вместо плавающих, используйте меньшие массивы и т. Д.), Но, скорее, мне интересно, как толькоПрограмма завершена, что можно сделать дальше, чтобы ускорить процесс.
Например, как обеспечить автоматический доступ к нескольким ядрам в ЦП в зависимости от спроса?(это сделано по умолчанию или мне нужно как-то управлять процессом?
Или как выполнить параллельную обработку (прерывание цикла между несколькими ядрами и / или машинами)?
Любые практические советы очень ценятся. Я уверен, что я не первый, кто нуждается в этом, поэтому я надеюсь, что существуют лучшие отраслевые подходы, которые масштабируются в зависимости от спроса.
Заранее спасибо!