2013-08-28 3 views
3

Чтобы проверить нарушения доступа к памяти на CPU, есть Valgrind/memcheck; для кода CUDA на графическом процессоре есть CUDA memcheck. Есть ли эквивалент этих инструментов для OpenCL?эквивалент Valgrind для OpenCL

+0

Вероятно, нет, Valgrind эмулирует Linux, и CUDA MemCheck вероятно, подражает, или работает на уровне драйвера. Если кто-то не написал пользовательский драйвер OpenCL, я не вижу, как это будет возможно. Какую память вы делаете? –

+0

Ничего особенного, я просто хочу исключить нарушения доступа к памяти GPU. Я получаю нарушение доступа к памяти в коде ЦП при вызове 'clFinish()'. –

+0

Вы пробовали использовать тот же код на CPU, а затем использовать valgrind? Я не совсем уверен, что это поможет, но если есть какие-либо нарушения доступа в коде OpenCL, это должно произойти и на процессоре, и его следует поймать valgrind. –

ответ

5

В настоящее время существует симулятор устройств OpenCL под названием Oclgrind, который работает аналогично Valgrind для обеспечения функции «memcheck» (между прочим).

Это с открытым исходным кодом, и есть бинарные сборки для различной доступной платформы. Как Valgrind это не быстро, но использовать его очень просто:

$ oclgrind ./myapp 

Invalid write of size 4 at global memory address 0x3000000000010 
    Kernel: write_out_of_bounds 
    Entity: Global(4,0,0) Local(4,0,0) Group(0,0,0) 
    store i32 %tmp15, i32 addrspace(1)* %tmp19, align 4, !dbg !24 
    At line 4 of input.cl: 
     c[i] = a[i] + b[i] 
3

Вы посмотрели http://github.com/KhronosGroup/webcl-validator? Он берет ваш источник ядра OpenCL и использует его с кодом проверки границ. Чтение/запись OOB в настоящее время отбрасывается, но вы можете изменить инструментальное ядро ​​(или сам инструмент), чтобы он сообщал о нарушении доступа.

Смежные вопросы