[Mesa-dev] [PATCH 3/4] nvc0/ir: dual issue two min/max instructions

karol herbst karolherbst at gmail.com
Sat Aug 13 17:15:45 UTC 2016


2016-08-13 17:43 GMT+02:00 Tobias Klausmann
<tobias.johannes.klausmann at mni.thm.de>:
> Hi Karol,
>
> one question inline.
>
>
> On 13.08.2016 12:02, Karol Herbst wrote:
>>
>> min/max pairs can be dual issued on Kepler1
>>
>> changes for ./GpuTest /test=pixmark_piano /benchmark /no_scorebox /msaa=0
>> /benchmark_duration_ms=60000 /width=1024 /height=640:
>>
>> without dual_issue pass:
>> inst_executed: 1.03G
>> inst_issued1: 614M -> 580M
>> inst_issued2: 213M -> 230M
>>
>> score: 1021 -> 1030
>>
>> with dual_issue pass:
>> inst_executed: 1.03G
>> inst_issued1: 535M -> 500M
>> inst_issued2: 254M -> 271M
>>
>> score: 1052 -> 1056
>>
>> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
>> ---
>>   .../drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp        | 14
>> ++++++++++++--
>>   1 file changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
>> b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
>> index 8ce8c19..ea44e6f 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
>> @@ -628,9 +628,19 @@ bool TargetNVC0::canDualIssue(const Instruction *a,
>> const Instruction *b) const
>>         if (a->op == OP_MOV || b->op == OP_MOV)
>>            return true;
>>         if (clA == clB) {
>> -         // only F32 arith or integer additions
>> -         if (clA != OPCLASS_ARITH)
>> +         switch (clA) {
>> +         // there might be more
>
>
> are there more?

no clue. those OPCLASS don't really map to the hw unit used to execute
those instructions.
max/min are treated like arithm on kepler, and I just assumed there is
something.

>
>> +         case OPCLASS_COMPARE:
>> +            if ((a->op == OP_MIN || a->op == OP_MAX) &&
>> +                (b->op == OP_MIN || b->op == OP_MAX))
>> +               break;
>> +            return false;
>> +         case OPCLASS_ARITH:
>> +            break;
>> +         default:
>>               return false;
>> +         }
>> +         // only F32 arith or integer additions
>>            return (a->dType == TYPE_F32 || a->op == OP_ADD ||
>>                    b->dType == TYPE_F32 || b->op == OP_ADD);
>>         }
>
>


More information about the mesa-dev mailing list