Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
N
NiuTrans.Tensor
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
Emmay
NiuTrans.Tensor
Commits
cb9c88cb
Commit
cb9c88cb
authored
Sep 12, 2018
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add signature to XMem and XTensor
parent
0e2bd767
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
67 行增加
和
101 行删除
+67
-101
source/tensor/XMem.cpp
+49
-39
source/tensor/XMem.h
+7
-1
source/tensor/XTensor.cpp
+8
-55
source/tensor/XTensor.h
+3
-6
没有找到文件。
source/tensor/XMem.cpp
查看文件 @
cb9c88cb
...
...
@@ -46,6 +46,7 @@ XMem::XMem()
indexOffset
=
-
1
;
name
=
new
char
[
64
];
strcpy
(
name
,
"xmem"
);
signature
=
0
;
}
/*
...
...
@@ -67,6 +68,7 @@ XMem::XMem(int myDevID, MEMPOOL_MODE myMode, MTYPE myBlockSize, int myBlockNum,
indexOffset
=
-
1
;
name
=
new
char
[
64
];
strcpy
(
name
,
"xmem"
);
signature
=
0
;
Initialize
(
myDevID
,
myMode
,
myBlockSize
,
myBlockNum
,
myBufSize
);
}
...
...
@@ -153,6 +155,8 @@ void XMem::Initialize(int myDevID, MEMPOOL_MODE myMode, MTYPE myBlockSize, int m
if
(
myMode
==
FREE_ON_THE_FLY
)
SetIndex
(
MILLION
);
signature
++
;
}
/* free memory */
...
...
@@ -189,11 +193,16 @@ void XMem::Free(int myDevID, void * mem)
/* on GPUs */
else
{
#ifdef USE_CUDA
int
devIDBackup
=
-
1
;
cudaGetDevice
(
&
devIDBackup
);
SetDevice
(
myDevID
);
cudaError_t
error
=
cudaFree
((
char
*
)
mem
);
if
(
error
!=
cudaSuccess
){
ShowNTErrors
(
"Cannot free the memory."
);
}
SetDevice
(
devIDBackup
);
#else
ShowNTErrors
(
"Please specify USE_CUDA for compiling this program."
);
#endif
...
...
@@ -201,6 +210,15 @@ void XMem::Free(int myDevID, void * mem)
}
/*
get signature
<< return - return the signature
*/
MTYPE
XMem
::
GetSignature
()
{
return
signature
;
}
/*
use string as the name of the memory pool
>> myName - name of the memory pool
*/
...
...
@@ -510,10 +528,12 @@ void * XMem::AllocBuf(int myDevID, MTYPE mySize, int pitch)
release a piece of memory
>> p - pointer to the memory piece we intend to release
>> size - size of the memory piece to release
>> code - code the memory
*/
void
XMem
::
Release
(
void
*
p
,
MTYPE
size
)
void
XMem
::
Release
(
void
*
p
,
MTYPE
size
,
MTYPE
code
)
{
Release
(
devID
,
p
,
size
);
if
(
code
==
signature
)
Release
(
devID
,
p
,
size
);
}
/*
...
...
@@ -998,39 +1018,7 @@ void XMem::RebuildIndex()
MPieceNode
*
backup
=
memIndex2
;
memIndex2
=
memIndex
;
memIndex
=
backup
;
/*bool hhh = recordp != NULL ? false : true;
for(int i = 0; i < indexEntryNum; i++){
MPieceNode * entry = memIndex + indexEntryNum + i;
MPieceNode * last = entry;
MPieceNode * node = entry->next;
while(node != NULL){
CheckNTErrors(node->pre == last, "XSomething is wrong!");
CheckNTErrors(last->next == node, "XSomething is wrong!");
last = node;
if(node->pReal == recordp)
hhh = true;
if(node->size == 0){
MPieceNode * next = node->next;
node = next;
}
else{
CheckNTErrors(node->pReal != NULL, "Illegal pointer!");
node = node->next;
}
}
}
if(!hhh){
int nnn = 0;
}*/
memIndex
=
backup
;
nodeNumUsed
=
nodeNumUsed2
;
}
...
...
@@ -1103,10 +1091,32 @@ void * XMem::GetAddress()
/* clear it */
void
XMem
::
Clear
()
{
for
(
int
i
=
0
;
i
<
blockNum
;
i
++
)
blocks
[
i
].
used
=
0
;
curBlock
=
blocks
;
curBlockID
=
0
;
if
(
mode
==
UNI_FREE
)
{
for
(
int
i
=
0
;
i
<
blockNum
;
i
++
)
blocks
[
i
].
used
=
0
;
curBlock
=
blocks
;
curBlockID
=
0
;
}
else
if
(
mode
==
FREE_ON_THE_FLY
)
{
nodeNumUsed
=
indexEntryNum
*
2
;
memset
(
memIndex
,
0
,
sizeof
(
MPieceNode
)
*
indexEntryNum
*
2
);
for
(
int
i
=
0
;
i
<=
curBlockID
;
i
++
)
{
blocks
[
i
].
head
=
NULL
;
blocks
[
i
].
used
=
0
;
if
(
i
>
0
)
{
blocks
[
i
].
size
=
blocks
[
i
].
sizeDesired
;
Free
(
devID
,
blocks
[
i
].
mem
);
blocks
[
i
].
mem
=
NULL
;
}
}
curBlock
=
blocks
;
curBlockID
=
0
;
}
else
{
ShowNTErrors
(
"Something is wrong!"
);
}
signature
++
;
}
/* clear the buffer */
...
...
source/tensor/XMem.h
查看文件 @
cb9c88cb
...
...
@@ -152,6 +152,9 @@ public:
/* mode of running the memory pool */
MEMPOOL_MODE
mode
;
/* signature */
MTYPE
signature
;
/* indicates whether the memory allocation is static */
bool
isStatic
;
...
...
@@ -252,6 +255,9 @@ public:
/* free a piece of memory */
void
Free
(
int
myDevID
,
void
*
mem
);
/* get signature */
MTYPE
GetSignature
();
/* use string as the name of the memory pool */
void
SetName
(
const
char
*
myName
);
...
...
@@ -299,7 +305,7 @@ public:
void
*
AllocBuf
(
int
myDevID
,
MTYPE
mySize
,
int
pitch
=
BUF_PITCH
);
/* release a piece of memory */
void
Release
(
void
*
p
,
MTYPE
size
);
void
Release
(
void
*
p
,
MTYPE
size
,
MTYPE
code
);
/* release a piece of memory */
void
Release
(
int
myDevID
,
void
*
p
,
MTYPE
size
);
...
...
source/tensor/XTensor.cpp
查看文件 @
cb9c88cb
...
...
@@ -221,7 +221,8 @@ XTensor::~XTensor()
void
XTensor
::
Init
()
{
id
=
-
1
;
mem
=
NULL
;;
mem
=
NULL
;
signature
=
0
;
data
=
NULL
;
dataHost
=
NULL
;
dataP
=
NULL
;
...
...
@@ -254,7 +255,7 @@ void XTensor::DestroyData()
else
if
(
data
!=
NULL
&&
isInGlobalMem
)
FreeData
(
this
,
mem
);
else
if
(
data
!=
NULL
)
mem
->
Release
(
data
,
GetDataSizeInChar
());
mem
->
Release
(
data
,
GetDataSizeInChar
()
,
signature
);
data
=
NULL
;
if
(
dataHost
!=
NULL
)
...
...
@@ -1135,15 +1136,15 @@ resize a tensor with a specified tensor size
bool
XTensor
::
Resize
(
const
int
myOrder
,
const
int
*
myDimSize
,
const
TENSOR_DATA_TYPE
myDataType
,
const
float
myDenseRatio
)
{
/* free old mem */
if
(
data
!=
NULL
){
if
(
mem
==
NULL
)
XMemFree
(
devID
,
data
);
else
mem
->
Release
(
data
,
GetDataSizeInChar
());
mem
->
Release
(
data
,
GetDataSizeInChar
()
,
signature
);
}
signature
=
mem
!=
NULL
?
mem
->
GetSignature
()
:
0
;
order
=
myOrder
;
unitNum
=
1
;
...
...
@@ -1245,56 +1246,6 @@ bool XTensor::Resize(const int myOrder, const int * myDimSize,
}
/*
resize a tensor with a specified tensor size (with no data filled)
>> myOrder - order of the tensor
>> myDimSize - the size of each dimension
>> myDataType - unit size (e.g., int, float, and double)
>> myDenseRatio - how often an element has non-zero value
<< return - succeeded or not
*/
bool
XTensor
::
ResizeWithNoData
(
const
int
myOrder
,
const
int
*
myDimSize
,
const
TENSOR_DATA_TYPE
myDataType
,
const
float
myDenseRatio
)
{
order
=
myOrder
;
unitNum
=
1
;
unitNumNonZero
=
0
;
/* free old mem */
if
(
data
!=
NULL
&&
mem
==
NULL
)
delete
[]
(
char
*
)
data
;
bool
filledData
=
true
;
bool
zeroData
=
false
;
for
(
int
i
=
0
;
i
<
order
;
i
++
){
dimSize
[
i
]
=
abs
(
myDimSize
[
i
]);
dimSizeRDI
[
order
-
i
-
1
]
=
dimSize
[
i
];
if
(
myDimSize
[
i
]
<
0
)
filledData
=
false
;
if
(
myDimSize
[
i
]
==
0
)
zeroData
=
true
;
unitNum
*=
dimSize
[
i
];
}
data
=
NULL
;
denseRatio
=
myDenseRatio
;
isSparse
=
denseRatio
<
1.0
F
?
true
:
false
;
dataType
=
myDataType
;
unitSize
=
GetUnitSize
(
dataType
);
if
(
myDataType
!=
DEFAULT_DTYPE
)
isDefaultDType
=
false
;
else
isDefaultDType
=
true
;
if
(
zeroData
){
unitNum
=
0
;
return
false
;
}
return
true
;
}
/*
resize a tensor by another one
>> myTensor - tensor for reference
*/
...
...
@@ -1672,6 +1623,8 @@ void XTensor::AllocateData(XTensor * tensor, XMem * myMem, bool useBuf)
tensor
->
isInGlobalMem
=
true
;
}
}
tensor
->
signature
=
0
;
}
/*
...
...
source/tensor/XTensor.h
查看文件 @
cb9c88cb
...
...
@@ -51,7 +51,6 @@ struct XLink;
#define MIN_TENSOR_SPLIT_LIST_NUM 1024
#define MIN_TENSOR_CAT_NUM 8
/* computation flags */
#define UNSAFE_BUT_FAST_MEM
#define FAST_MATRIX
...
...
@@ -66,6 +65,9 @@ public:
/* memory pool */
XMem
*
mem
;
/* signature of the memory pool */
MTYPE
signature
;
/* data array to keep the elements */
void
*
data
;
...
...
@@ -327,11 +329,6 @@ public:
const
TENSOR_DATA_TYPE
myDataType
=
DEFAULT_DTYPE
,
const
float
myDenseRatio
=
1
.
0
F
);
/* resize a matrix with a specified matrix size (with no data filled) */
bool
ResizeWithNoData
(
const
int
myOrder
,
const
int
*
myDimSize
,
const
TENSOR_DATA_TYPE
myDataType
=
DEFAULT_DTYPE
,
const
float
myDenseRatio
=
1
.
0
F
);
/* resize a matrix by another one */
bool
Resize
(
const
XTensor
*
myTensor
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论