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
composable_kernel
Commits
983bd0a4
"...composable_kernel_rocm.git" did not exist on "0741a8ab88ef90a4a82767bc9229f403b4e4c2e5"
Commit
983bd0a4
authored
Oct 02, 2023
by
Adam Osewski
Browse files
Few fixes to B2C map and new functionality.
parent
2a32ec48
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
9 deletions
+24
-9
include/ck/tensor_operation/gpu/grid/block_to_ctile_map.hpp
include/ck/tensor_operation/gpu/grid/block_to_ctile_map.hpp
+14
-3
test/block_to_ctile_map/test_block_to_ctile_map.cpp
test/block_to_ctile_map/test_block_to_ctile_map.cpp
+10
-6
No files found.
include/ck/tensor_operation/gpu/grid/block_to_ctile_map.hpp
View file @
983bd0a4
...
@@ -1225,6 +1225,12 @@ struct BlockToCTileMap_LinearKSplit
...
@@ -1225,6 +1225,12 @@ struct BlockToCTileMap_LinearKSplit
return
make_tuple
(
M0_idx_
,
N0_idx_
,
K0_idx_
);
return
make_tuple
(
M0_idx_
,
N0_idx_
,
K0_idx_
);
}
}
__host__
__device__
index_t
GetOutputTileIdx
()
const
{
const
auto
N0
=
math
::
integer_divide_ceil
(
N_
,
NPerBlock
);
return
M0_idx_
*
N0
+
N0_idx_
;
}
template
<
typename
CTileIdx
,
typename
CTileDim
>
template
<
typename
CTileIdx
,
typename
CTileDim
>
__host__
__device__
bool
ValidCTileIndex
(
const
CTileIdx
&
/* c_tile_idx */
,
__host__
__device__
bool
ValidCTileIndex
(
const
CTileIdx
&
/* c_tile_idx */
,
const
CTileDim
&
/* c_tile_dim */
)
const
const
CTileDim
&
/* c_tile_dim */
)
const
...
@@ -1234,8 +1240,13 @@ struct BlockToCTileMap_LinearKSplit
...
@@ -1234,8 +1240,13 @@ struct BlockToCTileMap_LinearKSplit
__host__
__device__
bool
GetNextKTileIdx
()
__host__
__device__
bool
GetNextKTileIdx
()
{
{
K0_idx_
++
;
if
(
K0_idx_
+
1
<
KSplit_
)
return
K0_idx_
<
KSplit_
;
{
K0_idx_
++
;
return
true
;
}
else
return
false
;
}
}
///
///
...
@@ -1247,7 +1258,7 @@ struct BlockToCTileMap_LinearKSplit
...
@@ -1247,7 +1258,7 @@ struct BlockToCTileMap_LinearKSplit
///
///
__host__
__device__
bool
IsFirstKSplitBlock
(
index_t
tiles_per_block
)
const
__host__
__device__
bool
IsFirstKSplitBlock
(
index_t
tiles_per_block
)
const
{
{
return
(
K0_idx_
-
tiles_per_block
)
<=
0
;
return
(
K0_idx_
+
1
-
tiles_per_block
)
<=
0
;
}
}
__host__
__device__
index_t
GetTileMIdx
()
const
{
return
M0_idx_
;
}
__host__
__device__
index_t
GetTileMIdx
()
const
{
return
M0_idx_
;
}
...
...
test/block_to_ctile_map/test_block_to_ctile_map.cpp
View file @
983bd0a4
...
@@ -364,11 +364,12 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_BottomIndex)
...
@@ -364,11 +364,12 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_BottomIndex)
TEST
(
BlockToCTileMap
,
BlockToCTileMap_LinearKSplit_NextKTile
)
TEST
(
BlockToCTileMap
,
BlockToCTileMap_LinearKSplit_NextKTile
)
{
{
const
index_t
M
=
768
;
const
index_t
M
=
768
;
const
index_t
N
=
384
;
const
index_t
N
=
384
;
const
index_t
MPerBlock
=
128
;
const
index_t
MPerBlock
=
128
;
const
index_t
NPerBlock
=
64
;
const
index_t
NPerBlock
=
64
;
const
index_t
KSplit
=
3
;
const
index_t
KSplit
=
3
;
const
index_t
tiles_per_block
=
1
;
auto
c_grid_desc_m_n
=
make_naive_tensor_descriptor_packed
(
make_tuple
(
M
,
N
));
auto
c_grid_desc_m_n
=
make_naive_tensor_descriptor_packed
(
make_tuple
(
M
,
N
));
...
@@ -377,6 +378,7 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_NextKTile)
...
@@ -377,6 +378,7 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_NextKTile)
auto
m0n0k0_idx
=
tile_map
.
CalculateBottomIndex
(
3
);
auto
m0n0k0_idx
=
tile_map
.
CalculateBottomIndex
(
3
);
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
(
std
::
vector
<
int
>
{
0
,
1
,
0
}));
(
std
::
vector
<
int
>
{
0
,
1
,
0
}));
EXPECT_TRUE
(
tile_map
.
IsFirstKSplitBlock
(
tiles_per_block
));
for
(
index_t
i
=
0
;
i
<
KSplit
-
1
;
i
++
)
for
(
index_t
i
=
0
;
i
<
KSplit
-
1
;
i
++
)
{
{
...
@@ -384,9 +386,11 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_NextKTile)
...
@@ -384,9 +386,11 @@ TEST(BlockToCTileMap, BlockToCTileMap_LinearKSplit_NextKTile)
m0n0k0_idx
=
tile_map
.
GetBottomIndex
();
m0n0k0_idx
=
tile_map
.
GetBottomIndex
();
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
(
std
::
vector
<
int
>
{
0
,
1
,
i
+
1
}));
(
std
::
vector
<
int
>
{
0
,
1
,
i
+
1
}));
EXPECT_FALSE
(
tile_map
.
IsFirstKSplitBlock
(
tiles_per_block
));
}
}
EXPECT_FALSE
(
tile_map
.
GetNextKTileIdx
());
EXPECT_FALSE
(
tile_map
.
GetNextKTileIdx
());
m0n0k0_idx
=
tile_map
.
GetBottomIndex
();
m0n0k0_idx
=
tile_map
.
GetBottomIndex
();
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
EXPECT_EQ
((
std
::
vector
<
int
>
{
m0n0k0_idx
[
I0
],
m0n0k0_idx
[
I1
],
m0n0k0_idx
[
I2
]}),
(
std
::
vector
<
int
>
{
0
,
1
,
3
}));
(
std
::
vector
<
int
>
{
0
,
1
,
2
}));
EXPECT_FALSE
(
tile_map
.
IsFirstKSplitBlock
(
tiles_per_block
));
}
}
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