Я отлаживаю сбойную проблему моего приложения OpenCL.Поэтому я включил асан, чтобы определить причину проблемы.Но потом я обнаружил, что, включив asan и перекомпилировав, мое приложение не может найти устройство OpenCL.(Буквально добавив -fsanitize=address
к параметрам компилятора, моя программа не смогла использовать OpenCL).При дальнейшем тестировании я обнаружил, что средство очистки памяти работает с OenCL.
Почему это происходит?Как я могу использовать asan с OpenCL?
Редактировать: минимальный пример
#include <CL/cl.hpp>
#include <vector>
#include <iostream>
int main() {
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
if(platforms.size() == 0) std::cerr << "in asas\n";
else std::cout << "compiled normally\n";
}
Редактировать 2:
cl::Platform::get
обычно возвращается с CL_SUCCESS.В процессе получения платформ нет ошибок.
И некоторая информация о моей настройке.
GPU: GTX 780Ti
Драйвер: 418.56
OpenCL SDK: Nvidia OpenCL / POCL 1.3 с процессором и бэкэндом CUDA
Компилятор: GCC 8.2.1
ОС: Arch Linux (Kernel 5.0.7 x64)