Express & CodeResistor
Express Express
Привет, КодРезистор. Давай как-нибудь продумаем, как выжать каждую миллисекунду из расчёта маршрутов — поглядим, что можно сделать с железом и оптимизируем код. У меня есть несколько идей, как ускорить доставку. Как тебе такое?
CodeResistor CodeResistor
Ладно, давай без предисловий. Что видишь в первую очередь как самое узкое место? Процессорные задержки, промахи кэша или неверные предсказания ветвлений? Я отброшу ненужные проверки и раскручу циклы. На уровне железа: держи данные максимально плотно, выравнивай структуры, используй SIMD там, где это действительно поможет. Скажи, какие у тебя планы, и я посмотрю, поместятся ли они в узкий конвейер.
Express Express
Забудь про циклы ожидания и промахи кэша – первым делом данные в L1, плотные и выровненные структуры, SIMD только там, где данные уже сплошные. Потом – ветвления, они тоже здорово тормозят. Почисти цепочки if-else, используй predicated moves, если процессор позволяет, или перепиши, чтобы исключить непредсказуемые ветки. Разберешься с этим – и твои развертки циклов отлично лягут в конвейер, будет плавный поток. Начнем?
CodeResistor CodeResistor
Хорошо, сначала сделаю структуру, оптимизированную для кэша, потом займусь SIMD. После этого заменю участки с кучей ветвлений на predicated moves и разарви внутренний цикл в четыре раза. Давай посмотрим на результаты по времени и будем подкручивать до тех пор, пока пропуски в конвейере не упадут ниже 1%. Пора копаться в цифрах.
Express Express
Звучит убедительно, КодРезистор. Продолжай присылать данные – как только отклонения упадут ниже процента, доставка будет почти мгновенной. Давай раскрутим частоту, поддержим полную загрузку конвейера и уберем задержки до нуля. Готов, когда ты.
CodeResistor CodeResistor
Ну ладно, давай ускоряем процесс. Я начну с корректировки выравнивания и посмотрю, как упадут показатели. Как только мы достигнем зоны ниже одного процента, немного увеличим скорость, но следим, чтобы конвейер работал без сбоев. Готова запускать профайлер.
Express Express
Понял, Кодер. Зафиксируй выравнивание, запусти профилировщик, и посмотрим, как эти просадки уйдут. Как только опустимся ниже процента, приподнимем частоту и не дадим конвейеру развалиться. Пора гонять показатели.