Существуют ли более эффективные ожидающие программы для сопрограмм C++, чем std::suspend_always?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Существуют ли более эффективные ожидающие программы для сопрограмм C++, чем std::suspend_always?

Сообщение Anonymous »

Я пытаюсь оптимизировать рабочую нагрузку двоичного поиска, используя сопрограммы C++ для отсортированного массива уникальных случайных целых чисел размером 1 ГБ, чтобы вызвать множественные промахи в памяти. Этот подход предполагает использование co_await, когда доступ к arr[mid] вызывает промах в памяти, а затем использование другой сопрограммы с циклическим буфером для выдачи дополнительных запросов и перекрытия промахов в памяти. Однако std::suspend_always оказывается узким местом. Мне интересно, есть ли более эффективный способ справиться с этим.

Код: Выделить всё

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(); }
};

std::coroutine_handle h_;

int get() { return h_.promise().value; }
void resume() { this->h_.resume(); }
bool done() { return this->h_.done(); }
};

BSCoroutineHandler binarySearchCoroutine(int *arr, int target,
const int arr_size) {
int low = 0, high = arr_size - 1;

while (low 

Подробнее здесь: [url]https://stackoverflow.com/questions/79217388/are-there-more-efficient-awaiters-for-c-coroutines-than-stdsuspend-always[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»