Merge pull request #2542 from alibaba/feature/bugfix

fix bug for vulkan tensorconvert error for some case of nc4hw4
This commit is contained in:
jxt1234 2023-08-16 14:34:31 +08:00 committed by GitHub
commit 01aafde807
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 3 additions and 14 deletions

View File

@ -59,11 +59,7 @@ option(MNN_INTERNAL "Build with MNN internal features, such as model authenticat
option(MNN_JNI "Build MNN Jni for java to use" OFF)
IF (NOT DEFINED MNN_USE_SPARSE_COMPUTE)
IF (TARGET_OS_IPHONE OR TARGET_OS_SIMULATOR)
set(MNN_USE_SPARSE_COMPUTE OFF)
ELSE()
set(MNN_USE_SPARSE_COMPUTE ON)
ENDIF()
ENDIF()
IF(NOT MNN_BUILD_SHARED_LIBS AND MNN_SEP_BUILD)

View File

@ -86,9 +86,9 @@ Execution* ConvolutionFloatFactory::create(const std::vector<Tensor*>& inputs, c
std::shared_ptr<ConvolutionCommon::Int8Common> quanCommon;
std::unique_ptr<Tensor> externalWeightTensor, externalBiasTensor;
bool supportSparse = false;
#ifdef MNN_USE_SPARSE_COMPUTE
auto core = static_cast<CPUBackend*>(backend)->functions();
int bytes = core->bytes;
#ifdef MNN_USE_SPARSE_COMPUTE
#ifdef MNN_USE_SSE
const bool onlySSENotAVX = core->pack == 4; // no backend of only sse without avx2 or avx512
#else

View File

@ -54,7 +54,6 @@ std::array<int, 4> VulkanTensor::tensorShapeFormat(const Tensor *input) {
iW = 1;
iC = input->buffer().dim[0].extent;
}
#ifdef LOG_VERBOSE
MNN_PRINT("tensorShapeFormat : [%d, %d, %d, %d] \n", iN, iH, iW, iC);
#endif

View File

@ -126,10 +126,6 @@ void VulkanImageConverter::encodeTensorToBuffer(const Tensor* srcTensor, VkBuffe
const VulkanCommandPool::Buffer* cmdBuffer) {
auto sourceFormat = TensorUtils::getDescribe(srcTensor)->dimensionFormat;
auto destFormat = destBufferFormat;
if (sourceFormat == MNN_DATA_FORMAT_NC4HW4 && 1 >= srcTensor->width() && 1 >= srcTensor->height() &&
srcTensor->channel() % 4 == 0) {
destFormat = MNN_DATA_FORMAT_NC4HW4;
}
auto vkTensor = (VulkanTensor*)(srcTensor->deviceId());
auto tensor = srcTensor;

View File

@ -156,8 +156,6 @@ ErrorCode VulkanRaster::onEncode(const std::vector<Tensor *> &___inputs, const s
for (int i=0; i<origin->dimensions(); ++i) {
bufferSize *= origin->length(i);
}
ivec4 dims;
writeNCHW(dims, origin);
ConvertInfo info;
info.buffer.reset(new VulkanBuffer(vkBn->getDynamicMemoryPool(),
false, bufferSize, nullptr, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT));
@ -212,6 +210,7 @@ ErrorCode VulkanRaster::onEncode(const std::vector<Tensor *> &___inputs, const s
for (auto& iter : mInputBuffers) {
auto& info = iter.second;
info.convert->encodeTensorToBuffer(iter.first, info.buffer->buffer(), info.buffer->size(), 0, VulkanImageConverter::getTensorLinearFormat(iter.first), cmdBuffer);
cmdBuffer->barrierSource(info.buffer->buffer(), 0, info.buffer->size());
}
//Blit
if (needZero) {
@ -223,7 +222,6 @@ ErrorCode VulkanRaster::onEncode(const std::vector<Tensor *> &___inputs, const s
info.describe->writeBuffer(info.srcBuffer, 1, info.srcBufferSize);
info.describe->writeBuffer(info.uniform->buffer(), 2, info.uniform->size());
info.pipeline->bind(cmdBuffer->get(), info.describe->get());
cmdBuffer->barrierSource(info.srcBuffer, 0, info.srcBufferSize);
vkCmdDispatch(cmdBuffer->get(), info.workGroup[0], info.workGroup[1], info.workGroup[2]);
}