diff options
author | Sayak Biswas <sayakAMD> | 2021-10-21 21:57:17 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-10-22 13:15:29 +0300 |
commit | d092933abbadb3a6d5ab53a0b2b3b865cd5c9079 (patch) | |
tree | 9d44286512efc1db894257fa9ed786a5049bb41b /intern/cycles/device/hip/device_impl.cpp | |
parent | d1fcf93f039b0546dfd01c33daf50bd135e34344 (diff) |
Cycles: various fixes for HIP and compilation of HIP binaries
* Additional structs added to the hipew loader for device props
* Adds hipRTC functions to the loader for future usage
* Enables CPU+GPU usage for HIP
* Cleanup to the adaptive kernel compilation process
* Fix for kernel compilation failures with HIP with latest master
Ref T92393, D12958
Diffstat (limited to 'intern/cycles/device/hip/device_impl.cpp')
-rw-r--r-- | intern/cycles/device/hip/device_impl.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/intern/cycles/device/hip/device_impl.cpp b/intern/cycles/device/hip/device_impl.cpp index 583ab8ae208..4ae714913ab 100644 --- a/intern/cycles/device/hip/device_impl.cpp +++ b/intern/cycles/device/hip/device_impl.cpp @@ -208,7 +208,7 @@ bool HIPDevice::use_adaptive_compilation() return DebugFlags().hip.adaptive_compile; } -/* Common NVCC flags which stays the same regardless of shading model, +/* Common HIPCC flags which stays the same regardless of shading model, * kernel sources md5 and only depends on compiler or compilation settings. */ string HIPDevice::compile_kernel_get_common_cflags(const uint kernel_features) @@ -239,11 +239,13 @@ string HIPDevice::compile_kernel(const uint kernel_features, int major, minor; hipDeviceGetAttribute(&major, hipDeviceAttributeComputeCapabilityMajor, hipDevId); hipDeviceGetAttribute(&minor, hipDeviceAttributeComputeCapabilityMinor, hipDevId); + hipDeviceProp_t props; + hipGetDeviceProperties(&props, hipDevId); /* Attempt to use kernel provided with Blender. */ if (!use_adaptive_compilation()) { if (!force_ptx) { - const string fatbin = path_get(string_printf("lib/%s_sm_%d%d.cubin", name, major, minor)); + const string fatbin = path_get(string_printf("lib/%s_%s.fatbin", name, props.gcnArchName)); VLOG(1) << "Testing for pre-compiled kernel " << fatbin << "."; if (path_exists(fatbin)) { VLOG(1) << "Using precompiled kernel."; @@ -283,17 +285,21 @@ string HIPDevice::compile_kernel(const uint kernel_features, const string kernel_md5 = util_md5_string(source_md5 + common_cflags); const char *const kernel_ext = "genco"; + std::string options; # ifdef _WIN32 - const char *const options = - "save-temps -Wno-parentheses-equality -Wno-unused-value --hipcc-func-supp"; + options.append("Wno-parentheses-equality -Wno-unused-value --hipcc-func-supp -ffast-math"); # else - const char *const options = - "save-temps -Wno-parentheses-equality -Wno-unused-value --hipcc-func-supp -O3 -ggdb"; + options.append("Wno-parentheses-equality -Wno-unused-value --hipcc-func-supp -O3 -ffast-math"); # endif +# ifdef _DEBUG + options.append(" -save-temps"); +# endif + options.append(" --amdgpu-target=").append(props.gcnArchName); + const string include_path = source_path; - const char *const kernel_arch = force_ptx ? "compute" : "sm"; + const char *const kernel_arch = props.gcnArchName; const string fatbin_file = string_printf( - "cycles_%s_%s_%d%d_%s", name, kernel_arch, major, minor, kernel_md5.c_str()); + "cycles_%s_%s_%s", name, kernel_arch, kernel_md5.c_str()); const string fatbin = path_cache_get(path_join("kernels", fatbin_file)); VLOG(1) << "Testing for locally compiled kernel " << fatbin << "."; if (path_exists(fatbin)) { @@ -350,7 +356,7 @@ string HIPDevice::compile_kernel(const uint kernel_features, string command = string_printf("%s -%s -I %s --%s %s -o \"%s\"", hipcc, - options, + options.c_str(), include_path.c_str(), kernel_ext, source_path.c_str(), |