Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
hcc18
parabix-devel
Commits
68f6e663
Commit
68f6e663
authored
3 years ago
by
nmedfort
Browse files
Options
Download
Email Patches
Plain Diff
testing fix
parent
7249b8bc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
21 deletions
+25
-21
icgrep/base64.cpp
icgrep/base64.cpp
+2
-2
icgrep/u8u16.cpp
icgrep/u8u16.cpp
+23
-19
No files found.
icgrep/base64.cpp
View file @
68f6e663
...
...
@@ -27,9 +27,9 @@
#include <util/papi_helper.hpp>
#endif
//
#define BUFFER_TYPE CircularBuffer
#define BUFFER_TYPE CircularBuffer
#define BUFFER_TYPE DynamicBuffer
//
#define BUFFER_TYPE DynamicBuffer
using
namespace
llvm
;
...
...
This diff is collapsed.
Click to expand it.
icgrep/u8u16.cpp
View file @
68f6e663
...
...
@@ -272,7 +272,9 @@ void u8u16PipelineAVX2Gen(ParabixDriver & pxDriver) {
auto
&
iBuilder
=
pxDriver
.
getBuilder
();
Module
*
mod
=
iBuilder
->
getModule
();
const
unsigned
segmentSize
=
codegen
::
SegmentSize
;
const
unsigned
bufferSegments
=
codegen
::
ThreadNum
+
1
;
const
unsigned
bufferSegments
=
codegen
::
ThreadNum
;
const
auto
size
=
segmentSize
*
(
bufferSegments
+
1
);
const
auto
swizzledSize
=
segmentSize
*
(
bufferSegments
+
2
);
assert
(
iBuilder
);
...
...
@@ -304,24 +306,24 @@ void u8u16PipelineAVX2Gen(ParabixDriver & pxDriver) {
pxDriver
.
makeKernelCall
(
mmapK
,
{},
{
ByteStream
});
// Transposed bits from s2p
StreamSetBuffer
*
BasisBits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
8
,
1
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
BasisBits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
8
,
1
),
s
ize
));
Kernel
*
s2pk
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
S2PKernel
>
(
iBuilder
));
pxDriver
.
makeKernelCall
(
s2pk
,
{
ByteStream
},
{
BasisBits
});
// Calculate UTF-16 data bits through bitwise logic on u8-indexed streams.
StreamSetBuffer
*
U8u16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
DelMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
ErrorMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
U8u16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
ize
));
StreamSetBuffer
*
DelMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
ize
));
StreamSetBuffer
*
ErrorMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
ize
));
Kernel
*
u8u16k
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
U8U16Kernel
>
(
iBuilder
));
pxDriver
.
makeKernelCall
(
u8u16k
,
{
BasisBits
},
{
U8u16Bits
,
DelMask
,
ErrorMask
});
// Allocate space for fully compressed swizzled UTF-16 bit streams
StreamSetBuffer
*
u16Swizzle0
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
egmentSize
*
(
bufferSegments
+
2
)
,
1
));
StreamSetBuffer
*
u16Swizzle1
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
egmentSize
*
(
bufferSegments
+
2
)
,
1
));
StreamSetBuffer
*
u16Swizzle2
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
egmentSize
*
(
bufferSegments
+
2
)
,
1
));
StreamSetBuffer
*
u16Swizzle3
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
egmentSize
*
(
bufferSegments
+
2
)
,
1
));
StreamSetBuffer
*
u16Swizzle0
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
wizzledSize
,
1
));
StreamSetBuffer
*
u16Swizzle1
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
wizzledSize
,
1
));
StreamSetBuffer
*
u16Swizzle2
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
wizzledSize
,
1
));
StreamSetBuffer
*
u16Swizzle3
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
SwizzledCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
4
),
s
wizzledSize
,
1
));
// Apply a deletion algorithm to discard all but the final position of the UTF-8
// sequences (bit streams) for each UTF-16 code unit. Also compresses and swizzles the result.
...
...
@@ -329,7 +331,7 @@ void u8u16PipelineAVX2Gen(ParabixDriver & pxDriver) {
pxDriver
.
makeKernelCall
(
delK
,
{
U8u16Bits
,
DelMask
},
{
u16Swizzle0
,
u16Swizzle1
,
u16Swizzle2
,
u16Swizzle3
});
// Produce unswizzled UTF-16 bit streams
StreamSetBuffer
*
u16bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
u16bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
ize
));
Kernel
*
unSwizzleK
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
SwizzleGenerator
>
(
iBuilder
,
16
,
1
,
4
));
pxDriver
.
makeKernelCall
(
unSwizzleK
,
{
u16Swizzle0
,
u16Swizzle1
,
u16Swizzle2
,
u16Swizzle3
},
{
u16bits
});
...
...
@@ -351,7 +353,7 @@ void u8u16PipelineAVX2Gen(ParabixDriver & pxDriver) {
if
(
mMapBuffering
||
memAlignBuffering
)
{
U16out
=
pxDriver
.
addExternalBuffer
(
std
::
make_unique
<
ExternalBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
outputStream
));
}
else
{
U16out
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
s
egmentSize
*
bufferSegments
));
U16out
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
s
ize
));
}
pxDriver
.
makeKernelCall
(
p2sk
,
{
u16bits
},
{
U16out
});
pxDriver
.
makeKernelCall
(
outK
,
{
U16out
},
{});
...
...
@@ -371,7 +373,9 @@ void u8u16PipelineGen(ParabixDriver & pxDriver) {
Module
*
mod
=
iBuilder
->
getModule
();
const
unsigned
segmentSize
=
codegen
::
SegmentSize
;
const
unsigned
bufferSegments
=
codegen
::
ThreadNum
+
1
;
const
unsigned
bufferSegments
=
codegen
::
ThreadNum
;
const
auto
size
=
segmentSize
*
(
bufferSegments
+
1
);
Type
*
const
voidTy
=
iBuilder
->
getVoidTy
();
Type
*
const
bitBlockType
=
iBuilder
->
getBitBlockType
();
Type
*
const
outputType
=
ArrayType
::
get
(
ArrayType
::
get
(
bitBlockType
,
16
),
1
)
->
getPointerTo
();
...
...
@@ -400,22 +404,22 @@ void u8u16PipelineGen(ParabixDriver & pxDriver) {
pxDriver
.
makeKernelCall
(
mmapK
,
{},
{
ByteStream
});
// Transposed bits from s2p
StreamSetBuffer
*
BasisBits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
8
,
1
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
BasisBits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
8
,
1
),
s
ize
));
Kernel
*
s2pk
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
S2PKernel
>
(
iBuilder
));
pxDriver
.
makeKernelCall
(
s2pk
,
{
ByteStream
},
{
BasisBits
});
// Calculate UTF-16 data bits through bitwise logic on u8-indexed streams.
StreamSetBuffer
*
U8u16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
DelMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
ErrorMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
U8u16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
ize
));
StreamSetBuffer
*
DelMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
ize
));
StreamSetBuffer
*
ErrorMask
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
ize
));
Kernel
*
u8u16k
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
U8U16Kernel
>
(
iBuilder
));
pxDriver
.
makeKernelCall
(
u8u16k
,
{
BasisBits
},
{
U8u16Bits
,
DelMask
,
ErrorMask
});
StreamSetBuffer
*
U16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
U16Bits
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
16
),
s
ize
));
StreamSetBuffer
*
DeletionCounts
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
egmentSize
*
bufferSegments
));
StreamSetBuffer
*
DeletionCounts
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(),
s
ize
));
Kernel
*
delK
=
pxDriver
.
addKernelInstance
(
std
::
make_unique
<
DeletionKernel
>
(
iBuilder
,
iBuilder
->
getBitBlockWidth
()
/
16
,
16
));
pxDriver
.
makeKernelCall
(
delK
,
{
U8u16Bits
,
DelMask
},
{
U16Bits
,
DeletionCounts
});
...
...
@@ -436,7 +440,7 @@ void u8u16PipelineGen(ParabixDriver & pxDriver) {
if
(
mMapBuffering
||
memAlignBuffering
)
{
U16out
=
pxDriver
.
addExternalBuffer
(
std
::
make_unique
<
ExternalBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
outputStream
));
}
else
{
U16out
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
s
egmentSize
*
bufferSegments
,
1
/*overflow block*/
));
U16out
=
pxDriver
.
addBuffer
(
std
::
make_unique
<
CircularCopybackBuffer
>
(
iBuilder
,
iBuilder
->
getStreamSetTy
(
1
,
16
),
s
ize
,
1
/*overflow block*/
));
}
pxDriver
.
makeKernelCall
(
p2sk
,
{
U16Bits
,
DeletionCounts
},
{
U16out
});
pxDriver
.
makeKernelCall
(
outK
,
{
U16out
},
{});
...
...
This diff is collapsed.
Click to expand it.
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