Skip to content

Commit 81f6346

Browse files
committed
First commit, triton builds on windows
Signed-off-by: Gregory Shimansky <[email protected]>
1 parent 35130dc commit 81f6346

File tree

25 files changed

+463
-139
lines changed

25 files changed

+463
-139
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ python/triton*.egg-info/
1010
python/triton/_C/*.pyd
1111
python/triton/_C/*.so
1212
python/triton/_C/*.dylib
13+
python/triton/_C/*.pdb
14+
python/triton/_C/*.exe
15+
python/triton/_C/*.ilk
1316

1417
# Backends copied from submodules
1518
python/triton/backends/
@@ -46,6 +49,10 @@ cuobjdump
4649
nvdisasm
4750
ptxas
4851

52+
cuobjdump.exe
53+
nvdisasm.exe
54+
ptxas.exe
55+
4956
# Third-party include
5057
third_party/nvidia/backend/include
5158
third_party/nvidia/backend/lib/cupti

CMakeLists.txt

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,46 @@ endif()
88

99
include(ExternalProject)
1010

11-
set(CMAKE_CXX_STANDARD 17)
11+
set(CMAKE_CXX_STANDARD 20)
1212

1313
set(CMAKE_INCLUDE_CURRENT_DIR ON)
1414

1515
project(triton)
1616
include(CTest)
1717

18-
if(NOT WIN32)
19-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
20-
endif()
21-
22-
18+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
2319

2420
# Options
21+
if(WIN32)
22+
set(DEFAULT_BUILD_PROTON OFF)
23+
else()
24+
set(DEFAULT_BUILD_PROTON ON)
25+
endif()
26+
27+
# Define the option with the determined default value
28+
option(TRITON_BUILD_PROTON "Build the Triton Proton profiler" ${DEFAULT_BUILD_PROTON})
2529
option(TRITON_BUILD_TUTORIALS "Build C++ Triton tutorials" ON)
2630
option(TRITON_BUILD_PYTHON_MODULE "Build Python Triton bindings" OFF)
27-
option(TRITON_BUILD_PROTON "Build the Triton Proton profiler" ON)
2831
option(TRITON_BUILD_UT "Build C++ Triton Unit Tests" ON)
2932
set(TRITON_CODEGEN_BACKENDS "" CACHE STRING "Enable different codegen backends")
3033

3134
# Ensure Python3 vars are set correctly
3235
# used conditionally in this file and by lit tests
3336

3437
# Customized release build type with assertions: TritonRelBuildWithAsserts
35-
set(CMAKE_C_FLAGS_TRITONRELBUILDWITHASSERTS "-O2 -g")
36-
set(CMAKE_CXX_FLAGS_TRITONRELBUILDWITHASSERTS "-O2 -g")
37-
set(CMAKE_C_FLAGS_TRITONBUILDWITHO1 "-O1")
38-
set(CMAKE_CXX_FLAGS_TRITONBUILDWITHO1 "-O1")
38+
if(NOT MSVC)
39+
set(CMAKE_C_FLAGS_TRITONRELBUILDWITHASSERTS "-O2 -g")
40+
set(CMAKE_CXX_FLAGS_TRITONRELBUILDWITHASSERTS "-O2 -g")
41+
set(CMAKE_C_FLAGS_TRITONBUILDWITHO1 "-O1")
42+
set(CMAKE_CXX_FLAGS_TRITONBUILDWITHO1 "-O1")
43+
else()
44+
set(CMAKE_C_FLAGS_TRITONRELBUILDWITHASSERTS "/Zi /Ob0 /Od /RTC1 /bigobj")
45+
set(CMAKE_CXX_FLAGS_TRITONRELBUILDWITHASSERTS "/Zi /Ob0 /Od /RTC1 /bigobj ")
46+
set(CMAKE_EXE_LINKER_FLAGS_TRITONRELBUILDWITHASSERTS "/debug:fastlink /INCREMENTAL")
47+
set(CMAKE_MODULE_LINKER_FLAGS_TRITONRELBUILDWITHASSERTS "/debug:fastlink /INCREMENTAL")
48+
set(CMAKE_SHARED_LINKER_FLAGS_TRITONRELBUILDWITHASSERTS "/debug:fastlink /INCREMENTAL")
49+
set(CMAKE_STATIC_LINKER_FLAGS_TRITONRELBUILDWITHASSERTS "/debug:fastlink /INCREMENTAL")
50+
endif()
3951

4052
# Default build type
4153
if(NOT CMAKE_BUILD_TYPE)
@@ -53,7 +65,15 @@ endif()
5365

5466
# Compiler flags
5567
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
56-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_FORMAT_MACROS -fPIC -std=gnu++17")
68+
if(NOT MSVC)
69+
if(NOT WIN32)
70+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_FORMAT_MACROS -fPIC -std=gnu++17")
71+
else()
72+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_FORMAT_MACROS -std=gnu++17 -Wno-deprecated")
73+
endif()
74+
else()
75+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_FORMAT_MACROS /wd4244 /wd4624 /wd4715 /wd4530")
76+
endif()
5777

5878

5979
# #########
@@ -107,7 +127,11 @@ endfunction()
107127

108128

109129
# Disable warnings that show up in external code (gtest;pybind11)
110-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-covered-switch-default -fvisibility=hidden")
130+
if(NOT MSVC)
131+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-covered-switch-default -fvisibility=hidden")
132+
else()
133+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX-")
134+
endif()
111135

112136
include_directories(".")
113137
include_directories(${MLIR_INCLUDE_DIRS})
@@ -117,7 +141,8 @@ include_directories(${PROJECT_BINARY_DIR}/include) # Tablegen'd files
117141
include_directories(${PROJECT_SOURCE_DIR}/third_party)
118142
include_directories(${PROJECT_BINARY_DIR}/third_party) # Tablegen'd files
119143

120-
# link_directories(${LLVM_LIBRARY_DIR})
144+
link_directories(${LLVM_LIBRARY_DIR})
145+
121146
add_subdirectory(include)
122147
add_subdirectory(lib)
123148

@@ -146,6 +171,8 @@ if(TRITON_BUILD_PYTHON_MODULE)
146171
# using pip install.
147172
include_directories(${PYTHON_INCLUDE_DIRS})
148173
include_directories(${PYBIND11_INCLUDE_DIR})
174+
message(STATUS "PYTHON_LIB_DIRS ${PYTHON_LIB_DIRS}")
175+
link_directories(${PYTHON_LIB_DIRS})
149176
else()
150177
# Otherwise, we might be building from top CMakeLists.txt directly.
151178
# Try to find Python and pybind11 packages.
@@ -228,7 +255,7 @@ if(TRITON_BUILD_PYTHON_MODULE)
228255
LLVMAArch64CodeGen
229256
LLVMAArch64AsmParser
230257
)
231-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
258+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64")
232259
list(APPEND TRITON_LIBRARIES
233260
LLVMX86CodeGen
234261
LLVMX86AsmParser
@@ -263,6 +290,8 @@ if(TRITON_BUILD_PYTHON_MODULE)
263290
target_link_libraries(triton PUBLIC ${TRITON_LIBRARIES})
264291
if(WIN32)
265292
target_link_libraries(triton PRIVATE ${CMAKE_DL_LIBS})
293+
set_target_properties(triton PROPERTIES SUFFIX ".pyd")
294+
set_target_properties(triton PROPERTIES PREFIX "lib")
266295
else()
267296
target_link_libraries(triton PRIVATE z)
268297
endif()
@@ -289,6 +318,10 @@ if(NOT TRITON_BUILD_PYTHON_MODULE)
289318
add_subdirectory(third_party/${CODEGEN_BACKEND})
290319
endforeach()
291320
endif()
321+
if(WIN32)
322+
option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON)
323+
option(gtest_disable_pthreads "Disable uses of pthreads in gtest." ON)
324+
endif()
292325

293326
add_subdirectory(third_party/f2reduce)
294327
add_subdirectory(bin)

bin/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ mlir_check_all_link_libraries(triton-lsp)
7979

8080

8181
add_llvm_executable(triton-llvm-opt
82+
PARTIAL_SOURCES_INTENDED
8283
triton-llvm-opt.cpp
8384

8485
PARTIAL_SOURCES_INTENDED

bin/RegisterTritonDialects.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
#include "triton/Dialect/TritonGPU/IR/Dialect.h"
1717
#include "triton/Dialect/TritonNvidiaGPU/IR/Dialect.h"
1818

19-
// Below headers will allow registration to ROCm passes
19+
#ifndef WIN32
2020
#include "TritonAMDGPUToLLVM/Passes.h"
2121
#include "TritonAMDGPUTransforms/Passes.h"
2222
#include "TritonAMDGPUTransforms/TritonGPUConversion.h"
23+
#endif
2324

2425
#include "triton/Dialect/Triton/Transforms/Passes.h"
2526
#include "triton/Dialect/TritonGPU/Transforms/Passes.h"
@@ -75,6 +76,7 @@ inline void registerTritonDialects(mlir::DialectRegistry &registry) {
7576
mlir::triton::registerConvertTritonGENToLLVM();
7677
mlir::triton::registerTritonGENToLLVMPasses();
7778

79+
#ifndef WIN32
7880
// TritonAMDGPUToLLVM passes
7981
mlir::triton::registerConvertTritonAMDGPUToLLVM();
8082
mlir::triton::registerConvertBuiltinFuncToLLVM();
@@ -88,6 +90,7 @@ inline void registerTritonDialects(mlir::DialectRegistry &registry) {
8890
mlir::registerTritonAMDGPUStreamPipeline();
8991
mlir::registerTritonAMDGPUStreamPipelineV2();
9092
mlir::registerTritonAMDGPUCanonicalizePointers();
93+
#endif
9194

9295
// TODO: register Triton & TritonGPU passes
9396
registry.insert<mlir::triton::TritonDialect, mlir::cf::ControlFlowDialect,

include/triton/Conversion/TritonToTritonGPU/TritonToTritonGPUPass.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <memory>
55
#include <optional>
6+
#include <string>
67

78
namespace mlir {
89

lib/Tools/LinearLayout.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ void dumpMatrix(uint64_t *m, int numRows, int numCols) {
4444
}
4545
}
4646

47+
static inline uint32_t countTrailingZeros(uint32_t x) {
48+
#ifdef _MSC_VER
49+
unsigned long index;
50+
_BitScanForward(&index, x);
51+
return index;
52+
#else
53+
return __builtin_ctz(x);
54+
#endif
55+
}
56+
4757
// Build a matrix of size sum(outDimSizeLog2) x sum(inDimSizeLog2) representing
4858
// the bases of the given layout. This can then be used by f2reduce.
4959
//
@@ -460,7 +470,7 @@ int32_t LinearLayout::getNumConsecutiveInOut() const {
460470
}
461471
}
462472
}
463-
int32_t trailingZeros = otherBits != 0 ? __builtin_ctz(otherBits) : 31;
473+
int32_t trailingZeros = otherBits != 0 ? countTrailingZeros(otherBits) : 31;
464474

465475
return 1 << std::min(consec, trailingZeros);
466476
}
@@ -1036,7 +1046,7 @@ LinearLayout::getFreeVariableMasks() const {
10361046
if (mat[r] == 0) {
10371047
continue;
10381048
}
1039-
basicVars.insert(__builtin_ctzll(mat[r]));
1049+
basicVars.insert(countTrailingZeros(mat[r]));
10401050
}
10411051

10421052
llvm::MapVector<StringAttr, int32_t> ret;

0 commit comments

Comments
 (0)