| 17 | |
| 18 | template<typename T> |
| 19 | void NCHW2NHWC(const T* source, T* dest, int b, int c, int area) { |
| 20 | int sourceBatchsize = c * area; |
| 21 | int destBatchSize = sourceBatchsize; |
| 22 | for (int bi = 0; bi < b; ++bi) { |
| 23 | auto srcBatch = source + bi * sourceBatchsize; |
| 24 | auto dstBatch = dest + bi * destBatchSize; |
| 25 | for (int i = 0; i < area; ++i) { |
| 26 | auto srcArea = srcBatch + i; |
| 27 | auto dstArea = dstBatch + i * c; |
| 28 | for (int ci = 0; ci < c; ++ci) { |
| 29 | dstArea[ci] = srcArea[ci * area]; |
| 30 | } |
| 31 | } |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | template<typename T> |
| 36 | void NHWC2NCHW(const T* source, T* dest, int b, int c, int area) { |