Changeset 5448
- Timestamp:
- May 13, 2017, 11:37:08 AM (22 months ago)
- Location:
- icGREP/icgrep-devel/icgrep
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
icGREP/icgrep-devel/icgrep/CMakeLists.txt
r5435 r5448 229 229 230 230 add_test( 231 NAME u8u16_multi_test 232 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/../QA/u8u16 233 COMMAND ./run_all ${CMAKE_BINARY_DIR}/u8u16 -segment-size=16 -enable-segment-pipeline-parallel) 234 235 add_test( 231 236 NAME lz4d_test 232 237 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/../QA/lz4d … … 245 250 add_custom_target (u8u16_test 246 251 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/../QA/u8u16 247 COMMAND ./run_all ${CMAKE_BINARY_DIR}/u8u16)252 COMMAND ./run_all "${CMAKE_BINARY_DIR}/u8u16 -segment-size=16 -enable-segment-pipeline-parallel") 248 253 249 254 add_custom_target (lz4d_test -
icGREP/icgrep-devel/icgrep/kernels/kernel.cpp
r5447 r5448 140 140 141 141 for (unsigned i = 0; i < mStreamSetInputs.size(); i++) { 142 if ((mStreamSetInputBuffers[i]->getBufferBlocks() > 0) && (mStreamSetInputBuffers[i]->getBufferBlocks() < requiredBlocks)) {142 if ((mStreamSetInputBuffers[i]->getBufferBlocks() > 1) && (mStreamSetInputBuffers[i]->getBufferBlocks() < requiredBlocks)) { 143 143 report_fatal_error(getName() + ": " + mStreamSetInputs[i].name + " requires buffer size " + std::to_string(requiredBlocks)); 144 144 } -
icGREP/icgrep-devel/icgrep/kernels/stdout_kernel.cpp
r5442 r5448 92 92 Value * bytePtr = iBuilder->CreatePointerCast(iBuilder->getInputStreamBlockPtr("codeUnitBuffer", iBuilder->getInt32(0)), i8PtrTy); 93 93 bytePtr = iBuilder->CreateGEP(bytePtr, byteOffset); 94 iBuilder->CreateWriteCall(fileDes, bytePtr, iBuilder->CreateMul(itemsToDo, itemBytes)); 94 Value * bytesToDo = mCodeUnitWidth == 8 ? itemsToDo : iBuilder->CreateMul(itemsToDo, itemBytes); 95 iBuilder->CreateWriteCall(fileDes, bytePtr, bytesToDo); 95 96 96 97 processed = iBuilder->CreateAdd(processed, itemsToDo); … … 109 110 bytePtr = iBuilder->CreateGEP(bytePtr, byteOffset); 110 111 itemsToDo = iBuilder->CreateSub(available, processed); 111 iBuilder->CreateWriteCall(fileDes, bytePtr, iBuilder->CreateMul(itemsToDo, itemBytes)); 112 bytesToDo = mCodeUnitWidth == 8 ? itemsToDo : iBuilder->CreateMul(itemsToDo, itemBytes); 113 iBuilder->CreateWriteCall(fileDes, bytePtr, bytesToDo); 112 114 processed = iBuilder->CreateAdd(processed, itemsToDo); 113 115 iBuilder->setProcessedItemCount("codeUnitBuffer", available); -
icGREP/icgrep-devel/icgrep/kernels/streamset.cpp
r5446 r5448 138 138 139 139 void StreamSetBuffer::createBlockAlignedCopy(IDISA::IDISA_Builder * const iBuilder, Value * targetBlockPtr, Value * sourceBlockPtr, Value * itemsToCopy) const { 140 Type * size_ty = iBuilder->getSizeTy();141 140 Type * i8ptr = iBuilder->getInt8PtrTy(); 141 unsigned alignment = iBuilder->getBitBlockWidth() / 8; 142 142 Constant * blockSize = iBuilder->getSize(iBuilder->getBitBlockWidth()); 143 Function * f = iBuilder->GetInsertBlock()->getParent();144 BasicBlock * wholeBlockCopy = BasicBlock::Create(iBuilder->getContext(), "wholeBlockCopy", f, 0);145 BasicBlock * partialBlockCopy = BasicBlock::Create(iBuilder->getContext(), "partialBlockCopy", f, 0);146 BasicBlock * copyDone = BasicBlock::Create(iBuilder->getContext(), "copyDone", f, 0);147 143 unsigned numStreams = getType()->getArrayNumElements(); 148 144 auto elemTy = getType()->getArrayElementType(); 149 145 unsigned fieldWidth = isa<ArrayType>(elemTy) ? elemTy->getArrayNumElements() : 1; 146 if (numStreams == 1) { 147 Value * copyBits = iBuilder->CreateMul(itemsToCopy, iBuilder->getSize(fieldWidth)); 148 Value * copyBytes = iBuilder->CreateLShr(iBuilder->CreateAdd(copyBits, iBuilder->getSize(7)), iBuilder->getSize(3)); 149 iBuilder->CreateMemMove(iBuilder->CreateBitCast(targetBlockPtr, i8ptr), iBuilder->CreateBitCast(sourceBlockPtr, i8ptr), copyBytes, alignment); 150 return; 151 } 150 152 Value * blocksToCopy = iBuilder->CreateUDiv(itemsToCopy, blockSize); 151 153 Value * partialItems = iBuilder->CreateURem(itemsToCopy, blockSize); 152 154 Value * partialBlockTargetPtr = iBuilder->CreateGEP(targetBlockPtr, blocksToCopy); 153 155 Value * partialBlockSourcePtr = iBuilder->CreateGEP(sourceBlockPtr, blocksToCopy); 154 iBuilder->CreateCondBr(iBuilder->CreateICmpUGT(blocksToCopy, iBuilder->getSize(0)), wholeBlockCopy, partialBlockCopy); 155 iBuilder->SetInsertPoint(wholeBlockCopy); 156 unsigned alignment = iBuilder->getBitBlockWidth() / 8; 157 Value * copyLength = iBuilder->CreateSub(iBuilder->CreatePtrToInt(partialBlockTargetPtr, size_ty), iBuilder->CreatePtrToInt(targetBlockPtr, size_ty)); 158 iBuilder->CreateMemMove(iBuilder->CreateBitCast(targetBlockPtr, i8ptr), iBuilder->CreateBitCast(sourceBlockPtr, i8ptr), copyLength, alignment); 159 iBuilder->CreateCondBr(iBuilder->CreateICmpUGT(partialItems, iBuilder->getSize(0)), partialBlockCopy, copyDone); 160 iBuilder->SetInsertPoint(partialBlockCopy); 161 Value * copyBits = iBuilder->CreateMul(itemsToCopy, iBuilder->getSize(fieldWidth)); 162 Value * copyBytes = iBuilder->CreateLShr(iBuilder->CreateAdd(copyBits, iBuilder->getSize(7)), iBuilder->getSize(3)); 156 Value * blockCopyBytes = iBuilder->CreateMul(blocksToCopy, iBuilder->getSize(iBuilder->getBitBlockWidth() * numStreams * fieldWidth/8)); 157 iBuilder->CreateMemMove(iBuilder->CreateBitCast(targetBlockPtr, i8ptr), iBuilder->CreateBitCast(sourceBlockPtr, i8ptr), blockCopyBytes, alignment); 158 Value * partialCopyBitsPreStream = iBuilder->CreateMul(partialItems, iBuilder->getSize(fieldWidth)); 159 Value * partialCopyBytesPreStream = iBuilder->CreateLShr(iBuilder->CreateAdd(partialCopyBitsPreStream, iBuilder->getSize(7)), iBuilder->getSize(3)); 163 160 for (unsigned strm = 0; strm < numStreams; strm++) { 164 161 Value * strmTargetPtr = iBuilder->CreateGEP(partialBlockTargetPtr, {iBuilder->getInt32(0), iBuilder->getInt32(strm)}); 165 162 Value * strmSourcePtr = iBuilder->CreateGEP(partialBlockSourcePtr, {iBuilder->getInt32(0), iBuilder->getInt32(strm)}); 166 iBuilder->CreateMemMove(iBuilder->CreateBitCast(strmTargetPtr, i8ptr), iBuilder->CreateBitCast(strmSourcePtr, i8ptr), copyBytes, alignment); 167 } 168 iBuilder->CreateBr(copyDone); 169 iBuilder->SetInsertPoint(copyDone); 163 iBuilder->CreateMemMove(iBuilder->CreateBitCast(strmTargetPtr, i8ptr), iBuilder->CreateBitCast(strmSourcePtr, i8ptr), partialCopyBytesPreStream, alignment); 164 } 170 165 } 171 166
Note: See TracChangeset
for help on using the changeset viewer.