Я фильтрую свой скомпилированный PTX через c++filt, но он только меняет некоторые имена/метки, а некоторые оставляет как есть. Например, это:
func (.param .b32 func_retval0) _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii(
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_0,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_1,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_2
)
разбирается следующим образом:
.func (.param .b32 func_retval0) _INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)(
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_0,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_1,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_2
)
а не хотя бы это:
.func (.param .b32 func_retval0) _INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)(
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_0,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_1,
.param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_2
)
Я понимаю, что c++filt не имеет явной поддержки CUDA PTX; но обратите внимание, что нераспутанные имена отличаются от распутанных в примере только добавлением суффикса _param_0
, _param_1
и т. д. (есть также вопрос, как следует распутывать префикс этих имен, но давайте забудем об этом).
- Есть ли что-то, что я могу сделать, чтобы c++filt также применялся к именам/меткам параметров? И вообще, ко всем искаженным именам C++ в файле PTX?
- Возможно ли/легко дополнить c++filt информацией о «формате» CUDA в дополнение к уже имеющимся «форматам» (
[-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}]
)? - Если c++filt нельзя использовать или адаптировать для использования в этом случае, как мне выполнить разборку?