Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
47774d9c
P
Paddle
项目概览
Crayon鑫
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
47774d9c
编写于
6月 02, 2021
作者:
C
chentianyu03
提交者:
GitHub
6月 02, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove complex128.h file (#33247)
上级
1b10ccdb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
0 addition
and
624 deletion
+0
-624
paddle/fluid/platform/complex128.h
paddle/fluid/platform/complex128.h
+0
-535
paddle/fluid/platform/eigen_ext.h
paddle/fluid/platform/eigen_ext.h
+0
-89
未找到文件。
paddle/fluid/platform/complex128.h
已删除
100644 → 0
浏览文件 @
1b10ccdb
// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <stdint.h>
#include <complex>
#include <cstring>
#include <iostream>
#include <limits>
#ifdef PADDLE_WITH_CUDA
#include <cuComplex.h>
#include <thrust/complex.h>
#endif // PADDLE_WITH_CUDA
#ifdef PADDLE_WITH_HIP
#include <hip/hip_complex.h>
#include <thrust/complex.h> // NOLINT
#endif
#if !defined(_WIN32)
#define PADDLE_ALIGN(x) __attribute__((aligned(x)))
#else
#define PADDLE_ALIGN(x) __declspec(align(x))
#endif
#if (defined(__CUDACC__) || defined(__HIPCC__))
#define HOSTDEVICE __host__ __device__
#define DEVICE __device__
#define HOST __host__
#else
#define HOSTDEVICE
#define DEVICE
#define HOST
#endif
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
#define PADDLE_WITH_CUDA_OR_HIP_COMPLEX128
#endif
namespace
paddle
{
namespace
platform
{
struct
PADDLE_ALIGN
(
16
)
complex128
{
public:
double
real
;
double
imag
;
complex128
()
=
default
;
complex128
(
const
complex128
&
o
)
=
default
;
complex128
&
operator
=
(
const
complex128
&
o
)
=
default
;
complex128
(
complex128
&&
o
)
=
default
;
complex128
&
operator
=
(
complex128
&&
o
)
=
default
;
~
complex128
()
=
default
;
HOSTDEVICE
complex128
(
double
real
,
double
imag
)
:
real
(
real
),
imag
(
imag
)
{}
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
HOSTDEVICE
inline
explicit
complex128
(
const
thrust
::
complex
<
double
>&
c
)
{
real
=
c
.
real
();
imag
=
c
.
imag
();
}
HOSTDEVICE
inline
explicit
operator
thrust
::
complex
<
double
>
()
const
{
return
thrust
::
complex
<
double
>
(
real
,
imag
);
}
#ifdef PADDLE_WITH_HIP
HOSTDEVICE
inline
explicit
operator
hipDoubleComplex
()
const
{
return
make_hipDoubleComplex
(
real
,
imag
);
}
#else
HOSTDEVICE
inline
explicit
operator
cuDoubleComplex
()
const
{
return
make_cuDoubleComplex
(
real
,
imag
);
}
#endif
#endif
HOSTDEVICE
complex128
(
const
float
&
val
)
:
real
(
static_cast
<
double
>
(
val
)),
imag
(
0
)
{}
HOSTDEVICE
complex128
(
const
double
&
val
)
:
real
(
val
),
imag
(
0
)
{}
HOSTDEVICE
complex128
(
const
int
&
val
)
:
real
(
static_cast
<
double
>
(
val
)),
imag
(
0
)
{}
HOSTDEVICE
complex128
(
const
int64_t
&
val
)
:
real
(
static_cast
<
double
>
(
val
)),
imag
(
0
)
{}
HOSTDEVICE
inline
explicit
operator
std
::
complex
<
double
>
()
{
return
static_cast
<
std
::
complex
<
double
>>
(
std
::
complex
<
double
>
(
real
,
imag
));
}
template
<
class
T
>
HOSTDEVICE
inline
explicit
complex128
(
const
T
&
val
)
:
real
(
complex128
(
static_cast
<
double
>
(
val
)).
real
)
{}
HOSTDEVICE
complex128
(
const
std
::
complex
<
double
>
val
)
:
real
(
val
.
real
()),
imag
(
val
.
imag
())
{}
HOSTDEVICE
inline
complex128
&
operator
=
(
bool
b
)
{
real
=
b
?
1
:
0
;
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
int8_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
uint8_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
int16_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
uint16_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
int32_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
uint32_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
int64_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
uint64_t
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
float
val
)
{
real
=
val
;
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
complex128
&
operator
=
(
double
val
)
{
real
=
static_cast
<
double
>
(
val
);
imag
=
0
;
return
*
this
;
}
HOSTDEVICE
inline
operator
float
()
const
{
return
static_cast
<
float
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
bool
()
const
{
return
static_cast
<
bool
>
(
this
->
real
)
||
static_cast
<
bool
>
(
this
->
imag
);
}
HOSTDEVICE
inline
explicit
operator
int8_t
()
const
{
return
static_cast
<
int8_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
uint8_t
()
const
{
return
static_cast
<
uint8_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
int16_t
()
const
{
return
static_cast
<
int16_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
uint16_t
()
const
{
return
static_cast
<
uint16_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
int32_t
()
const
{
return
static_cast
<
int32_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
uint32_t
()
const
{
return
static_cast
<
uint32_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
int64_t
()
const
{
return
static_cast
<
int64_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
uint64_t
()
const
{
return
static_cast
<
uint64_t
>
(
this
->
real
);
}
HOSTDEVICE
inline
explicit
operator
double
()
const
{
return
static_cast
<
double
>
(
this
->
real
);
}
};
HOSTDEVICE
inline
complex128
operator
+
(
const
complex128
&
a
,
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
+
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
#else
return
complex128
(
a
.
real
+
b
.
real
,
a
.
imag
+
b
.
imag
);
#endif
}
HOSTDEVICE
inline
complex128
operator
-
(
const
complex128
&
a
,
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
-
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
#else
return
complex128
(
a
.
real
-
b
.
real
,
a
.
imag
-
b
.
imag
);
#endif
}
HOSTDEVICE
inline
complex128
operator
*
(
const
complex128
&
a
,
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
*
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
#else
return
complex128
(
a
.
real
*
b
.
real
-
a
.
imag
*
b
.
imag
,
a
.
imag
*
b
.
real
+
b
.
imag
*
a
.
real
);
#endif
}
HOSTDEVICE
inline
complex128
operator
/
(
const
complex128
&
a
,
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
/
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
#else
double
denominator
=
b
.
real
*
b
.
real
+
b
.
imag
*
b
.
imag
;
return
complex128
((
a
.
real
*
b
.
real
+
a
.
imag
*
b
.
imag
)
/
denominator
,
(
a
.
imag
*
b
.
real
-
a
.
real
*
b
.
imag
)
/
denominator
);
#endif
}
HOSTDEVICE
inline
complex128
operator
-
(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
-
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
));
#else
complex128
res
;
res
.
real
=
-
a
.
real
;
res
.
imag
=
-
a
.
imag
;
return
res
;
#endif
}
HOSTDEVICE
inline
complex128
&
operator
+=
(
complex128
&
a
,
// NOLINT
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
a
=
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
+=
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
return
a
;
#else
a
.
real
+=
b
.
real
;
a
.
imag
+=
b
.
imag
;
return
a
;
#endif
}
HOSTDEVICE
inline
complex128
&
operator
-=
(
complex128
&
a
,
// NOLINT
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
a
=
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
-=
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
return
a
;
#else
a
.
real
-=
b
.
real
;
a
.
imag
-=
b
.
imag
;
return
a
;
#endif
}
HOSTDEVICE
inline
complex128
&
operator
*=
(
complex128
&
a
,
// NOLINT
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
a
=
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
*=
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
return
a
;
#else
a
.
real
=
a
.
real
*
b
.
real
-
a
.
imag
*
b
.
imag
;
a
.
imag
=
a
.
imag
*
b
.
real
+
b
.
imag
*
a
.
real
;
return
a
;
#endif
}
HOSTDEVICE
inline
complex128
&
operator
/=
(
complex128
&
a
,
// NOLINT
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
a
=
complex128
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)
/=
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
));
return
a
;
#else
double
denominator
=
b
.
real
*
b
.
real
+
b
.
imag
*
b
.
imag
;
a
.
real
=
(
a
.
real
*
b
.
real
+
a
.
imag
*
b
.
imag
)
/
denominator
;
a
.
imag
=
(
a
.
imag
*
b
.
real
-
a
.
real
*
b
.
imag
)
/
denominator
;
return
a
;
#endif
}
HOSTDEVICE
inline
complex128
raw_uint16_to_complex128
(
uint16_t
a
)
{
complex128
res
;
res
.
real
=
a
;
return
res
;
}
HOSTDEVICE
inline
bool
operator
==
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
a
.
real
==
b
.
real
&&
a
.
imag
==
b
.
imag
;
}
HOSTDEVICE
inline
bool
operator
!=
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
a
.
real
!=
b
.
real
||
a
.
imag
!=
b
.
imag
;
}
HOSTDEVICE
inline
bool
operator
<
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
static_cast
<
double
>
(
a
.
real
)
<
static_cast
<
double
>
(
b
.
real
);
}
HOSTDEVICE
inline
bool
operator
<=
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
static_cast
<
double
>
(
a
.
real
)
<=
static_cast
<
double
>
(
b
.
real
);
}
HOSTDEVICE
inline
bool
operator
>
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
static_cast
<
double
>
(
a
.
real
)
>
static_cast
<
double
>
(
b
.
real
);
}
HOSTDEVICE
inline
bool
operator
>=
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
static_cast
<
double
>
(
a
.
real
)
>=
static_cast
<
double
>
(
b
.
real
);
}
HOSTDEVICE
inline
bool
(
isnan
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA) && defined(__CUDA_ARCH__)
// __isnanf not supported on HIP platform
return
__isnan
(
a
.
real
)
||
__isnan
(
a
.
imag
);
#else
return
std
::
isnan
(
a
.
real
)
||
std
::
isnan
(
a
.
imag
);
#endif
}
HOSTDEVICE
inline
bool
(
isinf
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA) && defined(__CUDA_ARCH__)
// __isinf not supported on HIP platform
return
__isinf
(
a
.
real
)
||
__isinf
(
a
.
imag
);
#else
return
std
::
isinf
(
a
.
real
)
||
std
::
isinf
(
a
.
imag
);
#endif
}
HOSTDEVICE
inline
bool
(
isfinite
)(
const
complex128
&
a
)
{
return
!
((
isnan
)(
a
))
&&
!
((
isinf
)(
a
));
}
HOSTDEVICE
inline
double
(
abs
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
thrust
::
abs
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
));
#else
return
std
::
abs
(
std
::
complex
<
double
>
(
a
.
real
,
a
.
imag
));
#endif
}
HOSTDEVICE
inline
complex128
(
pow
)(
const
complex128
&
a
,
const
complex128
&
b
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
pow
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
),
thrust
::
complex
<
double
>
(
b
.
real
,
b
.
imag
)));
#else
return
std
::
pow
(
std
::
complex
<
double
>
(
a
),
std
::
complex
<
float
>
(
b
));
#endif
}
HOSTDEVICE
inline
complex128
(
sqrt
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
sqrt
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)));
#else
return
std
::
sqrt
(
std
::
complex
<
double
>
(
a
));
#endif
}
HOSTDEVICE
inline
complex128
(
tanh
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
tanh
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)));
#else
return
std
::
tanh
(
std
::
complex
<
double
>
(
a
));
#endif
}
HOSTDEVICE
inline
complex128
(
log
)(
const
complex128
&
a
)
{
#if defined(PADDLE_WITH_CUDA_OR_HIP_COMPLEX128) && \
(defined(__CUDA_ARCH__) || defined(__HIPCC__))
return
complex128
(
thrust
::
log
(
thrust
::
complex
<
double
>
(
a
.
real
,
a
.
imag
)));
#else
return
complex128
(
std
::
log
(
std
::
complex
<
double
>
(
a
)));
#endif
}
inline
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
complex128
&
a
)
{
os
<<
"real:"
<<
a
.
real
<<
" imag:"
<<
a
.
imag
;
return
os
;
}
}
// namespace platform
}
// namespace paddle
namespace
std
{
template
<
>
struct
is_pod
<
paddle
::
platform
::
complex128
>
{
static
const
bool
value
=
is_trivial
<
paddle
::
platform
::
complex128
>::
value
&&
is_standard_layout
<
paddle
::
platform
::
complex128
>::
value
;
};
template
<
>
struct
is_floating_point
<
paddle
::
platform
::
complex128
>
:
std
::
integral_constant
<
bool
,
std
::
is_same
<
paddle
::
platform
::
complex128
,
typename
std
::
remove_cv
<
paddle
::
platform
::
complex128
>::
type
>::
value
>
{
};
template
<
>
struct
is_signed
<
paddle
::
platform
::
complex128
>
{
static
const
bool
value
=
false
;
};
template
<
>
struct
is_unsigned
<
paddle
::
platform
::
complex128
>
{
static
const
bool
value
=
false
;
};
inline
bool
isnan
(
const
paddle
::
platform
::
complex128
&
a
)
{
return
paddle
::
platform
::
isnan
(
a
);
}
inline
bool
isinf
(
const
paddle
::
platform
::
complex128
&
a
)
{
return
paddle
::
platform
::
isinf
(
a
);
}
template
<
>
struct
numeric_limits
<
paddle
::
platform
::
complex128
>
{
static
const
bool
is_specialized
=
false
;
static
const
bool
is_signed
=
false
;
static
const
bool
is_integer
=
false
;
static
const
bool
is_exact
=
false
;
static
const
bool
has_infinity
=
false
;
static
const
bool
has_quiet_NaN
=
false
;
static
const
bool
has_signaling_NaN
=
false
;
static
const
float_denorm_style
has_denorm
=
denorm_absent
;
static
const
bool
has_denorm_loss
=
false
;
static
const
std
::
float_round_style
round_style
=
std
::
round_toward_zero
;
static
const
bool
is_iec559
=
false
;
static
const
bool
is_bounded
=
false
;
static
const
bool
is_modulo
=
false
;
static
const
int
digits
=
0
;
static
const
int
digits10
=
0
;
static
const
int
max_digits10
=
0
;
static
const
int
radix
=
0
;
static
const
int
min_exponent
=
0
;
static
const
int
min_exponent10
=
0
;
static
const
int
max_exponent
=
0
;
static
const
int
max_exponent10
=
0
;
static
const
bool
traps
=
false
;
static
const
bool
tinyness_before
=
false
;
static
paddle
::
platform
::
complex128
(
min
)()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
lowest
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
(
max
)()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
epsilon
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
round_error
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
infinity
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
quiet_NaN
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
signaling_NaN
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
static
paddle
::
platform
::
complex128
denorm_min
()
{
return
paddle
::
platform
::
complex128
(
0.0
,
0.0
);
}
};
}
// namespace std
#define MKL_Complex16 paddle::platform::complex128
paddle/fluid/platform/eigen_ext.h
浏览文件 @
47774d9c
...
...
@@ -16,7 +16,6 @@
#include "paddle/fluid/platform/bfloat16.h"
#include "paddle/fluid/platform/complex.h"
#include "paddle/fluid/platform/complex128.h"
#include "paddle/fluid/platform/float16.h"
#include "paddle/fluid/platform/hostdevice.h"
...
...
@@ -24,7 +23,6 @@
namespace
Eigen
{
using
complex128
=
paddle
::
platform
::
complex128
;
using
float16
=
paddle
::
platform
::
float16
;
template
<
typename
T
>
using
complex
=
paddle
::
platform
::
complex
<
T
>
;
...
...
@@ -62,28 +60,6 @@ struct NumTraits<paddle::platform::bfloat16>
}
};
template
<
>
struct
NumTraits
<
complex128
>
:
GenericNumTraits
<
std
::
complex
<
double
>>
{
typedef
double
Real
;
typedef
typename
NumTraits
<
double
>::
Literal
Literal
;
enum
{
IsComplex
=
1
,
RequireInitialization
=
NumTraits
<
double
>::
RequireInitialization
,
ReadCost
=
2
*
NumTraits
<
double
>::
ReadCost
,
AddCost
=
2
*
NumTraits
<
Real
>::
AddCost
,
MulCost
=
4
*
NumTraits
<
Real
>::
MulCost
+
2
*
NumTraits
<
Real
>::
AddCost
};
EIGEN_DEVICE_FUNC
static
inline
Real
epsilon
()
{
return
NumTraits
<
Real
>::
epsilon
();
}
EIGEN_DEVICE_FUNC
static
inline
Real
dummy_precision
()
{
return
NumTraits
<
Real
>::
dummy_precision
();
}
EIGEN_DEVICE_FUNC
static
inline
int
digits10
()
{
return
NumTraits
<
Real
>::
digits10
();
}
};
template
<
>
struct
NumTraits
<
complex
<
float
>>
:
GenericNumTraits
<
std
::
complex
<
float
>>
{
typedef
float
Real
;
...
...
@@ -247,71 +223,6 @@ HOSTDEVICE inline paddle::platform::bfloat16 maxi(
return
a
<
b
?
b
:
a
;
}
//////////// complex128 methods /////////////
template
<
>
HOSTDEVICE
inline
bool
(
isnan
)(
const
complex128
&
a
)
{
return
(
paddle
::
platform
::
isnan
)(
a
);
}
template
<
>
HOSTDEVICE
inline
bool
(
isinf
)(
const
complex128
&
a
)
{
return
(
paddle
::
platform
::
isinf
)(
a
);
}
template
<
>
HOSTDEVICE
inline
bool
(
isfinite
)(
const
complex128
&
a
)
{
return
(
paddle
::
platform
::
isfinite
)(
a
);
}
template
<
>
HOSTDEVICE
inline
complex128
exp
(
const
complex128
&
a
)
{
double
com
=
::
expf
(
a
.
real
);
double
res_real
=
com
*
::
cosf
(
a
.
imag
);
double
res_imag
=
com
*
::
sinf
(
a
.
imag
);
return
complex128
(
res_real
,
res_imag
);
}
template
<
>
HOSTDEVICE
inline
complex128
log
(
const
complex128
&
a
)
{
return
paddle
::
platform
::
log
(
a
);
}
template
<
>
HOSTDEVICE
inline
complex128
tanh
(
const
complex128
&
a
)
{
return
paddle
::
platform
::
tanh
(
a
);
}
template
<
>
HOSTDEVICE
inline
complex128
sqrt
(
const
complex128
&
a
)
{
return
paddle
::
platform
::
sqrt
(
a
);
}
template
<
>
HOSTDEVICE
inline
complex128
ceil
(
const
complex128
&
a
)
{
return
complex128
(
::
ceilf
(
a
.
real
),
::
ceilf
(
a
.
imag
));
}
template
<
>
HOSTDEVICE
inline
complex128
floor
(
const
complex128
&
a
)
{
return
complex128
(
::
floorf
(
a
.
real
),
::
floor
(
a
.
imag
));
}
template
<
>
HOSTDEVICE
inline
complex128
round
(
const
complex128
&
a
)
{
return
complex128
(
::
roundf
(
a
.
real
),
::
roundf
(
a
.
imag
));
}
template
<
>
HOSTDEVICE
inline
complex128
pow
(
const
complex128
&
a
,
const
complex128
&
b
)
{
return
paddle
::
platform
::
pow
(
a
,
b
);
}
template
<
>
HOSTDEVICE
inline
double
abs
(
const
complex128
&
a
)
{
return
paddle
::
platform
::
abs
(
a
);
}
//////////// complex<float> methods /////////////
template
<
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录