Reuse semaphores
This commit is contained in:
parent
0c4d841cf1
commit
ad3d28ee0a
1 changed files with 9 additions and 4 deletions
|
@ -104,6 +104,7 @@ struct vk_queue {
|
||||||
vk::CommandPool pool;
|
vk::CommandPool pool;
|
||||||
uint32_t cmd_buffer_idx;
|
uint32_t cmd_buffer_idx;
|
||||||
std::vector<vk::CommandBuffer> cmd_buffers;
|
std::vector<vk::CommandBuffer> cmd_buffers;
|
||||||
|
uint32_t semaphore_idx;
|
||||||
std::vector<vk::Semaphore> semaphores;
|
std::vector<vk::Semaphore> semaphores;
|
||||||
std::mutex mutex;
|
std::mutex mutex;
|
||||||
};
|
};
|
||||||
|
@ -356,6 +357,7 @@ static vk_queue ggml_vk_create_queue(uint32_t queue_family_index, uint32_t queue
|
||||||
q.pool = vk_device.createCommandPool(command_pool_create_info_compute);
|
q.pool = vk_device.createCommandPool(command_pool_create_info_compute);
|
||||||
|
|
||||||
q.cmd_buffer_idx = 0;
|
q.cmd_buffer_idx = 0;
|
||||||
|
q.semaphore_idx = 0;
|
||||||
|
|
||||||
q.queue = vk_device.getQueue(queue_family_index, queue_index);
|
q.queue = vk_device.getQueue(queue_family_index, queue_index);
|
||||||
|
|
||||||
|
@ -366,8 +368,14 @@ static vk::Semaphore ggml_vk_create_semaphore(vk_queue& q) {
|
||||||
#ifdef VK_DEBUG
|
#ifdef VK_DEBUG
|
||||||
std::cerr << "ggml_vk_create_semaphore()" << std::endl;
|
std::cerr << "ggml_vk_create_semaphore()" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
if (q.semaphores.size() > q.semaphore_idx) {
|
||||||
|
// Reuse semaphore
|
||||||
|
return q.semaphores[q.semaphore_idx++];
|
||||||
|
}
|
||||||
|
|
||||||
vk::Semaphore semaphore = vk_device.createSemaphore({});
|
vk::Semaphore semaphore = vk_device.createSemaphore({});
|
||||||
q.semaphores.push_back(semaphore);
|
q.semaphores.push_back(semaphore);
|
||||||
|
q.semaphore_idx++;
|
||||||
|
|
||||||
return semaphore;
|
return semaphore;
|
||||||
}
|
}
|
||||||
|
@ -378,10 +386,7 @@ static void ggml_vk_queue_cleanup(vk_queue& q) {
|
||||||
#endif
|
#endif
|
||||||
q.queue.waitIdle();
|
q.queue.waitIdle();
|
||||||
|
|
||||||
for (auto semaphore : q.semaphores) {
|
q.semaphore_idx = 0;
|
||||||
vk_device.destroySemaphore(semaphore);
|
|
||||||
}
|
|
||||||
q.semaphores.clear();
|
|
||||||
|
|
||||||
vk_device.resetCommandPool(q.pool);
|
vk_device.resetCommandPool(q.pool);
|
||||||
q.cmd_buffer_idx = 0;
|
q.cmd_buffer_idx = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue