Используя адресное дезинфицирующее средство с OpenCV

Я пытаюсь использовать Address Sanitizer от Google с проектом CUDA, точнее с функциями OpenCV cuda. Однако я получил ошибку "недостаточно памяти" при первом вызове cuda.

OpenCV Error: Gpu API call (out of memory) in getDevice, file opencv-2.4.11/src/opencv-2.4.11/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp, line 664
terminate called after throwing an instance of 'cv::Exception'
  what():  opencv-2.4.11/src/opencv-2.4.11/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp:664: error: (-217) out of memory in function getDevice

Это может быть воспроизведено с

#include <opencv2/gpu/gpu.hpp>
int main()
{
  cv::gpu::printCudaDeviceInfo(cv::gpu::getDevice());
  return 0;
}

составлено с

clang++ -fsanitize=address -lstdc++ -lopencv_gpu -lopencv_core -o sanitizer sanitizer.cpp && LD_LIBRARY_PATH=/usr/local/lib ./sanitizer

У меня такой же результат с gcc. Я также попробовал занести в черный список функции cuda безрезультатно.

Теперь с помощью cuda без opencv:

#include <cuda_runtime.h>
int main()
{
  int count = -1;
  cudaGetDevice(&count);
  cout << "Device count: " << count << endl;
  return 0;
}
clang++ -O1 -g -fsanitize=address -fsanitize-blacklist=asan.blacklist -stdlib=libstdc++ -lstdc++ -I/opt/cuda/include -L/opt/cuda/lib64 -lcudart  -o sanitizer sanitizer.cpp && ./sanitizer

Дезинфицирующее средство останавливается при утечке памяти:

=================================================================
==25344==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 136 byte(s) in 1 object(s) allocated from:
    #0 0x4bc4a2  (/home/pluc/work/tests/sanitizer+0x4bc4a2)
    #1 0x7f71f0fa69ba  (<unknown module>)

SUMMARY: AddressSanitizer: 136 byte(s) leaked in 1 allocation(s).

У меня вопрос: как я могу использовать средство для очистки адресов, чтобы дезинфицировать мое программное обеспечение, не застревая с этим? Как я могу хотя бы должным образом занести в черный список все звонки, связанные с cuda?

Я не нашел ничего релевантного в известной поисковой системе. Как будто люди не используют куда, асан или то и другое. У парней просто сборка с полностью отключенной cuda?

Я предполагаю, что Асану тяжело с управлением памятью cuda, но я ищу способ использовать этот инструмент по крайней мере для остальной части моей кодовой базы.

1 ответ

Для людей, которые ищут здесь: решение, которое я нашел (на основе связанной проблемы github, упомянутой @BenC), заключается в запуске export ASAN_OPTIONS=protect_shadow_gap=0.

Мне пока не удалось найти способ изменить поведение при компиляции.

Другие вопросы по тегам