Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
c5dbcc8c
P
Paddle
项目概览
机器未来
/
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看板
未验证
提交
c5dbcc8c
编写于
7月 04, 2022
作者:
R
Ruibiao Chen
提交者:
GitHub
7月 04, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove boost::tribool (#44030)
上级
957258d9
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
475 addition
and
12 deletion
+475
-12
paddle/fluid/framework/ir/mkldnn/mkldnn_conv_bn_fuse_pass_tester.cc
...id/framework/ir/mkldnn/mkldnn_conv_bn_fuse_pass_tester.cc
+3
-3
paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass_tester.cc
...e/fluid/framework/ir/mkldnn/mkldnn_inplace_pass_tester.cc
+4
-4
paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc
...fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc
+5
-5
paddle/utils/tribool.h
paddle/utils/tribool.h
+463
-0
未找到文件。
paddle/fluid/framework/ir/mkldnn/mkldnn_conv_bn_fuse_pass_tester.cc
浏览文件 @
c5dbcc8c
...
...
@@ -12,10 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#include <boost/logic/tribool.hpp>
#include <random>
#include <string>
#include <unordered_set>
#include "paddle/utils/tribool.h"
#include "gtest/gtest.h"
#include "paddle/fluid/framework/ir/graph_traits.h"
...
...
@@ -52,12 +52,12 @@ class MKLDNNConvBatchNormPassTest {
const
std
::
string
&
name
,
const
std
::
vector
<
std
::
string
>&
inputs
,
const
std
::
vector
<
std
::
string
>&
outputs
,
boost
::
tribool
use_mkldnn
)
{
paddle
::
tribool
use_mkldnn
)
{
auto
*
op
=
prog
->
MutableBlock
(
0
)
->
AppendOp
();
op
->
SetType
(
type
);
if
(
!
boost
::
indeterminate
(
use_mkldnn
))
if
(
!
paddle
::
indeterminate
(
use_mkldnn
))
op
->
SetAttr
(
"use_mkldnn"
,
use_mkldnn
);
if
(
type
==
"conv2d_transpose"
)
{
...
...
paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass_tester.cc
浏览文件 @
c5dbcc8c
...
...
@@ -14,8 +14,8 @@
#include <gtest/gtest.h>
#include <boost/logic/tribool.hpp>
#include <unordered_set>
#include "paddle/utils/tribool.h"
#include "paddle/fluid/framework/ir/mkldnn/mkldnn_inplace_pass.h"
#include "paddle/fluid/framework/ir/pass_tester_helper.h"
...
...
@@ -44,12 +44,12 @@ class MKLDNNInplacePassTest {
const
std
::
string
&
name
,
const
std
::
vector
<
std
::
string
>&
inputs
,
const
std
::
vector
<
std
::
string
>&
outputs
,
boost
::
tribool
use_mkldnn
)
{
paddle
::
tribool
use_mkldnn
)
{
auto
*
op
=
prog
->
MutableBlock
(
0
)
->
AppendOp
();
op
->
SetType
(
type
);
if
(
!
boost
::
indeterminate
(
use_mkldnn
))
if
(
!
paddle
::
indeterminate
(
use_mkldnn
))
op
->
SetAttr
(
"use_mkldnn"
,
use_mkldnn
);
if
(
type
==
"conv2d"
)
{
...
...
@@ -102,7 +102,7 @@ class MKLDNNInplacePassTest {
"conv1"
,
std
::
vector
<
std
::
string
>
({
"a"
,
"weights"
,
"bias"
}),
std
::
vector
<
std
::
string
>
({
"f"
}),
boost
::
indeterminate
);
paddle
::
indeterminate
);
SetOp
(
&
prog
,
"relu"
,
"relu1"
,
...
...
paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass_tester.cc
浏览文件 @
c5dbcc8c
...
...
@@ -14,7 +14,7 @@
#include <gtest/gtest.h>
#include
<boost/logic/tribool.hpp>
#include
"paddle/utils/tribool.h"
#include "paddle/fluid/framework/ir/mkldnn/mkldnn_placement_pass.h"
...
...
@@ -29,12 +29,12 @@ class PlacementPassTest {
const
std
::
string
&
name
,
const
std
::
vector
<
std
::
string
>&
inputs
,
const
std
::
vector
<
std
::
string
>&
outputs
,
boost
::
tribool
use_mkldnn
)
{
paddle
::
tribool
use_mkldnn
)
{
auto
*
op
=
prog
->
MutableBlock
(
0
)
->
AppendOp
();
op
->
SetType
(
type
);
if
(
!
boost
::
indeterminate
(
use_mkldnn
))
if
(
!
paddle
::
indeterminate
(
use_mkldnn
))
op
->
SetAttr
(
"use_mkldnn"
,
use_mkldnn
);
if
(
type
==
"conv2d"
)
{
...
...
@@ -90,13 +90,13 @@ class PlacementPassTest {
"concat1"
,
std
::
vector
<
std
::
string
>
({
"a"
,
"b"
}),
std
::
vector
<
std
::
string
>
({
"c"
}),
boost
::
indeterminate
);
paddle
::
indeterminate
);
SetOp
(
&
prog
,
"conv2d"
,
"conv1"
,
std
::
vector
<
std
::
string
>
({
"c"
,
"weights"
,
"bias"
}),
std
::
vector
<
std
::
string
>
({
"f"
}),
boost
::
indeterminate
);
paddle
::
indeterminate
);
SetOp
(
&
prog
,
"relu"
,
"relu1"
,
...
...
paddle/utils/tribool.h
0 → 100644
浏览文件 @
c5dbcc8c
// Copyright (c) 2022 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.
// This file copy from boost/logic/tribool.hpp, boost version: 1.41.0
// Modified the following points:
// 1. modify namespace from boost to paddle
// 2. remove the depending boost header files
// 3. remove the dummy_ in indeterminate_t, which is specially implemented for
// Borland C++ Builder
// Three-state boolean logic library
// Copyright Douglas Gregor 2002-2004. Use, modification and
// distribution is subject to the Boost Software License, Version
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// For more information, see http://www.boost.org
#pragma once
namespace
paddle
{
namespace
logic
{
/// INTERNAL ONLY
namespace
detail
{
/**
* INTERNAL ONLY
*
* \brief A type used only to uniquely identify the 'indeterminate'
* function/keyword.
*/
struct
indeterminate_t
{};
}
// end namespace detail
class
tribool
;
/**
* INTERNAL ONLY
* The type of the 'indeterminate' keyword. This has the same type as the
* function 'indeterminate' so that we can recognize when the keyword is
* used.
*/
typedef
bool
(
*
indeterminate_keyword_t
)(
tribool
,
detail
::
indeterminate_t
);
/**
* \brief Keyword and test function for the indeterminate tribool value
*
* The \c indeterminate function has a dual role. It's first role is
* as a unary function that tells whether the tribool value is in the
* "indeterminate" state. It's second role is as a keyword
* representing the indeterminate (just like "true" and "false"
* represent the true and false states). If you do not like the name
* "indeterminate", and would prefer to use a different name, see the
* macro \c BOOST_TRIBOOL_THIRD_STATE.
*
* \returns <tt>x.value == tribool::indeterminate_value</tt>
* \throws nothrow
*/
inline
bool
indeterminate
(
tribool
x
,
detail
::
indeterminate_t
dummy
=
detail
::
indeterminate_t
());
/**
* \brief A 3-state boolean type.
*
* 3-state boolean values are either true, false, or
* indeterminate.
*/
class
tribool
{
private:
/// INTERNAL ONLY
struct
dummy
{
void
nonnull
()
{}
};
typedef
void
(
dummy
::*
safe_bool
)();
public:
/**
* Construct a new 3-state boolean value with the value 'false'.
*
* \throws nothrow
*/
tribool
()
:
value
(
false_value
)
{}
/**
* Construct a new 3-state boolean value with the given boolean
* value, which may be \c true or \c false.
*
* \throws nothrow
*/
tribool
(
bool
value
)
:
value
(
value
?
true_value
:
false_value
)
{}
// NOLINT
/**
* Construct a new 3-state boolean value with an indeterminate value.
*
* \throws nothrow
*/
tribool
(
indeterminate_keyword_t
)
:
value
(
indeterminate_value
)
{}
// NOLINT
/**
* Use a 3-state boolean in a boolean context. Will evaluate true in a
* boolean context only when the 3-state boolean is definitely true.
*
* \returns true if the 3-state boolean is true, false otherwise
* \throws nothrow
*/
operator
safe_bool
()
const
{
return
value
==
true_value
?
&
dummy
::
nonnull
:
0
;
}
/**
* The actual stored value in this 3-state boolean, which may be false, true,
* or indeterminate.
*/
enum
value_t
{
false_value
,
true_value
,
indeterminate_value
}
value
;
};
// Check if the given tribool has an indeterminate value. Also doubles as a
// keyword for the 'indeterminate' value
inline
bool
indeterminate
(
tribool
x
,
detail
::
indeterminate_t
)
{
return
x
.
value
==
tribool
::
indeterminate_value
;
}
/** @defgroup logical Logical operations
*/
//@{
/**
* \brief Computes the logical negation of a tribool
*
* \returns the logical negation of the tribool, according to the
* table:
* <table border=1>
* <tr>
* <th><center><code>!</code></center></th>
* <th/>
* </tr>
* <tr>
* <th><center>false</center></th>
* <td><center>true</center></td>
* </tr>
* <tr>
* <th><center>true</center></th>
* <td><center>false</center></td>
* </tr>
* <tr>
* <th><center>indeterminate</center></th>
* <td><center>indeterminate</center></td>
* </tr>
* </table>
* \throws nothrow
*/
inline
tribool
operator
!
(
tribool
x
)
{
return
x
.
value
==
tribool
::
false_value
?
tribool
(
true
)
:
x
.
value
==
tribool
::
true_value
?
tribool
(
false
)
:
tribool
(
indeterminate
);
}
/**
* \brief Computes the logical conjuction of two tribools
*
* \returns the result of logically ANDing the two tribool values,
* according to the following table:
* <table border=1>
* <tr>
* <th><center><code>&&</code></center></th>
* <th><center>false</center></th>
* <th><center>true</center></th>
* <th><center>indeterminate</center></th>
* </tr>
* <tr>
* <th><center>false</center></th>
* <td><center>false</center></td>
* <td><center>false</center></td>
* <td><center>false</center></td>
* </tr>
* <tr>
* <th><center>true</center></th>
* <td><center>false</center></td>
* <td><center>true</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>indeterminate</center></th>
* <td><center>false</center></td>
* <td><center>indeterminate</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* </table>
* \throws nothrow
*/
inline
tribool
operator
&&
(
tribool
x
,
tribool
y
)
{
if
(
static_cast
<
bool
>
(
!
x
)
||
static_cast
<
bool
>
(
!
y
))
return
false
;
else
if
(
static_cast
<
bool
>
(
x
)
&&
static_cast
<
bool
>
(
y
))
return
true
;
else
return
indeterminate
;
}
/**
* \overload
*/
inline
tribool
operator
&&
(
tribool
x
,
bool
y
)
{
return
y
?
x
:
tribool
(
false
);
}
/**
* \overload
*/
inline
tribool
operator
&&
(
bool
x
,
tribool
y
)
{
return
x
?
y
:
tribool
(
false
);
}
/**
* \overload
*/
inline
tribool
operator
&&
(
indeterminate_keyword_t
,
tribool
x
)
{
return
!
x
?
tribool
(
false
)
:
tribool
(
indeterminate
);
}
/**
* \overload
*/
inline
tribool
operator
&&
(
tribool
x
,
indeterminate_keyword_t
)
{
return
!
x
?
tribool
(
false
)
:
tribool
(
indeterminate
);
}
/**
* \brief Computes the logical disjunction of two tribools
*
* \returns the result of logically ORing the two tribool values,
* according to the following table:
* <table border=1>
* <tr>
* <th><center><code>||</code></center></th>
* <th><center>false</center></th>
* <th><center>true</center></th>
* <th><center>indeterminate</center></th>
* </tr>
* <tr>
* <th><center>false</center></th>
* <td><center>false</center></td>
* <td><center>true</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>true</center></th>
* <td><center>true</center></td>
* <td><center>true</center></td>
* <td><center>true</center></td>
* </tr>
* <tr>
* <th><center>indeterminate</center></th>
* <td><center>indeterminate</center></td>
* <td><center>true</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* </table>
* \throws nothrow
*/
inline
tribool
operator
||
(
tribool
x
,
tribool
y
)
{
if
(
static_cast
<
bool
>
(
!
x
)
&&
static_cast
<
bool
>
(
!
y
))
return
false
;
else
if
(
static_cast
<
bool
>
(
x
)
||
static_cast
<
bool
>
(
y
))
return
true
;
else
return
indeterminate
;
}
/**
* \overload
*/
inline
tribool
operator
||
(
tribool
x
,
bool
y
)
{
return
y
?
tribool
(
true
)
:
x
;
}
/**
* \overload
*/
inline
tribool
operator
||
(
bool
x
,
tribool
y
)
{
return
x
?
tribool
(
true
)
:
y
;
}
/**
* \overload
*/
inline
tribool
operator
||
(
indeterminate_keyword_t
,
tribool
x
)
{
return
x
?
tribool
(
true
)
:
tribool
(
indeterminate
);
}
/**
* \overload
*/
inline
tribool
operator
||
(
tribool
x
,
indeterminate_keyword_t
)
{
return
x
?
tribool
(
true
)
:
tribool
(
indeterminate
);
}
//@}
/**
* \brief Compare tribools for equality
*
* \returns the result of comparing two tribool values, according to
* the following table:
* <table border=1>
* <tr>
* <th><center><code>==</code></center></th>
* <th><center>false</center></th>
* <th><center>true</center></th>
* <th><center>indeterminate</center></th>
* </tr>
* <tr>
* <th><center>false</center></th>
* <td><center>true</center></td>
* <td><center>false</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>true</center></th>
* <td><center>false</center></td>
* <td><center>true</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>indeterminate</center></th>
* <td><center>indeterminate</center></td>
* <td><center>indeterminate</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* </table>
* \throws nothrow
*/
inline
tribool
operator
==
(
tribool
x
,
tribool
y
)
{
if
(
indeterminate
(
x
)
||
indeterminate
(
y
))
return
indeterminate
;
else
return
(
x
&&
y
)
||
(
!
x
&&
!
y
);
}
/**
* \overload
*/
inline
tribool
operator
==
(
tribool
x
,
bool
y
)
{
return
x
==
tribool
(
y
);
}
/**
* \overload
*/
inline
tribool
operator
==
(
bool
x
,
tribool
y
)
{
return
tribool
(
x
)
==
y
;
}
/**
* \overload
*/
inline
tribool
operator
==
(
indeterminate_keyword_t
,
tribool
x
)
{
return
tribool
(
indeterminate
)
==
x
;
}
/**
* \overload
*/
inline
tribool
operator
==
(
tribool
x
,
indeterminate_keyword_t
)
{
return
tribool
(
indeterminate
)
==
x
;
}
/**
* \brief Compare tribools for inequality
*
* \returns the result of comparing two tribool values for inequality,
* according to the following table:
* <table border=1>
* <tr>
* <th><center><code>!=</code></center></th>
* <th><center>false</center></th>
* <th><center>true</center></th>
* <th><center>indeterminate</center></th>
* </tr>
* <tr>
* <th><center>false</center></th>
* <td><center>false</center></td>
* <td><center>true</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>true</center></th>
* <td><center>true</center></td>
* <td><center>false</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* <tr>
* <th><center>indeterminate</center></th>
* <td><center>indeterminate</center></td>
* <td><center>indeterminate</center></td>
* <td><center>indeterminate</center></td>
* </tr>
* </table>
* \throws nothrow
*/
inline
tribool
operator
!=
(
tribool
x
,
tribool
y
)
{
if
(
indeterminate
(
x
)
||
indeterminate
(
y
))
return
indeterminate
;
else
return
!
((
x
&&
y
)
||
(
!
x
&&
!
y
));
}
/**
* \overload
*/
inline
tribool
operator
!=
(
tribool
x
,
bool
y
)
{
return
x
!=
tribool
(
y
);
}
/**
* \overload
*/
inline
tribool
operator
!=
(
bool
x
,
tribool
y
)
{
return
tribool
(
x
)
!=
y
;
}
/**
* \overload
*/
inline
tribool
operator
!=
(
indeterminate_keyword_t
,
tribool
x
)
{
return
tribool
(
indeterminate
)
!=
x
;
}
/**
* \overload
*/
inline
tribool
operator
!=
(
tribool
x
,
indeterminate_keyword_t
)
{
return
x
!=
tribool
(
indeterminate
);
}
}
// namespace logic
}
// namespace paddle
// Pull tribool and indeterminate into namespace "boost"
namespace
paddle
{
using
logic
::
indeterminate
;
using
logic
::
tribool
;
}
// namespace paddle
/**
* \brief Declare a new name for the third state of a tribool
*
* Use this macro to declare a new name for the third state of a
* tribool. This state can have any number of new names (in addition
* to \c indeterminate), all of which will be equivalent. The new name will be
* placed in the namespace in which the macro is expanded.
*
* Example:
* PADDLE_TRIBOOL_THIRD_STATE(true_or_false)
*
* tribool x(true_or_false);
* // potentially set x
* if (true_or_false(x)) {
* // don't know what x is
* }
*/
#define PADDLE_TRIBOOL_THIRD_STATE(Name) \
inline bool Name(boost::logic::tribool x, \
boost::logic::detail::indeterminate_t dummy = \
boost::logic::detail::indeterminate_t()) { \
return x.value == boost::logic::tribool::indeterminate_value; \
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录