Skip to content

Commit 1014837

Browse files
vsemenov368igcbot
authored andcommitted
Disable mid-thread preemption for VC kernels using
hw thread id .
1 parent d586ab2 commit 1014837

File tree

6 files changed

+30
-11
lines changed

6 files changed

+30
-11
lines changed

IGC/VectorCompiler/igcdeps/src/cmc.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ static void setExecutionInfo(const GenXOCLRuntimeInfo::KernelInfo &BackendInfo,
827827
ExecEnv.HasBarriers = BackendInfo.getNumBarriers();
828828
ExecEnv.HasSample = BackendInfo.usesSample();
829829
ExecEnv.HasDPAS = BackendInfo.usesDPAS();
830+
ExecEnv.DisableMidThreadPreemption = BackendInfo.disableMidThreadPreemption();
830831
ExecEnv.numThreads = BackendInfo.getNumThreads();
831832
ExecEnv.HasReadWriteImages = BackendInfo.usesReadWriteImages();
832833
ExecEnv.SubgroupIndependentForwardProgressRequired = true;

IGC/VectorCompiler/include/vc/GenXCodeGen/GenXOCLRuntimeInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ class GenXOCLRuntimeInfo : public ModulePass {
179179
bool UsesGroupId = false;
180180
bool UsesReadWriteImages = false;
181181
bool UsesSample = false;
182+
bool DisableMidThreadPreemption = false;
182183

183184
unsigned GRFSizeInBytes;
184185
unsigned NumBarriers = 0;
@@ -268,6 +269,10 @@ class GenXOCLRuntimeInfo : public ModulePass {
268269
// igcmc always sets this to zero. Preserve this here.
269270
unsigned getNumThreads() const { return 0; }
270271

272+
bool disableMidThreadPreemption() const {
273+
return FuncInfo.DisableMidThreadPreemption;
274+
}
275+
271276
unsigned getNumBarriers() const { return FuncInfo.NumBarriers; }
272277
bool usesSample() const { return FuncInfo.UsesSample; }
273278
bool usesReadWriteImages() const { return FuncInfo.UsesReadWriteImages; }

IGC/VectorCompiler/include/vc/Utils/GenX/InternalMetadata.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*========================== begin_copyright_notice ============================
22
3-
Copyright (C) 2021-2023 Intel Corporation
3+
Copyright (C) 2021-2024 Intel Corporation
44
55
SPDX-License-Identifier: MIT
66
@@ -18,6 +18,8 @@ namespace vc {
1818
namespace FunctionMD {
1919
inline constexpr const char GenXKernelInternal[] = "genx.kernel.internal";
2020
inline constexpr const char VCBuiltinFunction[] = "VC.Builtin";
21+
inline constexpr const char VCDisableMidThreadPreemption[] =
22+
"vc.disable.mid.thread.preemption";
2123

2224
// amount of stack calculated for kernel
2325
// no attribute means that GenXStackUsage pass failed (recursion, etc)

IGC/VectorCompiler/lib/GenXCodeGen/GenXLowering.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ SPDX-License-Identifier: MIT
122122

123123
#include "vc/Support/GenXDiagnostic.h"
124124
#include "vc/Utils/GenX/GlobalVariable.h"
125+
#include "vc/Utils/GenX/InternalMetadata.h"
125126

126127
#include "Probe/Assertion.h"
127128
#include <algorithm>
@@ -4798,6 +4799,9 @@ bool GenXLowering::lowerHardwareThreadID(CallInst *CI) {
47984799
Res = IRB.CreateAnd(Res, MaskC);
47994800
}
48004801

4802+
CI->getModule()->getOrInsertNamedMetadata(
4803+
vc::FunctionMD::VCDisableMidThreadPreemption);
4804+
48014805
CI->replaceAllUsesWith(Res);
48024806
ToErase.push_back(CI);
48034807
return true;

IGC/VectorCompiler/lib/GenXCodeGen/GenXOCLRuntimeInfo.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,11 @@ GenXOCLRuntimeInfo::FunctionInfo::FunctionInfo(const FunctionGroup &FG,
324324
SLMSize = KernelMD.getSLMSize();
325325
IndirectCount = KernelMD.getIndirectCount();
326326

327+
if (Func->getParent()->getNamedMetadata(
328+
FunctionMD::VCDisableMidThreadPreemption)) {
329+
DisableMidThreadPreemption = true;
330+
}
331+
327332
if (ST.hasNBarrier())
328333
NumBarriers = KernelMD.getAlignedBarrierCnt(NumBarriers);
329334
} else {

IGC/VectorCompiler/test/Lowering/get_hwid.ll

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
;=========================== begin_copyright_notice ============================
22
;
3-
; Copyright (C) 2023 Intel Corporation
3+
; Copyright (C) 2023-2024 Intel Corporation
44
;
55
; SPDX-License-Identifier: MIT
66
;
@@ -14,28 +14,28 @@
1414
; COM: - Xe2-like concatination (CHECK-Xe2): Xe2
1515

1616
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=Gen9 -mtriple=spir64-unknown-unknown -S < %s | \
17-
; RUN: FileCheck %s --check-prefix=CHECK-PREDEF
17+
; RUN: FileCheck %s --check-prefixes=CHECK-PREDEF,CHECK
1818

1919
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=Gen11 -mtriple=spir64-unknown-unknown -S < %s | \
20-
; RUN: FileCheck %s --check-prefix=CHECK-PREDEF
20+
; RUN: FileCheck %s --check-prefixes=CHECK-PREDEF,CHECK
2121

2222
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeLP -mtriple=spir64-unknown-unknown -S < %s | \
23-
; RUN: FileCheck %s --check-prefix=CHECK-PREDEF
23+
; RUN: FileCheck %s --check-prefixes=CHECK-PREDEF,CHECK
2424

2525
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeHP -mtriple=spir64-unknown-unknown -S < %s | \
26-
; RUN: FileCheck %s --check-prefix=CHECK-XeHP
26+
; RUN: FileCheck %s --check-prefixes=CHECK-XeHP,CHECK
2727
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeHPG -mtriple=spir64-unknown-unknown -S < %s | \
28-
; RUN: FileCheck %s --check-prefix=CHECK-XeHP
28+
; RUN: FileCheck %s --check-prefixes=CHECK-XeHP,CHECK
2929
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeLPG -mtriple=spir64-unknown-unknown -S < %s | \
30-
; RUN: FileCheck %s --check-prefix=CHECK-XeHP
30+
; RUN: FileCheck %s --check-prefixes=CHECK-XeHP,CHECK
3131
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeLPGPlus -mtriple=spir64-unknown-unknown -S < %s | \
32-
; RUN: FileCheck %s --check-prefix=CHECK-XeHP
32+
; RUN: FileCheck %s --check-prefixes=CHECK-XeHP,CHECK
3333

3434
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=XeHPC -mtriple=spir64-unknown-unknown -S < %s | \
35-
; RUN: FileCheck %s --check-prefix=CHECK-XeHPC
35+
; RUN: FileCheck %s --check-prefixes=CHECK-XeHPC,CHECK
3636

3737
; RUN: %opt %use_old_pass_manager% -GenXLowering -march=genx64 -mcpu=Xe2 -mtriple=spir64-unknown-unknown -S < %s | \
38-
; RUN: FileCheck %s --check-prefix=CHECK-Xe2
38+
; RUN: FileCheck %s --check-prefixes=CHECK-Xe2,CHECK
3939

4040
; CHECK-PREDEF: [[RES:%[^ ]+]] = call i32 @llvm.genx.read.predef.reg.i32.i32(i32 12, i32 undef)
4141
; CHECK-PREDEF: ret i32 [[RES]]
@@ -80,6 +80,8 @@
8080
; CHECK-Xe2: [[RES:%[^ ]+]] = and i32 [[OR2]], 8191
8181
; CHECK-Xe2: ret i32 [[RES]]
8282

83+
; CHECK: !vc.disable.mid.thread.preemption = !{}
84+
8385
target datalayout = "e-p:64:64-i64:64-n8:16:32"
8486
target triple = "genx64-unknown-unknown"
8587

0 commit comments

Comments
 (0)