ошибка сегментации при подключении функции cudnn

Я пытаюсь подключить функции библиотеки cudnn. Первый метод работает, а второй нет.

первый метод:

// hook.cpp

typedef int(*cudnnConvolutionForward_fp)(void* , const void* , const void* , const void* , const void* , void* , void* , size_t ,  const void*, const void* , void*);

int cudnnConvolutionForward(void* handle, const void* alpha, const void* xDesc, const void* x, const void* convDesc, void* algo, void* workSpace, size_t bytes,  const void *beta, const void* yDesc, void *y) {
int ret;
cudnnConvolutionForward_fp orig_cudnnConvolutionForward;
orig_cudnnConvolutionForward = reinterpret_cast<cudnnConvolutionForward_fp>(dlsym(RTLD_NEXT, "cudnnConvolutionForward"));

ret = orig_cudnnConvolutionForward(handle, alpha, xDesc, x, convDesc, algo, workSpace, bytes, beta,  yDesc, y);

std::cout << "hook success: cunnConvolutionForward";
return ret;
}

Затем скомпилируйте hook.cpp в hook.so. Предположим, что тестовая программа называется «cudnnTest», и назовите ее:

LD_PRELOAD=hook.so ./cudnnTest

второй метод:

// hook.cpp

typedef int(*cudnnConvolutionForward_fp)(void* , const void* , const void* , const void* , const void* , void* , void* , size_t ,  const void*, const void* , void*);

static void print_message(const std::string& str) {
std::cout << "hook success: " << str << std::endl;
}

void* general_hook(const std::string& str) {
void* ret;
ret = dlsym(RTLD_NEXT, str.c_str());
print_message(str);
return ret;
}

cudnnConvolutionForward_fp cudnnConvolutionForward = reinterpret_cast<cudnnConvolutionForward_fp>(general_hook("cudnnConvolutionForward"));

скомпилируйте hook.cpp в hook.so и протестируйте таким же образом, но он показывает:

hook success: cudnnConvolutionForward
Segmentation fault (core dumped)

используя gdb для отладки, он показывает:

Thread 1 "cudnnTest" received signal SIGSEGV, Segmentation fault.
0x00007ffff7dd6098 in cudnnConvolutionForward () from ../hooktest/cudnn_hook.so
(gdb) bt
#0  0x00007ffff7dd6098 in cudnnConvolutionForward () from ../hooktest/cudnn_hook.so
#1  0x000000000040189d in main ()

Кто-нибудь может мне помочь и выяснить, что не так с второй метод? большое спасибо!

0

Решение

Задача ещё не решена.

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

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

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