FT_DSP.gitlink.net/master/html/_sources/functionlib/dsplib/batchtospacend.rst.txt

92 lines
4.9 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

BatchToSpaceND
=================
将输入张量的 batch 维度按 block 因子分解并重排到空间维度,随后根据 ``crops`` 参数对输出空间范围进行裁剪。
- 输入形状: ``[batch, height, width, channel]``
- ``block_size`` ``[block_h, block_w]``
- ``crops`` ``[top, bottom, left, right]``
输入:
- **input** - 输入数据地址。
- **input_shape** - 输入形状,格式为 ``[batch, height, width, channel]``
- **block_size** - 分块因子,格式为 ``[block_h, block_w]``
- **crops** - 裁剪参数,格式为 ``[top, bottom, left, right]``
- **core_mask(int, 可选)** - 核掩码(仅适用于共享存储版本)。
输出:
- **output** - 输出数据地址。
支持平台:
``FT78NE``
``MT7004``
.. note::
- FT78NE 支持的数据类型: fp32、fp64、cplx64、cplx128、int16、int8、int32。
- MT7004 支持的数据类型: fp32、fp16、cplx64、int16、int32。
**共享存储版本:**
.. c:function:: void i8_batchtospacend_s(int8_t *input, int8_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void i16_batchtospacend_s(int16_t *input, int16_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void i32_batchtospacend_s(int32_t *input, int32_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void hp_batchtospacend_s(half *input, half *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void fp_batchtospacend_s(float *input, float *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void dp_batchtospacend_s(double *input, double *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void c64_batchtospacend_s(float *input, float *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
.. c:function:: void c128_batchtospacend_s(double *input, double *output, const int *input_shape, const int *block_size, const int *crops, int data_size, int core_mask)
**C 调用示例:**
.. code-block:: c
:linenos:
:emphasize-lines: 11
// FT78NE 多核示例
#include <stdio.h>
int main(int argc, char *argv[]) {
float *input = (float *)0xA0000000; // 多核版本:输入放在 DDR 地址 0xA0000000
float *output = (float *)0xB0000000; // 多核版本:输出放在 DDR 地址 0xB0000000
int input_shape[4] = {400, 2, 2, 3};
int block_size[2] = {2, 2};
int crops[4] = {0, 0, 0, 0};
int core_mask = 0xff;
fp_batchtospacend_s(input, output, input_shape, block_size, crops, sizeof(float), core_mask);
return 0;
}
**私有存储版本:**
.. c:function:: void i8_batchtospacend_p(int8_t *input, int8_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void i16_batchtospacend_p(int16_t *input, int16_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void i32_batchtospacend_p(int32_t *input, int32_t *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void hp_batchtospacend_p(half *input, half *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void fp_batchtospacend_p(float *input, float *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void dp_batchtospacend_p(double *input, double *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void c64_batchtospacend_p(float *input, float *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
.. c:function:: void c128_batchtospacend_p(double *input, double *output, const int *input_shape, const int *block_size, const int *crops, int data_size)
**C 调用示例:**
.. code-block:: c
:linenos:
:emphasize-lines: 10
// FT78NE 单核示例
#include <stdio.h>
int main(int argc, char *argv[]) {
float *input = (float *)0x10000000; // 单核版本:输入放在 L2 地址 0x10000000
float *output = (float *)0x10010000; // 单核版本:输出放在 L2 地址 0x10010000
int input_shape[4] = {400, 2, 2, 3};
int block_size[2] = {2, 2};
int crops[4] = {0, 0, 0, 0};
fp_batchtospacend_p(input, output, input_shape, block_size, crops, sizeof(float));
return 0;
}