| 13 | } |
| 14 | |
| 15 | ChecksumForward::Result ChecksumForwardImpl::exec( |
| 16 | _megdnn_tensor_in data, _megdnn_workspace workspace) { |
| 17 | check_exec(data.layout, workspace.size); |
| 18 | |
| 19 | Result result; |
| 20 | bool finished = false; |
| 21 | auto run = [&]() { |
| 22 | auto ptr = static_cast<uint8_t*>(data.raw_ptr()); |
| 23 | size_t size_all = data.layout.shape[0], size_ints = size_all / sizeof(uint32_t); |
| 24 | result.last_val.iv = 0; |
| 25 | auto last_val_size = std::min<size_t>(size_all, 4); |
| 26 | memcpy(&result.last_val, ptr + size_all - last_val_size, last_val_size); |
| 27 | result.checksum = 0; |
| 28 | auto iptr = static_cast<uint32_t*>(data.raw_ptr()); |
| 29 | for (size_t i = 0; i < size_ints; ++i) |
| 30 | result.checksum += iptr[i] * (i + 1); |
| 31 | |
| 32 | finished = true; |
| 33 | }; |
| 34 | auto handle = static_cast<HandleImpl*>(this->handle()); |
| 35 | handle->dispatch_kern(run); |
| 36 | handle->megcore_dispatcher()->sync(); |
| 37 | megdnn_assert(finished); |
| 38 | return result; |
| 39 | } |
| 40 | |
| 41 | // vim: syntax=cpp.doxygen |
nothing calls this directly
no test coverage detected