drm/amdgpu: new queue policy, take first 2 queues of each pipe v2
authorAndres Rodriguez <andresx7@gmail.com>
Sat, 4 Feb 2017 04:30:04 +0000 (23:30 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 31 May 2017 20:48:59 +0000 (16:48 -0400)
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

v2: fix policy comment

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c

index 7e1db63b5388fc1d2273bf1a09d4977137b4e58d..dde85f110e6d05b5258121e7186e47784eaae905 100644 (file)
@@ -2838,8 +2838,8 @@ static void gfx_v7_0_compute_queue_acquire(struct amdgpu_device *adev)
                if (mec >= adev->gfx.mec.num_mec)
                        break;
 
-               /* policy: amdgpu owns all queues in the first pipe */
-               if (mec == 0 && pipe == 0)
+               /* policy: amdgpu owns the first two queues of the first MEC */
+               if (mec == 0 && queue < 2)
                        set_bit(i, adev->gfx.mec.queue_bitmap);
        }
 
index 0a7ee4d55816d0b1ffc22d35d6ce8da4aa4b6633..328549e114a46d7136f438b376fea50b846c1d52 100644 (file)
@@ -1464,8 +1464,8 @@ static void gfx_v8_0_compute_queue_acquire(struct amdgpu_device *adev)
                if (mec >= adev->gfx.mec.num_mec)
                        break;
 
-               /* policy: amdgpu owns all queues in the first pipe */
-               if (mec == 0 && pipe == 0)
+               /* policy: amdgpu owns the first two queues of the first MEC */
+               if (mec == 0 && queue < 2)
                        set_bit(i, adev->gfx.mec.queue_bitmap);
        }