| 1290 | return _run(precision, true); |
| 1291 | } |
| 1292 | bool _checkResult(std::shared_ptr<MNN::Express::Module> basic, int precision, bool shapeMultable) { |
| 1293 | std::shared_ptr<MNN::Express::Module> m0(Module::clone(basic.get()), Module::destroy); |
| 1294 | std::shared_ptr<MNN::Express::Module> m1(Module::clone(basic.get()), Module::destroy); |
| 1295 | |
| 1296 | auto x = _Input({1, 3, 32, 32}, NCHW, halide_type_of<float>()); |
| 1297 | auto ptr = x->writeMap<float>(); |
| 1298 | for (int i=0; i<x->getInfo()->size; ++i) { |
| 1299 | ptr[i] = i * 0.0001f; |
| 1300 | } |
| 1301 | x->unMap(); |
| 1302 | x = x + _Scalar<float>(0.001f); |
| 1303 | auto firstResult = m0->onForward({x})[0]->readMap<float>()[0]; |
| 1304 | auto y = _Input({1, 3, 33, 33}, NCHW, halide_type_of<float>()); |
| 1305 | y->writeMap<float>(); |
| 1306 | y->unMap(); |
| 1307 | m0->onForward({y}); |
| 1308 | auto z = _Input({1, 3, 34, 34}, NCHW, halide_type_of<float>()); |
| 1309 | z->writeMap<float>(); |
| 1310 | z->unMap(); |
| 1311 | m1->onForward({z}); |
| 1312 | x = _Input({1, 3, 32, 32}, NCHW, halide_type_of<float>()); |
| 1313 | ptr = x->writeMap<float>(); |
| 1314 | for (int i=0; i<x->getInfo()->size; ++i) { |
| 1315 | ptr[i] = i * 0.0001f; |
| 1316 | } |
| 1317 | x->unMap(); |
| 1318 | x = x + _Scalar<float>(0.001f); |
| 1319 | auto secondResult = m0->onForward({x})[0]->readMap<float>()[0]; |
| 1320 | if (fabsf(firstResult - secondResult) >= 1e-6) { |
| 1321 | return false; |
| 1322 | } |
| 1323 | return true; |
| 1324 | } |
| 1325 | |
| 1326 | bool _run(int precision, bool shapeMultable) { |
| 1327 | BackendConfig bnConfig; |