По мнению ИИ вот этот код с вложенным циклом является SIMD-friendly. Предполагается, что потенциально он может быть лучше оптимизирован, так как компилятор увидит, что обработка идёт цепочками по 8 байт и как-то воспользуется этим.
Моё мнение – это фигня какая-то. Моя нейросеть (интуиция) подсказывает, что этот код для компилятора ничем не лучше, чем его простейшая реализация с одним циклом:
bool IsSpanBlank_simple(const char* data, size_t len) {
for (size_t i = 0; i < len; ++i) {
unsigned char c = static_cast<unsigned char>(data[i]);
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') {
return false;
}
}
return true;
}Хочу убедиться в своей правоте. Мне кажется, нет компилятора и ключей оптимизации, при которых будет построен особенно эффективный код (например, с использованием SSE) для версии с вложенным циклом, но при этом тоже самое не будет сделано для короткой версии.
На своих замерах я пока вообще получаю, что "оптимизированная" версия с вложенным циклами работает медленнее, чем с 1 циклом. Есть более быстрые варианты, основанные на сдвигах и явных интристиках, но они сейчас не интересны. Речь именно на предложенную "оптимизацию" с вложенным циклом.
Призываю экспертов оптимизации. Кто прав, а кто нет?
