FullConnection
=================



传入输入矩阵与权重矩阵，执行全连接计算（矩阵乘法），并可选择性地叠加偏置项与激活函数，
最终输出结果矩阵。

.. math::

    dst_{i,j} = \sum_{k=0}^{K-1} A_{i,k} \cdot B_{k,j} + bias_{i,j}

    dst_{i,j} = activation(dst_{i,j})

其中激活函数支持 ReLU 与 ReLU6。

输入：
    - **A** - 输入矩阵地址，形状为 ``M × K``。
    - **B** - 权重矩阵地址，形状为 ``K × N``。
    - **bias** - 偏置矩阵地址，形状为 ``M × N``，可为 ``NULL``。
    - **M** - 输出矩阵行数。
    - **N** - 输出矩阵列数。
    - **K** - 中间维度大小。
    - **activation_type** - 激活函数类型。
    - **core_mask** - 核掩码（仅适用于共享存储版本）。

输出：
    - **C** - 输出矩阵地址，形状为 ``M × N``。

支持平台：
    ``FT78NE``
    ``MT7004``

.. note::
    - FT78NE 支持fp, int8
    - MT7004 支持hp, fp
    - activation_type 支持 ``ACTIVATION_NONE``、``ACTIVATION_RELU``、``ACTIVATION_RELU6``

**共享存储版本:**

.. c:function:: void i8_fullconnection_s(int8_t* A, int8_t* B, int8_t* C, int8_t* bias, int M, int N, int K, int activation_type, int core_mask)
.. c:function:: void fp_fullconnection_s(float* A, float* B, float* C, float* bias, int M, int N, int K, int activation_type, int core_mask)
.. c:function:: void hp_fullconnection_s(half* A, half* B, half* C, half* bias, int M, int N, int K, int activation_type, int core_mask)

**C调用示例：**

.. code-block:: c
    :linenos:
    :emphasize-lines: 13

    //FT78NE示例
    #include <stdio.h>
    #include <fullconnection.h>

    int main(int argc, char* argv[]) {
        float *A = (float *)0xA0000000;
        float *B = (float *)0xA0010000;
        float *C = (float *)0xC0000000;
        float *bias = NULL;
        int M = 4, N = 8, K = 16;
        int activation_type = ACTIVATION_RELU;
        int core_mask = 0xff;
        fp_fullconnection_s(A, B, C, bias, M, N, K, activation_type, core_mask);
        return 0;
    }


**私有存储版本:**

.. c:function:: void i8_fullconnection_p(int8_t* A, int8_t* B, int8_t* C, int8_t* bias, int M, int N, int K, int activation_type)
.. c:function:: void fp_fullconnection_p(float* A, float* B, float* C, float* bias, int M, int N, int K, int activation_type)
.. c:function:: void hp_fullconnection_p(half* A, half* B, half* C, half* bias, int M, int N, int K, int activation_type)

**C调用示例：**

.. code-block:: c
    :linenos:
    :emphasize-lines: 12

    //FT78NE示例
    #include <stdio.h>
    #include <fullconnection.h>

    int main(int argc, char* argv[]) {
        float *A = (float *)0x10810000;
        float *B = (float *)0x10820000;
        float *C = (float *)0x10830000;
        float *bias = NULL;
        int M = 4, N = 8, K = 16;
        int activation_type = ACTIVATION_RELU6;
        fp_fullconnection_p(A, B, C, bias, M, N, K, activation_type);
        return 0;
    }
