SWDEV-378651 - add proper wavefrontsize link time option to hipRTC, in accordance with env variable GPU_ENABLE_WAVE32_MODE
This is a copy of http://gerrit-git.amd.com/c/compute/ec/hipamd/+/841299
Raising this here again since hipamd repo is frozen.
Change-Id: I8722ef55f78a9176e131fd5766fb11101b51f1b5
[ROCm/clr commit: cec579c006]
이 커밋은 다음에 포함됨:
@@ -188,6 +188,7 @@ endif()
|
||||
|
||||
set(HIPRTC_OBJECTS)
|
||||
# Add hiprtc
|
||||
set(FIXME_DIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/amdhip64.dir)
|
||||
add_subdirectory(hiprtc)
|
||||
|
||||
if(NOT WIN32)
|
||||
|
||||
@@ -96,6 +96,8 @@ if(BUILD_SHARED_LIBS)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(hiprtc PRIVATE ${FIXME_DIR}/fixme.cpp${CMAKE_CXX_OUTPUT_EXTENSION})
|
||||
add_dependencies(hiprtc amdhip64)
|
||||
target_link_libraries(hiprtc PRIVATE Dbghelp.lib)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -133,8 +133,6 @@ RTCCompileProgram::RTCCompileProgram(std::string name_) : RTCProgram(name_), fgp
|
||||
|
||||
if (GPU_ENABLE_WGP_MODE) compile_options_.push_back("-mcumode");
|
||||
|
||||
if (!GPU_ENABLE_WAVE32_MODE) compile_options_.push_back("-mwavefrontsize64");
|
||||
|
||||
compile_options_.push_back(hipVerOpt);
|
||||
compile_options_.push_back(hipVerMajor);
|
||||
compile_options_.push_back(hipVerMinor);
|
||||
@@ -261,6 +259,14 @@ bool RTCCompileProgram::transformOptions(std::vector<std::string>& compile_optio
|
||||
return findIsa();
|
||||
}
|
||||
|
||||
static inline uint getArchMajorVersion(std::string &isa) {
|
||||
if (const amd::Isa *isaIter = amd::Isa::findIsa(isa.data())) {
|
||||
return isaIter->versionMajor();
|
||||
}
|
||||
|
||||
return static_cast<uint>(-1);
|
||||
}
|
||||
|
||||
amd::Monitor RTCProgram::lock_("HIPRTC Program", true);
|
||||
|
||||
bool RTCCompileProgram::compile(const std::vector<std::string>& options, bool fgpu_rdc) {
|
||||
@@ -286,6 +292,17 @@ bool RTCCompileProgram::compile(const std::vector<std::string>& options, bool fg
|
||||
return false;
|
||||
}
|
||||
|
||||
// Decide whether to enable wave64 compilation
|
||||
auto majorVer = getArchMajorVersion(isa_);
|
||||
if (majorVer <= 9 || !GPU_ENABLE_WAVE32_MODE) {
|
||||
if (majorVer > 9) {
|
||||
LogWarning("Wavefront size 64 is experimental for gfx10 and above. Warp "
|
||||
"functions may not work");
|
||||
}
|
||||
compileOpts.push_back("-mwavefrontsize64");
|
||||
link_options_.push_back("wavefrontsize64");
|
||||
}
|
||||
|
||||
if (!compileToBitCode(compile_input_, isa_, compileOpts, build_log_, LLVMBitcode_)) {
|
||||
LogError("Error in hiprtc: unable to compile source to bitcode");
|
||||
return false;
|
||||
|
||||
새 이슈에서 참조
사용자 차단