AddressSanitizer с nvcc: нехватка памяти при включении - PullRequest
1 голос
/ 06 апреля 2019

Я хочу запустить свой код процессора под AddressSanitizer. Поэтому я компилирую следующий код

#include <iostream>

int main() {

    float *d_ptr;
    size_t p = 1280;
    size_t w = 5120;
    size_t h = 960;
    auto ec = cudaMallocPitch((void **)&d_ptr, (size_t*)&p, w, h);
    if (ec != cudaSuccess){
        std::cerr << "Error code: " << cudaGetErrorString(ec) << "\n";
        return 1;
    }
    return 0;
}

с

$ nvcc -Xcompiler=-fsanitize=address problem.cu -o problem

Однако, когда я включаю -Xcompiler=-fsanitize=address, я получаю сообщение об ошибке:

Error code: out of memory

=================================================================
==3220==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 280 byte(s) in 1 object(s) allocated from:
    #0 0x7f1645de8e80 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc6e80)
    #1 0x7f164192c11f  (<unknown module>)

Direct leak of 4 byte(s) in 1 object(s) allocated from:
    #0 0x7f1645de9230 in realloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc7230)
    #1 0x7f164191e51a  (<unknown module>)
    #2 0x3d88  (<unknown module>)

Direct leak of 4 byte(s) in 1 object(s) allocated from:
    #0 0x7f1645de9230 in realloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc7230)
    #1 0x7f164191e52e  (<unknown module>)
    #2 0x3d88  (<unknown module>)

SUMMARY: AddressSanitizer: 288 byte(s) leaked in 3 allocation(s).

и когда я не включаю -Xcompiler=-fsanitize=address, я не получаю никаких ошибок.

У меня сложилось впечатление, что AddressSanitizer вообще не должен влиять на мой код графического процессора. Это неверное предположение?

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

Ubuntu 18.04, если применимо.

...