Я хочу запустить свой код процессора под 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, если применимо.