Ignore:
Timestamp:
Jun 8, 2018, 1:03:34 AM (11 months ago)
Author:
xwa163
Message:

Improve performance of literal copy and match copy in LZ4ParallelByteSteamAIOKernel

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/kernels/lz4/lz4_parallel_bytestream_aio.h

    r6065 r6070  
    1 //
    2 // Created by wxy325 on 2018/5/31.
    3 //
    41
    52#ifndef ICGREP_LZ4_PARALLEL_BYTESTREAM_AIO_H
     
    107#include <map>
    118#include <vector>
     9#include <llvm/IR/DerivedTypes.h>
    1210
    1311namespace llvm {
     
    2624
    2725    public:
    28         LZ4ParallelByteStreamAioKernel(const std::unique_ptr<kernel::KernelBuilder> &b);
     26        // By default, output block size in LZ4 is 4MB
     27        LZ4ParallelByteStreamAioKernel(const std::unique_ptr<kernel::KernelBuilder> &b, size_t outputBlockSize = 4 * 1024 * 1024 );
    2928
    3029    protected:
     
    5756
    5857        void handleSimdLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* literalStartVec, llvm::Value* literalLengthVec, llvm::Value* outputPosVec);
     58        void generateSimdSequentialLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStartVec,
     59                                               llvm::Value *literalLengthVec, llvm::Value *outputPosVec);
     60
     61        void generateSimdSequentialLiteralCopyWithSimdCalculation(const std::unique_ptr<KernelBuilder> &b,
     62                                                                  llvm::Value *literalStartVec,
     63                                                                  llvm::Value *literalLengthVec,
     64                                                                  llvm::Value *outputPosVec);
     65        void generateSimdLiteralCopyByScatter(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStartVec,
     66                                              llvm::Value *literalLengthVec, llvm::Value *outputPosVec);
     67        void generateSimdLiteralCopyByMemcpy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *literalStartVec,
     68                                             llvm::Value *literalLengthVec, llvm::Value *outputPosVec);
     69
     70        void generateOverwritingMemcpy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *inputBasePtr,
     71                                       llvm::Value *outputBasePtr, llvm::Value *copyBytes, llvm::PointerType *targetPtrTy,
     72                                       size_t stepSize);
     73        void generateOverwritingMemcpy(const std::unique_ptr<KernelBuilder> &b, llvm::Value *inputBasePtr,
     74                                       llvm::Value *outputBasePtr, llvm::Value *copyBytes, llvm::PointerType *targetPtrTy,
     75                                       llvm::Value* stepSize);
     76
    5977        void handleSimdMatchCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* matchOffsetVec, llvm::Value* matchLengthVec, llvm::Value* outputPosVec);
     78        void generateSimdMatchCopyByMemcpy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* matchOffsetVec, llvm::Value* matchLengthVec, llvm::Value* outputPosVec);
     79        void generateSimdSequentialMatchCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* matchOffsetVec, llvm::Value* matchLengthVec, llvm::Value* outputPosVec);
    6080
    6181        void handleLiteralCopy(const std::unique_ptr<KernelBuilder> &b, llvm::Value* literalStart, llvm::Value* literalLength, llvm::Value* outputPos);
     
    6989        llvm::Value* simdFetchByteDataByLoop(const std::unique_ptr<KernelBuilder> &b, llvm::Value* basePtr, llvm::Value* offsetVec, llvm::Value* mask);
    7090
    71 
     91        size_t mOutputBlockSize;
    7292    };
    7393
Note: See TracChangeset for help on using the changeset viewer.