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

170 lines
6.6 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.

Equal
=================
逐元素计算两个输入是否相等
.. math::
output_i = \begin{cases}
\text{True}, & \text{if } Input0_i = Input1_i \\
\text{False}, & \text{if } Input0_i \neq Input1_i
\end{cases}
输入:
- **Input0** - 第一个输入数据地址。
- **Input1** - 第二个输入数据地址。
- **params** - 其他参数打包成数组:
- **input0_dims** - input0 的维度。
- **input1_dims** - input1的维度。
- **output_dims** - output的维度。
- **strides0** - Input0 的步长大小为8*sizeof(int)
- **strides1** - Input1 的步长大小为8*sizeof(int)
- **strides_output** - Output 的步长大小为8*sizeof(int)
- **num_dims** - 维度数量。
- **core_mask** - 核掩码(仅共享存储版本需要)。
输出:
- **output** - 计算结果地址。
支持平台:
``FT78NE``
``MT7004``
.. note::
- FT78NE 支持int8, int16, int32, fp32, fp64, cplx64, cplx128
- MT7004 支持fp16, fp32, int16, int32, cplx64
**共享存储版本:**
.. c:function:: void i8_equal_s(int8_t* Input0, int8_t* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void i16_equal_s(int16_t* Input0, int16_t* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void i32_equal_s(int* Input0, int* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void hp_equal_s(half* Input0, half* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void fp_equal_s(float* Input0, float* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void dp_equal_s(double* Input0, double* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void c64_equal_s(float* Input0, float* Input1, bool* output, long long *params, int core_mask)
.. c:function:: void c128_equal_s(double* Input0, double* Input1, bool* output, long long *params, int core_mask)
**C调用示例**
.. code-block:: c
:linenos:
:emphasize-lines: 47
//FT78NE示例
#include <stdio.h>
#include <equal.h>
int main(int argc, char* argv[]) {
float *input0 = (float *)0x81000000;
float *input1 = (float *)0x82000000;
bool *output = (bool *)0x83000000;
int *strides0 = (int*)0x84000000;
int *strides1 = (int*)0x85000000;
int *strides_output = (int*)0x86000000;
int i = 0;
srand(seed++);
float f_min = -100.0;
float f_max = 100.0;
// same shape
int input0_dims[] = {4, 8, 17}; // 2x2
int input1_dims[] = {4, 8, 17}; // 2x2
int output_dims[] = {4, 8, 17}; // 2x2
int num_dims = 3;
unsigned long long params[9];
params[0] = (unsigned long long)input0_dims;
params[1] = (unsigned long long)input1_dims;
params[2] = (unsigned long long)output_dims;
params[3] = (unsigned long long)strides0;
params[4] = (unsigned long long)strides1;
params[5] = (unsigned long long)strides_output;
params[6] = (unsigned long long)num_dims;
int total_input0 = get_total_elements(num_dims, input0_dims);
int total_input1 = get_total_elements(num_dims, input1_dims);
int total_output = get_total_elements(num_dims, output_dims);
for(i = 0;i < total_input0;++i) {
input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
}
for(i = 0;i < total_input1;++i) {
input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
}
int core_mask = 0b1111;
fp_equal_s(input0, input1, output, params, core_mask);//调用汇编
return 0;
}
**私有存储版本:**
.. c:function:: void i8_equal_p(int8_t *Input0, int8_t *Input1, bool *output, long long *params)
.. c:function:: void i16_equal_p(int16_t *Input0, int16_t *Input1, bool *output, long long *params)
.. c:function:: void i32_equal_p(int32_t *Input0, int32_t *Input1, bool *output, long long *params)
.. c:function:: void hp_equal_p(half* Input0, half* Input1, bool* output, long long *params)
.. c:function:: void fp_equal_p(float* Input0, float* Input1, bool* output, long long *params)
.. c:function:: void dp_equal_p(double* Input0, double* Input1, bool* output, long long *params)
.. c:function:: void c64_equal_p(float *Input0, float *Input1, bool *output, long long *params)
.. c:function:: void c128_equal_p(double *Input0, double *Input1, bool *output, long long *params)
**C调用示例**
.. code-block:: c
:linenos:
:emphasize-lines: 47
//FT78NE示例
#include <stdio.h>
#include <equal.h>
int main(int argc, char* argv[]) {
float *input0 = (float *)0x10010000;
float *input1 = (float *)0x10020000;
bool *output = (bool *)0x10030000;
int *strides0 = (int*)0x10050000;
int *strides1 = (int*)0x10060000;
int *strides_output = (int*)0x10070000;
int i = 0;
srand(seed++);
float f_min = -100.0;
float f_max = 100.0;
// same shape
int input0_dims[] = {4, 8, 17}; // 2x2
int input1_dims[] = {4, 8, 17}; // 2x2
int output_dims[] = {4, 8, 17}; // 2x2
int num_dims = 3;
unsigned long long params[9];
params[0] = (unsigned long long)input0_dims;
params[1] = (unsigned long long)input1_dims;
params[2] = (unsigned long long)output_dims;
params[3] = (unsigned long long)strides0;
params[4] = (unsigned long long)strides1;
params[5] = (unsigned long long)strides_output;
params[6] = (unsigned long long)num_dims;
int total_input0 = get_total_elements(num_dims, input0_dims);
int total_input1 = get_total_elements(num_dims, input1_dims);
int total_output = get_total_elements(num_dims, output_dims);
for(i = 0;i < total_input0;++i) {
input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
}
for(i = 0;i < total_input1;++i) {
input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
}
fp_equal_p(input0, input1, output, params);//调用汇编
return 0;
}