Skip to content
Open
  •  
  •  
  •  
12 changes: 12 additions & 0 deletions include/infiniop.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,29 @@
#define __INFINIOP_API_H__

#include "infiniop/handle.h"
// Unified headers for elementwise operators
#include "infiniop/ops/unary_ops_api.h"
#include "infiniop/ops/binary_ops_api.h"
// Other operators
#include "infiniop/ops/add.h"
#include "infiniop/ops/add_rms_norm.h"
#include "infiniop/ops/attention.h"
#include "infiniop/ops/averagepool.h"
#include "infiniop/ops/batch_norm.h"
#include "infiniop/ops/causal_softmax.h"
#include "infiniop/ops/clip.h"
#include "infiniop/ops/conv.h"
#include "infiniop/ops/cross_entropy_loss.h"
#include "infiniop/ops/dequantize_awq.h"
#include "infiniop/ops/gather.h"
#include "infiniop/ops/gelu.h"
#include "infiniop/ops/gemm.h"
#include "infiniop/ops/index_copy_inplace.h"
#include "infiniop/ops/interpolate_nearest.h"
#include "infiniop/ops/layer_norm.h"
#include "infiniop/ops/logsoftmax.h"
#include "infiniop/ops/lp_norm.h"
#include "infiniop/ops/maxpool.h"
#include "infiniop/ops/mul.h"
#include "infiniop/ops/ones.h"
#include "infiniop/ops/paged_attention.h"
Expand All @@ -24,6 +35,7 @@
#include "infiniop/ops/relu.h"
#include "infiniop/ops/rms_norm.h"
#include "infiniop/ops/rope.h"
#include "infiniop/ops/scatter.h"
#include "infiniop/ops/sigmoid.h"
#include "infiniop/ops/silu.h"
#include "infiniop/ops/softmax.h"
Expand Down
29 changes: 29 additions & 0 deletions include/infiniop/ops/averagepool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef __INFINIOP_AVERAGEPOOL_H__
#define __INFINIOP_AVERAGEPOOL_H__

#include "../operator_descriptor.h"

__C typedef struct InfiniopDescriptor *infiniopAvgPoolDescriptor_t;

__C __export infiniStatus_t infiniopCreateAvgPoolDescriptor(infiniopHandle_t handle,
infiniopAvgPoolDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
void *kernel_size,
void *strides,
void *pads,
bool ceil_mode);

__C __export infiniStatus_t infiniopGetAvgPoolWorkspaceSize(infiniopAvgPoolDescriptor_t desc,
size_t *size);

__C __export infiniStatus_t infiniopAvgPool(infiniopAvgPoolDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *output,
const void *input,
void *stream);

__C __export infiniStatus_t infiniopDestroyAvgPoolDescriptor(infiniopAvgPoolDescriptor_t desc);

#endif // __INFINIOP_AVERAGEPOOL_H__
37 changes: 37 additions & 0 deletions include/infiniop/ops/batch_norm.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#ifndef __INFINIOP_BATCH_NORM_API_H__
#define __INFINIOP_BATCH_NORM_API_H__

#include "../operator_descriptor.h"

typedef struct InfiniopDescriptor *infiniopBatchNormDescriptor_t;

__C __export infiniStatus_t infiniopCreateBatchNormDescriptor(
infiniopHandle_t handle,
infiniopBatchNormDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t running_mean_desc,
infiniopTensorDescriptor_t running_var_desc,
infiniopTensorDescriptor_t input_desc,
infiniopTensorDescriptor_t weight_desc,
infiniopTensorDescriptor_t bias_desc,
float momentum,
float eps
);

__C __export infiniStatus_t infiniopGetBatchNormWorkspaceSize(infiniopBatchNormDescriptor_t desc, size_t *size);

__C __export infiniStatus_t infiniopBatchNorm(infiniopBatchNormDescriptor_t desc,
void *workspace,
size_t workspace_size,
void * output,
void * running_mean,
void * running_var,
const void * input,
const void * weight,
const void * bias,
void *stream
);

__C __export infiniStatus_t infiniopDestroyBatchNormDescriptor(infiniopBatchNormDescriptor_t desc);

#endif
50 changes: 50 additions & 0 deletions include/infiniop/ops/binary_op_api.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#ifndef __INFINIOP_BINARY_OP_API_H__
#define __INFINIOP_BINARY_OP_API_H__

#include "../operator_descriptor.h"

/**
* @brief Macro to generate the C API header for a binary operator.
*
* This macro generates all the necessary declarations for a binary operator:
* - Descriptor type definition
* - Create descriptor function
* - Get workspace size function
* - Execute operator function
* - Destroy descriptor function
*
* Usage:
* BINARY_OP_API_DECLARE(div, Div)
* BINARY_OP_API_DECLARE(pow, Pow)
*
* @param OP_NAME Lowercase operator name (e.g., div, pow, mod)
* @param OP_NAME_UPPER Uppercase operator name (e.g., Div, Pow, Mod)
*/
#define BINARY_OP_API_DECLARE(OP_NAME, OP_NAME_UPPER) \
\
typedef struct InfiniopDescriptor *infiniop##OP_NAME_UPPER##Descriptor_t; \
\
__C __export infiniStatus_t infiniopCreate##OP_NAME_UPPER##Descriptor( \
infiniopHandle_t handle, \
infiniop##OP_NAME_UPPER##Descriptor_t *desc_ptr, \
infiniopTensorDescriptor_t c, \
infiniopTensorDescriptor_t a, \
infiniopTensorDescriptor_t b); \
\
__C __export infiniStatus_t infiniopGet##OP_NAME_UPPER##WorkspaceSize( \
infiniop##OP_NAME_UPPER##Descriptor_t desc, \
size_t *size); \
\
__C __export infiniStatus_t infiniop##OP_NAME_UPPER( \
infiniop##OP_NAME_UPPER##Descriptor_t desc, \
void *workspace, \
size_t workspace_size, \
void *c, \
const void *a, \
const void *b, \
void *stream); \
\
__C __export infiniStatus_t infiniopDestroy##OP_NAME_UPPER##Descriptor( \
infiniop##OP_NAME_UPPER##Descriptor_t desc);

#endif // __INFINIOP_BINARY_OP_API_H__
44 changes: 44 additions & 0 deletions include/infiniop/ops/binary_ops_api.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#ifndef __INFINIOP_BINARY_OPS_API_H__
#define __INFINIOP_BINARY_OPS_API_H__

#include "binary_op_api.h"

/**
* @brief Unified API declarations for all binary operators.
*
* This header contains API declarations for all binary operators in a single file,
* eliminating the need for individual header files for each operator.
*
* All binary operator APIs are declared here:
* - div, pow, mod, max, min
*/

// Declare all binary operator APIs
BINARY_OP_API_DECLARE(div, Div)
BINARY_OP_API_DECLARE(floor_divide, FloorDivide)
BINARY_OP_API_DECLARE(pow, Pow)
BINARY_OP_API_DECLARE(copysign, CopySign)
BINARY_OP_API_DECLARE(hypot, Hypot)
BINARY_OP_API_DECLARE(atan2, Atan2)
BINARY_OP_API_DECLARE(mod, Mod)
BINARY_OP_API_DECLARE(remainder, Remainder)
BINARY_OP_API_DECLARE(max, Max)
BINARY_OP_API_DECLARE(min, Min)
BINARY_OP_API_DECLARE(fmax, Fmax)
BINARY_OP_API_DECLARE(fmin, Fmin)
BINARY_OP_API_DECLARE(gt, Gt)
BINARY_OP_API_DECLARE(lt, Lt)
BINARY_OP_API_DECLARE(ge, Ge)
BINARY_OP_API_DECLARE(le, Le)
BINARY_OP_API_DECLARE(eq, Eq)
BINARY_OP_API_DECLARE(ne, Ne)
BINARY_OP_API_DECLARE(logical_and, LogicalAnd)
BINARY_OP_API_DECLARE(logical_or, LogicalOr)
BINARY_OP_API_DECLARE(logical_xor, LogicalXor)
BINARY_OP_API_DECLARE(bitwise_and, BitwiseAnd)
BINARY_OP_API_DECLARE(bitwise_or, BitwiseOr)
BINARY_OP_API_DECLARE(bitwise_xor, BitwiseXor)
BINARY_OP_API_DECLARE(bitwise_left_shift, BitwiseLeftShift)
BINARY_OP_API_DECLARE(bitwise_right_shift, BitwiseRightShift)

#endif // __INFINIOP_BINARY_OPS_API_H__
27 changes: 27 additions & 0 deletions include/infiniop/ops/cross_entropy_loss.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef __INFINIOP_CROSS_ENTROPY_LOSS_API_H__
#define __INFINIOP_CROSS_ENTROPY_LOSS_API_H__

#include "../operator_descriptor.h"

typedef struct InfiniopDescriptor *infiniopCrossEntropyLossDescriptor_t;

__C __export infiniStatus_t infiniopCreateCrossEntropyLossDescriptor(infiniopHandle_t handle,
infiniopCrossEntropyLossDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t loss_desc,
infiniopTensorDescriptor_t logits_desc,
infiniopTensorDescriptor_t target_desc);

__C __export infiniStatus_t infiniopGetCrossEntropyLossWorkspaceSize(infiniopCrossEntropyLossDescriptor_t desc,
size_t *size);

__C __export infiniStatus_t infiniopCrossEntropyLoss(infiniopCrossEntropyLossDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *loss,
const void *logits,
const void *target,
void *stream);

__C __export infiniStatus_t infiniopDestroyCrossEntropyLossDescriptor(infiniopCrossEntropyLossDescriptor_t desc);

#endif // __INFINIOP_CROSS_ENTROPY_LOSS_API_H__
31 changes: 31 additions & 0 deletions include/infiniop/ops/gather.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef __INFINIOP_GATHER_API_H__
#define __INFINIOP_GATHER_API_H__

#include "../operator_descriptor.h"

typedef struct InfiniopDescriptor *infiniopGatherDescriptor_t;

__C __export infiniStatus_t infiniopCreateGatherDescriptor(
infiniopHandle_t handle,
infiniopGatherDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
infiniopTensorDescriptor_t index_desc,
size_t dim
);

__C __export infiniStatus_t infiniopGetGatherWorkspaceSize(infiniopGatherDescriptor_t desc, size_t *size);

__C __export infiniStatus_t infiniopGather(
infiniopGatherDescriptor_t desc,
void *workspace,
size_t workspace_size,
void * output,
const void * input,
const void * index,
void *stream
);

__C __export infiniStatus_t infiniopDestroyGatherDescriptor(infiniopGatherDescriptor_t desc);

#endif
30 changes: 30 additions & 0 deletions include/infiniop/ops/index_copy_inplace.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef __INFINIOP_INDEX_COPY_INPLACE_API_H__
#define __INFINIOP_INDEX_COPY_INPLACE_API_H__

#include "../operator_descriptor.h"

typedef struct InfiniopDescriptor *infiniopIndexCopyInplaceDescriptor_t;

__C __export infiniStatus_t infiniopCreateIndexCopyInplaceDescriptor(
infiniopHandle_t handle,
infiniopIndexCopyInplaceDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
infiniopTensorDescriptor_t index_desc,
size_t dim
);

__C __export infiniStatus_t infiniopGetIndexCopyInplaceWorkspaceSize(infiniopIndexCopyInplaceDescriptor_t desc, size_t *size);

__C __export infiniStatus_t infiniopIndexCopyInplace(infiniopIndexCopyInplaceDescriptor_t desc,
void *workspace,
size_t workspace_size,
void * output,
const void * input,
const void * index,
void *stream
);

__C __export infiniStatus_t infiniopDestroyIndexCopyInplaceDescriptor(infiniopIndexCopyInplaceDescriptor_t desc);

#endif
25 changes: 25 additions & 0 deletions include/infiniop/ops/interpolate_nearest.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#ifndef __INFINIOP_INTERPOLATE_NEAREST_H__
#define __INFINIOP_INTERPOLATE_NEAREST_H__

#include "../operator_descriptor.h"

__C typedef struct InfiniopDescriptor *infiniopInterpolateNearestDescriptor_t;

__C __export infiniStatus_t infiniopCreateInterpolateNearestDescriptor(infiniopHandle_t handle,
infiniopInterpolateNearestDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc);

__C __export infiniStatus_t infiniopGetInterpolateNearestWorkspaceSize(infiniopInterpolateNearestDescriptor_t desc,
size_t *size);

__C __export infiniStatus_t infiniopInterpolateNearest(infiniopInterpolateNearestDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *output,
const void *input,
void *stream);

__C __export infiniStatus_t infiniopDestroyInterpolateNearestDescriptor(infiniopInterpolateNearestDescriptor_t desc);

#endif // __INFINIOP_INTERPOLATE_NEAREST_H__
29 changes: 29 additions & 0 deletions include/infiniop/ops/maxpool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef __INFINIOP_MAX_POOL_H__
#define __INFINIOP_MAX_POOL_H__

#include "../operator_descriptor.h"

__C typedef struct InfiniopDescriptor *infiniopMaxPoolDescriptor_t;

__C __export infiniStatus_t infiniopCreateMaxPoolDescriptor(infiniopHandle_t handle,
infiniopMaxPoolDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
void *kernel_size,
void *strides,
void *pads,
bool ceil_mode);

__C __export infiniStatus_t infiniopGetMaxPoolWorkspaceSize(infiniopMaxPoolDescriptor_t desc,
size_t *size);

__C __export infiniStatus_t infiniopMaxPool(infiniopMaxPoolDescriptor_t desc,
void *workspace,
size_t workspace_size,
void *output,
const void *input,
void *stream);

__C __export infiniStatus_t infiniopDestroyMaxPoolDescriptor(infiniopMaxPoolDescriptor_t desc);

#endif // __INFINIOP_MAX_POOL_H__
30 changes: 30 additions & 0 deletions include/infiniop/ops/scatter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef __INFINIOP_SCATTER_API_H__
#define __INFINIOP_SCATTER_API_H__

#include "../operator_descriptor.h"

typedef struct InfiniopDescriptor *infiniopScatterDescriptor_t;

__C __export infiniStatus_t infiniopCreateScatterDescriptor(
infiniopHandle_t handle,
infiniopScatterDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t output_desc,
infiniopTensorDescriptor_t input_desc,
infiniopTensorDescriptor_t index_desc,
size_t dim
);

__C __export infiniStatus_t infiniopGetScatterWorkspaceSize(infiniopScatterDescriptor_t desc, size_t *size);

__C __export infiniStatus_t infiniopScatter(infiniopScatterDescriptor_t desc,
void *workspace,
size_t workspace_size,
void * output,
const void * input,
const void * index,
void *stream
);

__C __export infiniStatus_t infiniopDestroyScatterDescriptor(infiniopScatterDescriptor_t desc);

#endif
Loading