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

Last change on this file since 6132 was 6132, checked in by xwa163, 9 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.