MNN
MNN copied to clipboard
`MNNV2Basic.out` 中 `Avg` 和 `OpSum` 的时间存在差异
平台(如果交叉编译请再附上交叉编译目标平台):
WSL2-Debian
Github版本: 5607201b88b21b404587ab13735827e3458ea9cb
编译方式:
-> % cmake -DMNN_SEP_BUILD=OFF ..
-- Use Threadpool, forbid openmp
-- >>>>>>>>>>>>>
-- MNN BUILD INFO:
-- System: Linux
-- Processor: x86_64
-- Version: 2.8.1
-- Metal: OFF
-- OpenCL: OFF
-- OpenGL: OFF
-- Vulkan: OFF
-- ARM82: OFF
-- oneDNN: OFF
-- TensorRT: OFF
-- CoreML: OFF
-- NNAPI: OFF
-- CUDA: OFF
-- OpenMP: OFF
-- BF16: OFF
-- ThreadPool: ON
-- Hidden: TRUE
-- Build Path: /home/hebangwen/Code/OriginMNN/build
-- CUDA PROFILE: OFF
-- WIN_USE_ASM:
-- x86_64: Open SSE
-- MNN_AVX512:OFF
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hebangwen/Code/OriginMNN/build
详情
你好,我发现 MNNV2Basic.out 中 Avg 和 OpSum 的时间存在差异。测试结果如下:
-> % ./MNNV2Basic.out bert_layer_sim.mnn 10 0 0
...
Avg= 6.437600 ms, OpSum = 7.997801 ms min= 4.856000 ms, max= 8.309000 ms
但是按照 OpSum 的语义,即所有 Op 的延时之和,它应该比 Avg 的时间略低,因为没有 tensor 拷贝的开销。我发现原因是 MNNV2Basic.cpp 在预热时也传入了 beforeCallback 和 afterCallback,导致 OpSum 的总时间比 Avg 的总时间长,将预热时的 runSessionWithCallbackInfo 改为 runSession 后,时间变得合理:
-> % ./MNNV2Basic.out bert_layer_sim.mnn 10 0 0
...
Avg= 6.691600 ms, OpSum = 6.655000 ms min= 4.769000 ms, max= 9.124001 ms
确实这里写得有问题,帮忙提个 pr 修正吧。也可以等我们改正
Marking as stale. No activity in 60 days.