# Splice — MindSpore Signal+ 使用手册 alpha 文档

# Splice

对输入数据按给定上下文索引进行拼接操作，将多行特征数据按指定索引映射拼接到输出中。通常用于声学模型或时间序列模型的上下文扩展。

输入：

  - src_data - 输入数据地址。

  - src_row - 输入行数。

  - src_col - 输入列数。

  - dst_row - 输出行数。

  - dst_col - 输出列数。

  - context_dim - 上下文维度，即每行需要拼接的上下文数量。

  - forward_indexes - 上下文索引数组。

  - forward_indexes_dims - 上下文索引数组长度。

  - core_mask - 核掩码（仅适用于共享存储版本）。

输出：

  - dst_data - 拼接后的输出数据地址。

支持平台：

  `FT78NE` `MT7004`

备注

- FT78NE 支持fp, dp, int8, int16, int32, clx64, cplx128

- MT7004 支持hp, fp, i16, i32, cplx64

共享存储版本:

void fp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data, int core_mask)

void hp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, half *src_data, half *dst_data, int core_mask)

void dp_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data, int core_mask)

void i8_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int8_t *src_data, int8_t *dst_data, int core_mask)

void i16_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int16_t *src_data, int16_t *dst_data, int core_mask)

void i32_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int *src_data, int *dst_data, int core_mask)

void c64_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data, int core_mask)

void c128_splice_s(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data, int core_mask)

C调用示例：

     1#include <stdio.h>
     2#include <splice.h>
     3
     4int main() {
     5    float *input = (float *)0xA0000000;    // 输入在DDR空间
     6    float *output = (float *)0xC0000000;
     7    int src_row = 100, src_col = 64;
     8    int dst_row = 100, dst_col = 64*3;
     9    int context_dim = 3;
    10    int forward_indexes[300];              // 举例
    11    int forward_indexes_dims = 300;
    12    int core_mask = 0xff;
    13
    14    fp_splice_s(src_row, src_col, dst_row, dst_col, context_dim, forward_indexes_dims, forward_indexes, input, output, core_mask);
    15    return 0;
    16}

私有存储版本:

void fp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data)

void hp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, half *src_data, half *dst_data)

void dp_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data)

void i8_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int8_t *src_data, int8_t *dst_data)

void i16_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int16_t *src_data, int16_t *dst_data)

void i32_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, int *src_data, int *dst_data)

void c64_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, float *src_data, float *dst_data)

void c128_splice_p(int src_row, int src_col, int dst_row, int dst_col, int context_dim, int forward_indexes_dims, int *forward_indexes, double *src_data, double *dst_data)

C调用示例：

     1#include <stdio.h>
     2#include <splice.h>
     3
     4int main() {
     5    float *input = (float *)0x10810000;    // 输入在L2空间
     6    float *output = (float *)0x10820000;
     7    int src_row = 100, src_col = 64;
     8    int dst_row = 100, dst_col = 64*3;
     9    int context_dim = 3;
    10    int forward_indexes[300];              // 举例
    11    int forward_indexes_dims = 300;
    12
    13    fp_splice_p(src_row, src_col, dst_row, dst_col, context_dim, forward_indexes_dims, forward_indexes, input, output);
    14    return 0;
    15}