Черт возьми, на это до сих пор нет ответов. Прочитав это, у вас все равно не останется полезных ответов ...
Вы подразумеваете, что вы уже сделали все очевидные и общие вещи, чтобы сделать ваши коды быстрыми. В частности, у вас есть:
- выбрал самый быстрый алгоритм для вашей задачи (либо это, либо ваша задача - оптимизировать реализацию алгоритма, а не оптимизировать поиск решения проблемы);
- работал ваш компилятор как собака, чтобы выжать последнюю каплю скорости выполнения;
- связаны в лучших библиотеках, которые вы можете найти, которые вообще используются (и проверены, чтобы убедиться, что они действительно улучшают производительность вашей программы;
- ручной доступ к вашей памяти для оптимизации производительности чтения;
- сделал все очевидные маленькие трюки, которые мы все делаем (например, при сравнении норм 2 векторов вам не нужно брать квадратный корень, чтобы определить, что один «больше», чем другой, ...);
- ударил параллельную масштабируемость вашей программы с точностью до мошки линии S == P на графиках производительности;
- всегда выполнял вашу программу с правильным размером задания для заданного числа процессоров, чтобы максимизировать некоторую меру производительности;
и все же вы не удовлетворены!
Теперь, к сожалению, вы близки к истокам, и информацию, которую вы ищете, нелегко найти в книгах или на веб-сайтах. Даже здесь, на ТАК. Одной из причин этого является то, что вы сейчас заняты оптимизацией своего кода на своей платформе, и вы в лучшем положении для диагностики проблем и их устранения. Но эти проблемы, скорее всего, будут очень локальными; Вы можете прийти к выводу, что никто, кроме вашей непосредственной исследовательской группы, не будет заинтересован в том, что вы делаете, я знаю, что вас не заинтересует ни одна из микрооптимизаций, которые я выполняю для своего кода на моей платформе.
Вторая причина заключается в том, что вы вступили в область, которая все еще является активным исследовательским фронтом, и полезные уроки (если таковые имеются) опубликованы в научной литературе. Для этого вам нужен доступ к хорошей исследовательской библиотеке, если у вас ее нет рядом, то и цифровые библиотеки ACM и IEEE-CS - это хорошее место для начала. (Оставьте комментарий или комментарий, если вы не знаете, что это такое.)
На вашем посту я бы посмотрел журналы по двум темам: компьютерные и лабораторные вычисления для науки и техники и разработки компиляторов. Я верю, что первое очевидно, а второе может быть менее очевидно: но если ваш компилятор уже выполнил все (полезные) передовые оптимизации, вы бы не задавали этот вопрос, и разработчики компиляторов прилагают все усилия, чтобы ваши преемники победили не должен.
Вы, вероятно, ищете оптимизацию, которую, например, развертывание цикла, было относительно трудно найти внедренной в компиляторах 25 лет назад, и которая в то время находилась на переднем крае, и которая сама по себе будет устаревшей и установится в другом. года.
EDIT
Во-первых, позвольте мне прямо указать на то, что изначально подразумевалось в моем «ответе»: я не готов тратить достаточно много времени на SO, чтобы провести вас даже через краткое изложение знаний, которые я получил за 25 с лишним лет в области научных исследований. Инженерные и высокопроизводительные вычисления. Мне не дано писать книги, но многие есть, и Amazon поможет вам их найти. Этот ответ был намного длиннее, чем большинство, которые я хотел бы опубликовать, прежде чем добавить этот бит.
Теперь, чтобы подобрать очки в вашем комментарии:
- о «ручном доступе к памяти» начните со статьи в Википедии о «циклическом разбиении по циклам» (видите, вы даже не можете положиться на меня, вставив сюда URL-адрес) и прочесть оттуда; у вас должна быть возможность быстро подобрать термины, которые вы можете использовать в дальнейших поисках.
- о «работе вашего компилятора как собаки», я действительно имею в виду знакомство с его документацией и детальное понимание намерений и реалий различных опций; в конечном итоге вам придется много тестировать опции компилятора, чтобы определить, какие «лучше» подходят для вашего кода на вашей платформе (ах).
- на «микрооптимизациях», ну вот и начнем: Оптимизация производительности численно интенсивных кодов . Не убегайте от мысли, что вы узнаете все (или даже многое) из того, что вы хотите узнать из этой книги. Сейчас около 10 лет. Сообщения на вынос:
- оптимизация производительности требует близости с архитектурой машины;
- Оптимизация производительности состоит из 1001 отдельных шагов, и, как правило, невозможно предсказать, какие из них будут наиболее полезными (а какие действительно вредными) без детального понимания программы и ее среды выполнения;
- Оптимизация производительности - это спорт с участием, вы не сможете изучить его, не занимаясь этим;
- Оптимизация производительности требует пристального внимания к деталям и хорошего ведения записей.
Да, и никогда не пишите умную часть оптимизации, которую вы не сможете легко отписать, когда в следующем выпуске компилятора будет реализован лучший подход. Я провожу довольно много времени, удаляя хитрые уловки с 20-летнего Фортрана, которые были оправданы (если вообще были) соображениями повышения производительности выполнения, но которые сейчас просто смущают программиста (это тоже меня бесит) и получают на пути компилятора, выполняющего свою работу.
Наконец, одна мудрость, которой я готов поделиться: в эти дни я делаю очень мало оптимизаций, которых нет ни в одном из пунктов моего первого списка выше; Я считаю, что соотношение затрат и выгод микрооптимизации неблагоприятно для моих работодателей.