[PATCH 16/26] drm/amdgpu: new queue policy, take first 2 queues of each pipe

Felix Kuehling felix.kuehling at amd.com
Tue Apr 11 22:30:28 UTC 2017


What about GFX9?

See one more comment inline [FK].


On 17-04-06 02:21 AM, Andres Rodriguez wrote:
> Instead of taking the first pipe and giving the rest to kfd, take the
> first 2 queues of each pipe.
>
> Effectively, amdgpu and amdkfd own the same number of queues. But
> because the queues are spread over multiple pipes the hardware will be
> able to better handle concurrent compute workloads.
>
> amdgpu goes from 1 pipe to 4 pipes, i.e. from 1 compute threads to 4
> amdkfd goes from 3 pipe to 4 pipes, i.e. from 3 compute threads to 4
>
> Reviewed-by: Edward O'Callaghan <funfunctor at folklore1984.net>
> Acked-by: Christian König <christian.koenig at amd.com>
> Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 2 +-
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index 5a8ebae..c0cfcb9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -2833,21 +2833,21 @@ static void gfx_v7_0_compute_queue_acquire(struct amdgpu_device *adev)
>  		pipe = (i / adev->gfx.mec.num_queue_per_pipe)
>  			% adev->gfx.mec.num_pipe_per_mec;
>  		mec = (i / adev->gfx.mec.num_queue_per_pipe)
>  			/ adev->gfx.mec.num_pipe_per_mec;
>  
>  		/* we've run out of HW */
>  		if (mec > adev->gfx.mec.num_mec)
>  			break;
>  
>  		/* policy: amdgpu owns all queues in the first pipe */

[FK] The comments needs to be updated (same for GFX8 below).

> -		if (mec == 0 && pipe == 0)
> +		if (mec == 0 && queue < 2)
>  			set_bit(i, adev->gfx.mec.queue_bitmap);
>  	}
>  
>  	/* update the number of active compute rings */
>  	adev->gfx.num_compute_rings =
>  		bitmap_weight(adev->gfx.mec.queue_bitmap, AMDGPU_MAX_COMPUTE_QUEUES);
>  
>  	/* If you hit this case and edited the policy, you probably just
>  	 * need to increase AMDGPU_MAX_COMPUTE_RINGS */
>  	WARN_ON(adev->gfx.num_compute_rings > AMDGPU_MAX_COMPUTE_RINGS);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 70119c5..f0c1a3f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -1453,21 +1453,21 @@ static void gfx_v8_0_compute_queue_acquire(struct amdgpu_device *adev)
>  		pipe = (i / adev->gfx.mec.num_queue_per_pipe)
>  			% adev->gfx.mec.num_pipe_per_mec;
>  		mec = (i / adev->gfx.mec.num_queue_per_pipe)
>  			/ adev->gfx.mec.num_pipe_per_mec;
>  
>  		/* we've run out of HW */
>  		if (mec > adev->gfx.mec.num_mec)
>  			break;
>  
>  		/* policy: amdgpu owns all queues in the first pipe */
> -		if (mec == 0 && pipe == 0)
> +		if (mec == 0 && queue < 2)
>  			set_bit(i, adev->gfx.mec.queue_bitmap);
>  	}
>  
>  	/* update the number of active compute rings */
>  	adev->gfx.num_compute_rings =
>  		bitmap_weight(adev->gfx.mec.queue_bitmap, AMDGPU_MAX_COMPUTE_QUEUES);
>  
>  	/* If you hit this case and edited the policy, you probably just
>  	 * need to increase AMDGPU_MAX_COMPUTE_RINGS */
>  	if (WARN_ON(adev->gfx.num_compute_rings > AMDGPU_MAX_COMPUTE_RINGS))



More information about the amd-gfx mailing list