| 75 | } |
| 76 | |
| 77 | void server_queue::pop_deferred_task(int id_slot) { |
| 78 | std::unique_lock<std::mutex> lock(mutex_tasks); |
| 79 | if (!queue_tasks_deferred.empty()) { |
| 80 | // try to find a task that uses the specified slot |
| 81 | bool found = false; |
| 82 | for (auto it = queue_tasks_deferred.begin(); it != queue_tasks_deferred.end(); ++it) { |
| 83 | if (it->id_slot == id_slot) { |
| 84 | QUE_DBG("pop deferred task (use slot %d), id_task = %d\n", id_slot, it->id); |
| 85 | queue_tasks.emplace_front(std::move(*it)); |
| 86 | queue_tasks_deferred.erase(it); |
| 87 | found = true; |
| 88 | break; |
| 89 | } |
| 90 | } |
| 91 | // if not tasks found using the slot, just pop the first deferred task (default behavior) |
| 92 | if (!found) { |
| 93 | QUE_DBG("pop deferred task, id_task = %d\n", queue_tasks_deferred.front().id); |
| 94 | queue_tasks.emplace_front(std::move(queue_tasks_deferred.front())); |
| 95 | queue_tasks_deferred.pop_front(); |
| 96 | } |
| 97 | } |
| 98 | time_last_task = ggml_time_ms(); |
| 99 | condition_tasks.notify_one(); |
| 100 | } |
| 101 | |
| 102 | void server_queue::wait_until_no_sleep() { |
| 103 | std::unique_lock<std::mutex> lock(mutex_tasks); |
no test coverage detected