我想在AddressSanitizer下运行我的CPU代码。所以我编译以下代码
#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完全不应该影响我的GPU代码。这是不正确的假设吗?
$ 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(如果相关)。