source: icGREP/icgrep-devel/icgrep/kernels/lz4/aio/lz4_swizzled_aio.h @ 6135

Last change on this file since 6135 was 6132, checked in by xwa163, 11 months ago
  1. More experiment on lz4 grep
  2. Improve performance of lzparabix grep
File size: 3.1 KB
Line 
1
2#ifndef ICGREP_LZ4_SWIZZLED_AIO_H
3#define ICGREP_LZ4_SWIZZLED_AIO_H
4
5#include "kernels/lz4/aio/lz4_sequential_aio_base.h"
6#include "kernels/kernel.h"
7#include <string>
8#include <map>
9#include <vector>
10
11
12namespace llvm {
13    class Module;
14    class Function;
15    class BasicBlock;
16    class Value;
17}
18
19namespace IDISA { class IDISA_Builder; }
20
21namespace kernel {
22    class LZ4SwizzledAioKernel : public LZ4SequentialAioBaseKernel {
23
24    public:
25        LZ4SwizzledAioKernel(const std::unique_ptr<kernel::KernelBuilder> &b, unsigned streamCount, unsigned streamSize, unsigned swizzleFactor, unsigned blockSize = 4 * 1024 * 1024);
26
27    protected:
28        unsigned mStreamCount;
29        unsigned mStreamSize;
30        unsigned mSwizzleFactor;
31        unsigned mPDEPWidth;
32
33
34        void handleAccelerationLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStart,
35                                                                 llvm::Value *literalLength, const std::vector<llvm::Value*>& inputLiteralValues);
36        void handleAccelerationPdepOutput(
37                const std::unique_ptr<KernelBuilder> &b,
38                llvm::Value *literalBlockIndex,
39                llvm::Value *literalMasks,
40                llvm::Value *literalLengthArray,
41                llvm::Value *matchOffsetArray,
42                llvm::Value *matchLengthArray,
43                llvm::Value *numOfElements
44        );
45
46        void handleAccelerationMatchCopyOutput(
47                const std::unique_ptr<KernelBuilder> &b,
48                llvm::Value *literalLengthArray,
49                llvm::Value *matchOffsetArray,
50                llvm::Value *matchLengthArray,
51                llvm::Value *numOfElements
52        );
53
54        void handleMatchCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* matchPos, llvm::Value* matchOffset, llvm::Value* matchLength, bool clearBuffer = true);
55
56        virtual void doLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStart,
57                                   llvm::Value *literalLength, llvm::Value* blockStart) override;
58        virtual void doMatchCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *matchOffset,
59                                 llvm::Value *matchLength);
60        virtual void setProducedOutputItemCount(const std::unique_ptr<KernelBuilder> &b, llvm::Value* produced);
61
62
63        virtual void prepareAcceleration(const std::unique_ptr<KernelBuilder> &b, llvm::Value* beginTokenPos) override;
64        virtual void doAccelerationLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStart,
65                                                             llvm::Value *literalLength, llvm::Value* blockStart) override;
66        virtual void doAccelerationMatchCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *matchOffset,
67                                                           llvm::Value *matchLength) override;
68        virtual void finishAcceleration(const std::unique_ptr<KernelBuilder> &b, llvm::Value* beginTokenPos, llvm::Value* literalMask) override;
69    private:
70
71    };
72};
73
74
75#endif //ICGREP_LZ4_SWIZZLED_AIO_H
Note: See TracBrowser for help on using the repository browser.