Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
11dfd0df
Commit
11dfd0df
authored
May 17, 2018
by
Paul
Browse files
Improve printing of operators
parent
9697a654
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
107 additions
and
22 deletions
+107
-22
include/rtg/builtin.hpp
include/rtg/builtin.hpp
+2
-7
include/rtg/operators.hpp
include/rtg/operators.hpp
+19
-10
include/rtg/streamutils.hpp
include/rtg/streamutils.hpp
+37
-0
src/program.cpp
src/program.cpp
+4
-4
test/eval_test.cpp
test/eval_test.cpp
+17
-0
test/operation.cpp
test/operation.cpp
+28
-1
No files found.
include/rtg/builtin.hpp
View file @
11dfd0df
...
@@ -13,22 +13,17 @@ struct literal
...
@@ -13,22 +13,17 @@ struct literal
std
::
string
name
()
const
{
return
"@literal"
;
}
std
::
string
name
()
const
{
return
"@literal"
;
}
shape
compute_shape
(
std
::
vector
<
shape
>
)
const
{
RTG_THROW
(
"builtin"
);
}
shape
compute_shape
(
std
::
vector
<
shape
>
)
const
{
RTG_THROW
(
"builtin"
);
}
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"builtin"
);
}
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"builtin"
);
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
literal
&
op
)
{
os
<<
op
.
name
();
return
os
;
}
};
};
struct
param
struct
param
{
{
std
::
string
parameter
;
std
::
string
parameter
;
std
::
string
name
()
const
{
return
"@param
:"
+
parameter
;
}
std
::
string
name
()
const
{
return
"@param
"
;
}
shape
compute_shape
(
std
::
vector
<
shape
>
)
const
{
RTG_THROW
(
"builtin"
);
}
shape
compute_shape
(
std
::
vector
<
shape
>
)
const
{
RTG_THROW
(
"builtin"
);
}
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"builtin"
);
}
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"builtin"
);
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
param
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
param
&
op
)
{
{
os
<<
op
.
name
();
os
<<
op
.
name
()
<<
":"
<<
op
.
parameter
;
return
os
;
return
os
;
}
}
};
};
...
...
include/rtg/operators.hpp
View file @
11dfd0df
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
#include <rtg/operation.hpp>
#include <rtg/operation.hpp>
#include <rtg/stringutils.hpp>
#include <rtg/stringutils.hpp>
#include <rtg/streamutils.hpp>
#include <cmath>
#include <cmath>
namespace
rtg
{
namespace
rtg
{
...
@@ -19,8 +20,7 @@ struct convolution
...
@@ -19,8 +20,7 @@ struct convolution
std
::
array
<
std
::
size_t
,
2
>
dilation
=
{{
1
,
1
}};
std
::
array
<
std
::
size_t
,
2
>
dilation
=
{{
1
,
1
}};
std
::
string
name
()
const
std
::
string
name
()
const
{
{
return
"convolution[padding={"
+
to_string
(
padding
)
+
"}, stride={"
+
to_string
(
stride
)
+
return
"convolution"
;
"}, dilation={"
+
to_string
(
dilation
)
+
"}]"
;
}
}
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
{
{
...
@@ -59,7 +59,11 @@ struct convolution
...
@@ -59,7 +59,11 @@ struct convolution
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
convolution
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
convolution
&
op
)
{
{
os
<<
op
.
name
();
os
<<
op
.
name
()
<<
"["
;
os
<<
"padding={"
<<
stream_range
(
op
.
padding
)
<<
"}, "
;
os
<<
"stride={"
<<
stream_range
(
op
.
stride
)
<<
"}, "
;
os
<<
"dilation={"
<<
stream_range
(
op
.
dilation
)
<<
"}"
;
os
<<
"]"
;
return
os
;
return
os
;
}
}
};
};
...
@@ -72,8 +76,7 @@ struct pooling
...
@@ -72,8 +76,7 @@ struct pooling
std
::
array
<
std
::
size_t
,
2
>
lengths
=
{{
1
,
1
}};
std
::
array
<
std
::
size_t
,
2
>
lengths
=
{{
1
,
1
}};
std
::
string
name
()
const
std
::
string
name
()
const
{
{
return
"pooling:"
+
mode
+
"[padding={"
+
to_string
(
padding
)
+
"}, stride={"
+
return
"pooling"
;
to_string
(
stride
)
+
"}, lengths={"
+
to_string
(
lengths
)
+
"}]"
;
}
}
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
{
{
...
@@ -105,7 +108,11 @@ struct pooling
...
@@ -105,7 +108,11 @@ struct pooling
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
pooling
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
pooling
&
op
)
{
{
os
<<
op
.
name
();
os
<<
op
.
name
()
<<
"["
;
os
<<
"padding={"
<<
stream_range
(
op
.
padding
)
<<
"}, "
;
os
<<
"stride={"
<<
stream_range
(
op
.
stride
)
<<
"}, "
;
os
<<
"lengths={"
<<
stream_range
(
op
.
lengths
)
<<
"}"
;
os
<<
"]"
;
return
os
;
return
os
;
}
}
};
};
...
@@ -113,7 +120,7 @@ struct pooling
...
@@ -113,7 +120,7 @@ struct pooling
struct
activation
struct
activation
{
{
std
::
string
mode
;
std
::
string
mode
;
std
::
string
name
()
const
{
return
"activation
:"
+
mode
;
}
std
::
string
name
()
const
{
return
"activation
"
;
}
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
{
{
if
(
inputs
.
empty
())
if
(
inputs
.
empty
())
...
@@ -124,7 +131,7 @@ struct activation
...
@@ -124,7 +131,7 @@ struct activation
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"not computable"
);
}
argument
compute
(
std
::
vector
<
argument
>
)
const
{
RTG_THROW
(
"not computable"
);
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
activation
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
activation
&
op
)
{
{
os
<<
op
.
name
();
os
<<
op
.
name
()
<<
":"
<<
op
.
mode
;
return
os
;
return
os
;
}
}
};
};
...
@@ -132,7 +139,7 @@ struct activation
...
@@ -132,7 +139,7 @@ struct activation
struct
reshape
struct
reshape
{
{
std
::
vector
<
int64_t
>
dims
;
std
::
vector
<
int64_t
>
dims
;
std
::
string
name
()
const
{
return
"reshape
[dims={"
+
to_string
(
dims
)
+
"}]
"
;
}
std
::
string
name
()
const
{
return
"reshape"
;
}
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
shape
compute_shape
(
std
::
vector
<
shape
>
inputs
)
const
{
{
if
(
inputs
.
empty
())
if
(
inputs
.
empty
())
...
@@ -156,7 +163,9 @@ struct reshape
...
@@ -156,7 +163,9 @@ struct reshape
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
reshape
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
reshape
&
op
)
{
{
os
<<
op
.
name
();
os
<<
op
.
name
()
<<
"["
;
os
<<
"dims={"
<<
stream_range
(
op
.
dims
)
<<
"}, "
;
os
<<
"]"
;
return
os
;
return
os
;
}
}
};
};
...
...
include/rtg/streamutils.hpp
0 → 100644
View file @
11dfd0df
#ifndef RTG_GUARD_STREAMUTILS_HPP
#define RTG_GUARD_STREAMUTILS_HPP
#include <ostream>
#include <algorithm>
namespace
rtg
{
template
<
class
T
>
struct
stream_range_container
{
const
T
*
r
;
stream_range_container
(
const
T
&
x
)
:
r
(
&
x
)
{}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
stream_range_container
&
sr
)
{
assert
(
sr
.
r
!=
nullptr
);
if
(
!
sr
.
r
->
empty
())
{
os
<<
sr
.
r
->
front
();
std
::
for_each
(
std
::
next
(
sr
.
r
->
begin
()),
sr
.
r
->
end
(),
[
&
](
auto
&&
x
)
{
os
<<
", "
<<
x
;
});
}
return
os
;
}
};
template
<
class
Range
>
inline
stream_range_container
<
Range
>
stream_range
(
const
Range
&
r
)
{
return
{
r
};
}
}
// namespace rtg
#endif
src/program.cpp
View file @
11dfd0df
...
@@ -98,9 +98,9 @@ literal program::eval(std::unordered_map<std::string, argument> params) const
...
@@ -98,9 +98,9 @@ literal program::eval(std::unordered_map<std::string, argument> params) const
{
{
result
=
ins
.
lit
.
get_argument
();
result
=
ins
.
lit
.
get_argument
();
}
}
else
if
(
starts_with
(
ins
.
op
.
name
()
,
"@param"
)
)
else
if
(
ins
.
op
.
name
()
==
"@param"
)
{
{
result
=
params
.
at
(
ins
.
op
.
name
().
substr
(
7
)
);
result
=
params
.
at
(
any_cast
<
builtin
::
param
>
(
ins
.
op
).
parameter
);
}
}
else
else
{
{
...
@@ -124,9 +124,9 @@ std::ostream& operator<<(std::ostream& os, const program& p)
...
@@ -124,9 +124,9 @@ std::ostream& operator<<(std::ostream& os, const program& p)
for
(
auto
&
ins
:
p
.
impl
->
instructions
)
for
(
auto
&
ins
:
p
.
impl
->
instructions
)
{
{
std
::
string
var_name
=
"@"
+
std
::
to_string
(
count
);
std
::
string
var_name
=
"@"
+
std
::
to_string
(
count
);
if
(
starts_with
(
ins
.
op
.
name
()
,
"@param"
)
)
if
(
ins
.
op
.
name
()
==
"@param"
)
{
{
var_name
=
ins
.
op
.
name
().
substr
(
7
)
;
var_name
=
any_cast
<
builtin
::
param
>
(
ins
.
op
).
parameter
;
}
}
os
<<
var_name
<<
" = "
;
os
<<
var_name
<<
" = "
;
...
...
test/eval_test.cpp
View file @
11dfd0df
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#include <rtg/program.hpp>
#include <rtg/program.hpp>
#include <rtg/argument.hpp>
#include <rtg/argument.hpp>
#include <rtg/shape.hpp>
#include <rtg/shape.hpp>
#include <sstream>
#include "test.hpp"
#include "test.hpp"
struct
sum_op
struct
sum_op
...
@@ -94,6 +95,20 @@ void literal_test2()
...
@@ -94,6 +95,20 @@ void literal_test2()
EXPECT
(
result
!=
rtg
::
literal
{
3
});
EXPECT
(
result
!=
rtg
::
literal
{
3
});
}
}
void
print_test
()
{
rtg
::
program
p
;
auto
x
=
p
.
add_parameter
(
"x"
,
{
rtg
::
shape
::
int64_type
});
auto
two
=
p
.
add_literal
(
2
);
p
.
add_instruction
(
sum_op
{},
x
,
two
);
std
::
stringstream
ss
;
ss
<<
p
;
std
::
string
s
=
ss
.
str
();
EXPECT
(
!
s
.
empty
());
}
void
param_test
()
void
param_test
()
{
{
rtg
::
program
p
;
rtg
::
program
p
;
...
@@ -139,6 +154,7 @@ void insert_replace_test()
...
@@ -139,6 +154,7 @@ void insert_replace_test()
EXPECT
(
result
!=
rtg
::
literal
{
5
});
EXPECT
(
result
!=
rtg
::
literal
{
5
});
}
}
void
target_test
()
void
target_test
()
{
{
rtg
::
program
p
;
rtg
::
program
p
;
...
@@ -156,6 +172,7 @@ int main()
...
@@ -156,6 +172,7 @@ int main()
{
{
literal_test1
();
literal_test1
();
literal_test2
();
literal_test2
();
print_test
();
param_test
();
param_test
();
replace_test
();
replace_test
();
insert_replace_test
();
insert_replace_test
();
...
...
test/operation.cpp
View file @
11dfd0df
...
@@ -12,11 +12,18 @@ struct simple_operation
...
@@ -12,11 +12,18 @@ struct simple_operation
rtg
::
argument
compute
(
std
::
vector
<
rtg
::
argument
>
)
const
{
RTG_THROW
(
"not computable"
);
}
rtg
::
argument
compute
(
std
::
vector
<
rtg
::
argument
>
)
const
{
RTG_THROW
(
"not computable"
);
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
simple_operation
&
op
)
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
simple_operation
&
op
)
{
{
os
<<
op
.
name
();
os
<<
"["
<<
op
.
name
()
<<
"]"
;
return
os
;
return
os
;
}
}
};
};
struct
simple_operation_no_print
{
std
::
string
name
()
const
{
return
"simple"
;
}
rtg
::
shape
compute_shape
(
std
::
vector
<
rtg
::
shape
>
)
const
{
RTG_THROW
(
"not computable"
);
}
rtg
::
argument
compute
(
std
::
vector
<
rtg
::
argument
>
)
const
{
RTG_THROW
(
"not computable"
);
}
};
void
operation_copy_test
()
void
operation_copy_test
()
{
{
simple_operation
s
{};
simple_operation
s
{};
...
@@ -41,8 +48,28 @@ void operation_any_cast()
...
@@ -41,8 +48,28 @@ void operation_any_cast()
EXPECT
(
rtg
::
any_cast
<
not_operation
*>
(
&
op2
)
==
nullptr
);
EXPECT
(
rtg
::
any_cast
<
not_operation
*>
(
&
op2
)
==
nullptr
);
}
}
void
operation_print
()
{
rtg
::
operation
op
=
simple_operation
{};
std
::
stringstream
ss
;
ss
<<
op
;
std
::
string
s
=
ss
.
str
();
EXPECT
(
s
==
"[simple]"
);
}
void
operation_default_print
()
{
rtg
::
operation
op
=
simple_operation_no_print
{};
std
::
stringstream
ss
;
ss
<<
op
;
std
::
string
s
=
ss
.
str
();
EXPECT
(
s
==
"simple"
);
}
int
main
()
int
main
()
{
{
operation_copy_test
();
operation_copy_test
();
operation_any_cast
();
operation_any_cast
();
operation_print
();
operation_default_print
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment