C ++ Filter недостаточно агрессивен для некоторых искаженных имен в файлах PTX

Я фильтрую свой скомпилированный PTX через C ++ фильтром, но он только разбирает некоторые имена / метки и оставляет некоторые как есть. Например, это:

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 ++ Filter не имеет явной поддержки CUDA PTX; но обратите внимание, что неразделенные имена отличаются от разобранных в примере только добавлением _param_0, _param_1 и т.д. суффикс (также вопрос о том, как префикс этих имен должен быть разобран, но давайте забудем об этом).

  • Есть ли что-то, что я могу сделать, чтобы c ++ фильтр применился и к именам / меткам параметров? И вообще, ко всем искаженным именам C ++ в файле PTX?
  • Возможно ли / легко ли дополнить c ++ фильтром, осознавая «формат» CUDA, в дополнение к уже имеющимся «форматам» ([-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}])?
  • Если в этом случае нельзя использовать или адаптировать c ++ фильтрующее устройство для использования, как мне начать делать разборку?

1

Решение

Цитируя из документация

Реализация C ++ для функций устройства соответствует интерфейсу Itanium C ++ ABI.

c++filt реализует разделение символов Itanium C ++ ABI, поэтому он может разделять имена ядра и имена функций устройств из объектов источника PTX или ELF.

Тем не менее, другие символы, которые вы разместили, являются символами CUDA ABI. c++filt не поддерживает их, потому что не поддерживает CUDA ABI. Могут ли они выглядеть похожими или нет, не имеет значения. Если вам это действительно нужно, попросите NVIDIA добавить деманглер для символов CUDA ABI в цепочку инструментов, как это было сделано с утилитами ELF и другими внутренними компонентами.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]