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
杨迪
NiuTrans.Tensor
Commits
6fd2a671
Commit
6fd2a671
authored
5 years ago
by
xuchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update the interface of convertdatatype
parent
80b83983
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
62 行增加
和
63 行删除
+62
-63
source/tensor/XDataType.cpp
+0
-55
source/tensor/XDataType.h
+0
-8
source/tensor/core/getandset/ConvertDataType.cpp
+55
-0
source/tensor/core/getandset/ConvertDataType.h
+7
-0
没有找到文件。
source/tensor/XDataType.cpp
查看文件 @
6fd2a671
...
...
@@ -60,59 +60,4 @@ TENSOR_DATA_TYPE GetDataType(const char * typeName)
}
}
/****************************************************
Below is for calling CPU BLAS for fast matrix operations
I'm not sure how fast it is. But it seems that other
guys are crazy about this. So I decided to have a try.
*/
/* float -> float16 */
_XINLINE_
unsigned
short
FloatToFloat16
(
float
f
)
{
unsigned
int
x
=
*
((
unsigned
int
*
)
&
f
);
unsigned
short
h
=
((
x
>>
16
)
&
0x8000
)
|
((((
x
&
0x7f800000
)
-
0x38000000
)
>>
13
)
&
0x7c00
)
|
((
x
>>
13
)
&
0x03ff
);
return
h
;
}
/* float16 -> float */
_XINLINE_
float
Float16ToFloat
(
unsigned
short
h
)
{
float
f
=
float
(((
h
&
0x8000
)
<<
16
)
|
(((
h
&
0x7c00
)
+
0x1C000
)
<<
13
)
|
((
h
&
0x03FF
)
<<
13
));
return
f
;
}
/*
data type conversion
>> devID - device id
>> s - source data array
>> typeS - source data type
>> t - target data array
>> typeT - target data type
>> size - number of the items in s (and t)
*/
void
ConvertDataType
(
int
devID
,
void
*
s
,
TENSOR_DATA_TYPE
typeS
,
void
*
t
,
TENSOR_DATA_TYPE
typeT
,
int
size
)
{
CheckNTErrors
((
devID
<
0
),
"This code must be run on CPUs!"
);
if
(
typeS
==
typeT
)
return
;
if
(
typeS
==
X_FLOAT
&&
typeT
==
X_FLOAT16
){
for
(
int
i
=
0
;
i
<
size
;
i
++
){
((
unsigned
short
*
)
t
)[
i
]
=
FloatToFloat16
(((
float
*
)
s
)[
i
]);
}
}
else
if
(
typeS
==
X_FLOAT16
&&
typeT
==
X_FLOAT
){
for
(
int
i
=
0
;
i
<
size
;
i
++
){
((
float
*
)
t
)[
i
]
=
Float16ToFloat
(((
unsigned
short
*
)
s
)[
i
]);
}
}
else
{
ShowNTErrors
(
"Unsupported data types for conversion!"
);
}
}
}
/* end of the nts (NiuTrans.Tensor) namespace */
This diff is collapsed.
Click to expand it.
source/tensor/XDataType.h
查看文件 @
6fd2a671
...
...
@@ -46,13 +46,6 @@ enum MATRIX_TRANS_TYPE{X_TRANS, X_NOTRANS};
extern
const
char
*
GetDataTypeName
(
TENSOR_DATA_TYPE
type
);
extern
TENSOR_DATA_TYPE
GetDataType
(
const
char
*
typeName
);
/* data conversion (for lower precision computation) */
unsigned
short
FloatToFloat16
(
float
f
);
float
Float16ToFloat
(
unsigned
short
h
);
void
ConvertDataType
(
int
devID
,
void
*
s
,
TENSOR_DATA_TYPE
typeS
,
void
*
t
,
TENSOR_DATA_TYPE
typeT
,
int
size
);
}
/* end of the nts (NiuTrans.Tensor) namespace */
#endif
\ No newline at end of file
This diff is collapsed.
Click to expand it.
source/tensor/core/getandset/ConvertDataType.cpp
查看文件 @
6fd2a671
...
...
@@ -28,6 +28,61 @@
namespace
nts
{
// namespace nts(NiuTrans.Tensor)
/*
Below is for calling CPU BLAS for fast matrix operations
I'm not sure how fast it is. But it seems that other
guys are crazy about this. So I decided to have a try.
*/
/* float -> float16 */
_XINLINE_
unsigned
short
FloatToFloat16
(
float
f
)
{
unsigned
int
x
=
*
((
unsigned
int
*
)
&
f
);
unsigned
short
h
=
((
x
>>
16
)
&
0x8000
)
|
((((
x
&
0x7f800000
)
-
0x38000000
)
>>
13
)
&
0x7c00
)
|
((
x
>>
13
)
&
0x03ff
);
return
h
;
}
/* float16 -> float */
_XINLINE_
float
Float16ToFloat
(
unsigned
short
h
)
{
float
f
=
float
(((
h
&
0x8000
)
<<
16
)
|
(((
h
&
0x7c00
)
+
0x1C000
)
<<
13
)
|
((
h
&
0x03FF
)
<<
13
));
return
f
;
}
/*
data type conversion
>> devID - device id
>> s - source data array
>> typeS - source data type
>> t - target data array
>> typeT - target data type
>> size - number of the items in s (and t)
*/
void
ConvertDataType
(
int
devID
,
void
*
s
,
TENSOR_DATA_TYPE
typeS
,
void
*
t
,
TENSOR_DATA_TYPE
typeT
,
int
size
)
{
CheckNTErrors
((
devID
<
0
),
"This code must be run on CPUs!"
);
if
(
typeS
==
typeT
)
return
;
if
(
typeS
==
X_FLOAT
&&
typeT
==
X_FLOAT16
){
for
(
int
i
=
0
;
i
<
size
;
i
++
){
((
unsigned
short
*
)
t
)[
i
]
=
FloatToFloat16
(((
float
*
)
s
)[
i
]);
}
}
else
if
(
typeS
==
X_FLOAT16
&&
typeT
==
X_FLOAT
){
for
(
int
i
=
0
;
i
<
size
;
i
++
){
((
float
*
)
t
)[
i
]
=
Float16ToFloat
(((
unsigned
short
*
)
s
)[
i
]);
}
}
else
{
ShowNTErrors
(
"Unsupported data types for conversion!"
);
}
}
/*
convert data type
>> input - the input tensor
...
...
This diff is collapsed.
Click to expand it.
source/tensor/core/getandset/ConvertDataType.h
查看文件 @
6fd2a671
...
...
@@ -27,6 +27,13 @@
namespace
nts
{
// namespace nts(NiuTrans.Tensor)
/* data conversion (for lower precision computation) */
unsigned
short
FloatToFloat16
(
float
f
);
float
Float16ToFloat
(
unsigned
short
h
);
void
ConvertDataType
(
int
devID
,
void
*
s
,
TENSOR_DATA_TYPE
typeS
,
void
*
t
,
TENSOR_DATA_TYPE
typeT
,
int
size
);
/* convert data type */
void
_ConvertDataType
(
const
XTensor
*
input
,
XTensor
*
output
);
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论