Ignore:
Timestamp:
Aug 11, 2018, 1:17:11 AM (9 months ago)
Author:
xwa163
Message:

lz4_grep: Init checkin for utf8 character class multiplexing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/lz4/grep/lz4_grep_bytestream_generator.cpp

    r6143 r6144  
    6868        StreamSetBuffer* twistedCharClasses = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(1, 2),
    6969                                                                                this->getDefaultBufferBlocks(), 1);
    70         kernel::Kernel* twistK = mPxDriver.addKernelInstance<kernel::TwistByPDEPKernel>(b, numOfStreams, 2);
     70        kernel::Kernel* twistK = mPxDriver.addKernelInstance<kernel::TwistMultipleByPDEPKernel>(b, std::vector<unsigned>{numOfStreams}, 2);
    7171        mPxDriver.makeKernelCall(twistK, {compressedBitStream}, {twistedCharClasses});
    7272
     
    9090        StreamSetBuffer* untwistedCharClasses = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(numOfStreams),
    9191                                                                                  this->getDefaultBufferBlocks(), 1);
    92         kernel::Kernel* untwistK = mPxDriver.addKernelInstance<kernel::UntwistByPEXTKernel>(b, numOfStreams, 2);
     92        kernel::Kernel* untwistK = mPxDriver.addKernelInstance<kernel::UntwistMultipleByPEXTKernel>(b, std::vector<unsigned>{numOfStreams}, 2);
    9393        mPxDriver.makeKernelCall(untwistK, {uncompressedTwistedCharClasses}, {untwistedCharClasses});
    9494        return untwistedCharClasses;
     
    9797        StreamSetBuffer* twistedCharClasses = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(1, 4),
    9898                                                                                this->getDefaultBufferBlocks(), 1);
    99         kernel::Kernel* twistK = mPxDriver.addKernelInstance<kernel::TwistByPDEPKernel>(b, numOfStreams, 4);
     99        kernel::Kernel* twistK = mPxDriver.addKernelInstance<kernel::TwistMultipleByPDEPKernel>(b, std::vector<unsigned>{numOfStreams}, 4);
    100100        mPxDriver.makeKernelCall(twistK, {compressedBitStream}, {twistedCharClasses});
    101101
     
    120120        StreamSetBuffer* untwistedCharClasses = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(numOfStreams),
    121121                                                                                  this->getDefaultBufferBlocks(), 1);
    122         kernel::Kernel* untwistK = mPxDriver.addKernelInstance<kernel::UntwistByPEXTKernel>(b, numOfStreams, 4);
     122        kernel::Kernel* untwistK = mPxDriver.addKernelInstance<kernel::UntwistMultipleByPEXTKernel>(b, std::vector<unsigned>{numOfStreams}, 4);
    123123        mPxDriver.makeKernelCall(untwistK, {uncompressedTwistedCharClasses}, {untwistedCharClasses});
    124124        return untwistedCharClasses;
     
    154154    Kernel * s2pk = mPxDriver.addKernelInstance<S2PKernel>(b, cc::BitNumbering::BigEndian, true, prefix, numOfStreams);
    155155    mPxDriver.makeKernelCall(s2pk, {decompressionMtxByteStream}, {uncompressedMtxBitStream});
    156     this->s2p(decompressionMtxByteStream);
    157156    return uncompressedMtxBitStream;
    158157}
     158
     159std::vector<parabix::StreamSetBuffer *>
     160LZ4GrepByteStreamGenerator::decompressBitStreams(parabix::StreamSetBuffer *compressedByteStream,
     161                                                 std::vector<parabix::StreamSetBuffer *> compressedBitStreams) {
     162
     163
     164    auto & b = mPxDriver.getBuilder();
     165    LZ4BlockInfo blockInfo = this->getBlockInfo(compressedByteStream);
     166
     167    unsigned totalStreamNum = 0;
     168    std::vector<unsigned> numOfStreams;
     169    std::vector<StreamSetBuffer*> retStreams;
     170    for (unsigned i = 0; i < compressedBitStreams.size(); i++) {
     171        unsigned n = compressedBitStreams[i]->getNumOfStreams();
     172
     173        numOfStreams.push_back(n);
     174        totalStreamNum += n;
     175        retStreams.push_back(mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(n), this->getDefaultBufferBlocks(), 1));
     176    }
     177
     178    if (totalStreamNum == 1) {
     179        // TODO
     180    } else if (totalStreamNum <= 4) {
     181        unsigned twistWidth = totalStreamNum == 2 ? 2 : 4;
     182
     183        StreamSetBuffer* twistedStream = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(1, twistWidth),
     184                                                                                this->getDefaultBufferBlocks(), 1);
     185        kernel::Kernel* twistK = mPxDriver.addKernelInstance<kernel::TwistMultipleByPDEPKernel>(b, numOfStreams, twistWidth);
     186        mPxDriver.makeKernelCall(twistK, compressedBitStreams, {twistedStream});
     187
     188        StreamSetBuffer* uncompressedTwistedStream = mPxDriver.addBuffer<StaticBuffer>(b, b->getStreamSetTy(1, twistWidth),
     189                                                                                            this->getDefaultBufferBlocks(), 1);
     190        Kernel* lz4I4AioK = mPxDriver.addKernelInstance<LZ4TwistDecompressionKernel>(b, twistWidth);
     191        lz4I4AioK->setInitialArguments({mFileSize});
     192        mPxDriver.makeKernelCall(lz4I4AioK, {
     193                compressedByteStream,
     194
     195                blockInfo.isCompress,
     196                blockInfo.blockStart,
     197                blockInfo.blockEnd,
     198
     199                twistedStream
     200        }, {
     201                uncompressedTwistedStream
     202                                 });
     203
     204        kernel::Kernel* untwistK = mPxDriver.addKernelInstance<kernel::UntwistMultipleByPEXTKernel>(b, numOfStreams, twistWidth);
     205        mPxDriver.makeKernelCall(untwistK, {uncompressedTwistedStream}, retStreams);
     206    } else {
     207        // TODO
     208    }
     209    return retStreams;
     210}
Note: See TracChangeset for help on using the changeset viewer.