Я пытаюсь оптимизировать рабочую нагрузку двоичного поиска, используя сопрограммы C++ для отсортированного массива уникальных случайных целых чисел размером 1 ГБ, чтобы вызвать множественные промахи в памяти. Этот подход предполагает использование co_await, когда доступ к arr[mid] вызывает промах в памяти, а затем использование другой сопрограммы с циклическим буфером для выдачи дополнительных запросов и перекрытия промахов в памяти. Однако std::suspend_always оказывается узким местом. Мне интересно, есть ли более эффективный способ справиться с этим.
Я пытаюсь оптимизировать рабочую нагрузку двоичного поиска, используя сопрограммы C++ для отсортированного массива уникальных случайных целых чисел размером 1 ГБ, чтобы вызвать множественные промахи в памяти. Этот подход предполагает использование co_await, когда доступ к arr[mid] вызывает промах в памяти, а затем использование другой сопрограммы с циклическим буфером для выдачи дополнительных запросов и перекрытия промахов в памяти. Однако std::suspend_always оказывается узким местом. Мне интересно, есть ли более эффективный способ справиться с этим. [code]struct BSCoroutineHandler { struct promise_type { int value; BSCoroutineHandler get_return_object() { return {.h_ = std::coroutine_handle ::from_promise(*this)}; } std::suspend_never initial_suspend() { return {}; } std::suspend_always final_suspend() noexcept { return {}; } void return_value(int v) { value = v; } void unhandled_exception() { std::terminate(); } };