mirror of
https://github.com/Tencent/ncnn.git
synced 2026-10-25 18:30:16 +08:00
non-inlined addref and release slows down overall speed, move them to header
This commit is contained in:
-167
@@ -33,32 +33,6 @@
|
||||
|
||||
namespace ncnn {
|
||||
|
||||
Mat& Mat::operator=(const Mat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
cstep = m.cstep;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
Mat Mat::clone(Allocator* _allocator) const
|
||||
{
|
||||
if (empty())
|
||||
@@ -408,64 +382,7 @@ void Mat::create_like(const VkImageMat& im, Allocator* _allocator)
|
||||
}
|
||||
#endif // NCNN_VULKAN
|
||||
|
||||
void Mat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
void Mat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator)
|
||||
allocator->fastFree(data);
|
||||
else
|
||||
fastFree(data);
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
cstep = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
|
||||
#if NCNN_VULKAN
|
||||
VkMat& VkMat::operator=(const VkMat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
cstep = m.cstep;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void VkMat::create(int _w, size_t _elemsize, VkAllocator* _allocator)
|
||||
{
|
||||
if (dims == 1 && w == _w && elemsize == _elemsize && elempack == 1 && allocator == _allocator)
|
||||
@@ -673,61 +590,6 @@ void VkMat::create_like(const VkImageMat& im, VkAllocator* _allocator)
|
||||
create(im.w, im.h, im.c, im.elemsize, im.elempack, _allocator);
|
||||
}
|
||||
|
||||
void VkMat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
void VkMat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator && data)
|
||||
{
|
||||
allocator->fastFree(data);
|
||||
}
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
cstep = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
|
||||
VkImageMat& VkImageMat::operator=(const VkImageMat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void VkImageMat::create(int _w, size_t _elemsize, VkAllocator* _allocator)
|
||||
{
|
||||
if (dims == 1 && w == _w && elemsize == _elemsize && elempack == 1 && allocator == _allocator)
|
||||
@@ -922,35 +784,6 @@ void VkImageMat::create_like(const VkImageMat& im, VkAllocator* _allocator)
|
||||
if (_dims == 3)
|
||||
create(im.w, im.h, im.c, im.elemsize, im.elempack, _allocator);
|
||||
}
|
||||
|
||||
void VkImageMat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
void VkImageMat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator && data)
|
||||
{
|
||||
allocator->fastFree(data);
|
||||
}
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
#endif // NCNN_VULKAN
|
||||
|
||||
void Mat::substract_mean_normalize(const float* mean_vals, const float* norm_vals)
|
||||
|
||||
@@ -960,6 +960,63 @@ inline void Mat::fill(T _v)
|
||||
}
|
||||
}
|
||||
|
||||
inline Mat& Mat::operator=(const Mat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
cstep = m.cstep;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline void Mat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
inline void Mat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator)
|
||||
allocator->fastFree(data);
|
||||
else
|
||||
fastFree(data);
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
cstep = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
|
||||
inline bool Mat::empty() const
|
||||
{
|
||||
return data == 0 || total() == 0;
|
||||
@@ -1163,6 +1220,32 @@ inline VkMat::~VkMat()
|
||||
release();
|
||||
}
|
||||
|
||||
inline VkMat& VkMat::operator=(const VkMat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
cstep = m.cstep;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline Mat VkMat::mapped() const
|
||||
{
|
||||
if (!allocator->mappable)
|
||||
@@ -1188,6 +1271,37 @@ inline void* VkMat::mapped_ptr() const
|
||||
return (unsigned char*)data->mapped_ptr + data->offset;
|
||||
}
|
||||
|
||||
inline void VkMat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
inline void VkMat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator && data)
|
||||
{
|
||||
allocator->fastFree(data);
|
||||
}
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
cstep = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
|
||||
inline bool VkMat::empty() const
|
||||
{
|
||||
return data == 0 || total() == 0;
|
||||
@@ -1312,6 +1426,30 @@ inline VkImageMat::~VkImageMat()
|
||||
release();
|
||||
}
|
||||
|
||||
inline VkImageMat& VkImageMat::operator=(const VkImageMat& m)
|
||||
{
|
||||
if (this == &m)
|
||||
return *this;
|
||||
|
||||
if (m.refcount)
|
||||
NCNN_XADD(m.refcount, 1);
|
||||
|
||||
release();
|
||||
|
||||
data = m.data;
|
||||
refcount = m.refcount;
|
||||
elemsize = m.elemsize;
|
||||
elempack = m.elempack;
|
||||
allocator = m.allocator;
|
||||
|
||||
dims = m.dims;
|
||||
w = m.w;
|
||||
h = m.h;
|
||||
c = m.c;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline Mat VkImageMat::mapped() const
|
||||
{
|
||||
if (!allocator->mappable || !data->mapped_ptr)
|
||||
@@ -1337,6 +1475,35 @@ inline void* VkImageMat::mapped_ptr() const
|
||||
return (unsigned char*)data->mapped_ptr + data->bind_offset;
|
||||
}
|
||||
|
||||
inline void VkImageMat::addref()
|
||||
{
|
||||
if (refcount)
|
||||
NCNN_XADD(refcount, 1);
|
||||
}
|
||||
|
||||
inline void VkImageMat::release()
|
||||
{
|
||||
if (refcount && NCNN_XADD(refcount, -1) == 1)
|
||||
{
|
||||
if (allocator && data)
|
||||
{
|
||||
allocator->fastFree(data);
|
||||
}
|
||||
}
|
||||
|
||||
data = 0;
|
||||
|
||||
elemsize = 0;
|
||||
elempack = 0;
|
||||
|
||||
dims = 0;
|
||||
w = 0;
|
||||
h = 0;
|
||||
c = 0;
|
||||
|
||||
refcount = 0;
|
||||
}
|
||||
|
||||
inline bool VkImageMat::empty() const
|
||||
{
|
||||
return data == 0 || total() == 0;
|
||||
|
||||
Reference in New Issue
Block a user