diff mbox series

[FFmpeg-devel,2/2] vulkan: discard dependencies when explicitly waiting for execution

Message ID NXI0QFb--3-9@lynne.ee
State New
Headers show
Series [FFmpeg-devel,1/2] vulkan: synchronize access to execution pool fences | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

Lynne June 6, 2023, 11:23 p.m. UTC
This reduces memory needed dramatically, as unneeded resources
can be immediately returned to the pool.
Although waitforfences is threadsafe, we add a mutex wait around
it, as the mutex fence in combination with waitforfences assures
us that no other thread will reset the fence in the meanwhile
whilst the mutex is locked. This allows is to call
ff_vk_exec_discard_deps.

Patch attached.

Comments

Philip Langdale June 7, 2023, 9:32 p.m. UTC | #1
On Wed, 7 Jun 2023 01:23:24 +0200 (CEST)
Lynne <dev@lynne.ee> wrote:

> From eb74297de8662c9fa66cd719c6315567966afe56 Mon Sep 17 00:00:00 2001
> From: Lynne <dev@lynne.ee>
> Date: Wed, 7 Jun 2023 01:16:29 +0200
> Subject: [PATCH 2/2] vulkan: discard dependencies when explicitly
> waiting for execution
> 
> This reduces memory needed dramatically, as unneeded resources
> can be immediately returned to the pool.
> Although waitforfences is threadsafe, we add a mutex wait around
> it, as the mutex fence in combination with waitforfences assures
> us that no other thread will reset the fence in the meanwhile
> whilst the mutex is locked. This allows is to call
> ff_vk_exec_discard_deps.
> ---
>  libavutil/vulkan.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
> index 4b96c0c200..0cfe334db0 100644
> --- a/libavutil/vulkan.c
> +++ b/libavutil/vulkan.c
> @@ -480,7 +480,10 @@ FFVkExecContext *ff_vk_exec_get(FFVkExecPool
> *pool) void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e)
>  {
>      FFVulkanFunctions *vk = &s->vkfn;
> +    pthread_mutex_lock(&e->lock);
>      vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE,
> UINT64_MAX);
> +    ff_vk_exec_discard_deps(s, e);
> +    pthread_mutex_unlock(&e->lock);
>  }
>  
>  int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e)

LGTM.


--phil
Lynne June 7, 2023, 10:06 p.m. UTC | #2
Jun 7, 2023, 23:33 by philipl@overt.org:

> On Wed, 7 Jun 2023 01:23:24 +0200 (CEST)
> Lynne <dev@lynne.ee> wrote:
>
>> From eb74297de8662c9fa66cd719c6315567966afe56 Mon Sep 17 00:00:00 2001
>> From: Lynne <dev@lynne.ee>
>> Date: Wed, 7 Jun 2023 01:16:29 +0200
>> Subject: [PATCH 2/2] vulkan: discard dependencies when explicitly
>> waiting for execution
>>
>> This reduces memory needed dramatically, as unneeded resources
>> can be immediately returned to the pool.
>> Although waitforfences is threadsafe, we add a mutex wait around
>> it, as the mutex fence in combination with waitforfences assures
>> us that no other thread will reset the fence in the meanwhile
>> whilst the mutex is locked. This allows is to call
>> ff_vk_exec_discard_deps.
>> ---
>>  libavutil/vulkan.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
>> index 4b96c0c200..0cfe334db0 100644
>> --- a/libavutil/vulkan.c
>> +++ b/libavutil/vulkan.c
>> @@ -480,7 +480,10 @@ FFVkExecContext *ff_vk_exec_get(FFVkExecPool
>> *pool) void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e)
>>  {
>>  FFVulkanFunctions *vk = &s->vkfn;
>> +    pthread_mutex_lock(&e->lock);
>>  vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE,
>> UINT64_MAX);
>> +    ff_vk_exec_discard_deps(s, e);
>> +    pthread_mutex_unlock(&e->lock);
>>  }
>>  
>>  int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e)
>>
>
> LGTM.
>

Thanks, pushed.
diff mbox series

Patch

From eb74297de8662c9fa66cd719c6315567966afe56 Mon Sep 17 00:00:00 2001
From: Lynne <dev@lynne.ee>
Date: Wed, 7 Jun 2023 01:16:29 +0200
Subject: [PATCH 2/2] vulkan: discard dependencies when explicitly waiting for
 execution

This reduces memory needed dramatically, as unneeded resources
can be immediately returned to the pool.
Although waitforfences is threadsafe, we add a mutex wait around
it, as the mutex fence in combination with waitforfences assures
us that no other thread will reset the fence in the meanwhile
whilst the mutex is locked. This allows is to call
ff_vk_exec_discard_deps.
---
 libavutil/vulkan.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index 4b96c0c200..0cfe334db0 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -480,7 +480,10 @@  FFVkExecContext *ff_vk_exec_get(FFVkExecPool *pool)
 void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e)
 {
     FFVulkanFunctions *vk = &s->vkfn;
+    pthread_mutex_lock(&e->lock);
     vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE, UINT64_MAX);
+    ff_vk_exec_discard_deps(s, e);
+    pthread_mutex_unlock(&e->lock);
 }
 
 int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e)
-- 
2.40.1