Skip to content

Commit 4c3d110

Browse files
committed
算子赛道第五题
1 parent 1635fd9 commit 4c3d110

File tree

81 files changed

+10441
-20
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+10441
-20
lines changed

include/infiniop.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
#include "infiniop/handle.h"
55
#include "infiniop/ops/add.h"
66
#include "infiniop/ops/attention.h"
7+
#include "infiniop/ops/averagepool.h"
8+
#include "infiniop/ops/averagepool_backward.h"
79
#include "infiniop/ops/causal_softmax.h"
810
#include "infiniop/ops/clip.h"
911
#include "infiniop/ops/conv.h"
12+
#include "infiniop/ops/conv_backward.h"
13+
#include "infiniop/ops/cross_entropy_loss.h"
1014
#include "infiniop/ops/dequantize.h"
1115
#include "infiniop/ops/gemm.h"
16+
#include "infiniop/ops/interpolate_nearest.h"
17+
#include "infiniop/ops/maxpool.h"
18+
#include "infiniop/ops/maxpool_backward.h"
1219
#include "infiniop/ops/mul.h"
1320
#include "infiniop/ops/random_sample.h"
1421
#include "infiniop/ops/rearrange.h"

include/infiniop/ops/averagepool.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef __INFINIOP_AVERAGEPOOL_H__
2+
#define __INFINIOP_AVERAGEPOOL_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
__C typedef struct InfiniopDescriptor *infiniopAvgPoolDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateAvgPoolDescriptor(infiniopHandle_t handle,
9+
infiniopAvgPoolDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output_desc,
11+
infiniopTensorDescriptor_t input_desc,
12+
void *kernel_size,
13+
void *strides,
14+
void *pads,
15+
bool ceil_mode);
16+
17+
__C infiniStatus_t infiniopGetAvgPoolWorkspaceSize(infiniopAvgPoolDescriptor_t desc,
18+
size_t *size);
19+
20+
__C infiniStatus_t infiniopAvgPool(infiniopAvgPoolDescriptor_t desc,
21+
void *workspace,
22+
size_t workspace_size,
23+
void *output,
24+
const void *input,
25+
void *stream);
26+
27+
__C infiniStatus_t infiniopDestroyAvgPoolDescriptor(infiniopAvgPoolDescriptor_t desc);
28+
29+
#endif // __INFINIOP_AVERAGEPOOL_H__
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#ifndef __INFINIOP_AVERAGEPOOL_BACKWARD_H__
2+
#define __INFINIOP_AVERAGEPOOL_BACKWARD_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
__C typedef struct InfiniopDescriptor *infiniopAvgPoolBackwardDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateAvgPoolBackwardDescriptor(infiniopHandle_t handle,
9+
infiniopAvgPoolBackwardDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t grad_input_desc,
11+
infiniopTensorDescriptor_t grad_output_desc,
12+
infiniopTensorDescriptor_t input_desc,
13+
void *kernel_size,
14+
void *strides,
15+
void *pads,
16+
bool ceil_mode);
17+
18+
__C infiniStatus_t infiniopGetAvgPoolBackwardWorkspaceSize(infiniopAvgPoolBackwardDescriptor_t desc,
19+
size_t *size);
20+
21+
__C infiniStatus_t infiniopAvgPoolBackward(infiniopAvgPoolBackwardDescriptor_t desc,
22+
void *workspace,
23+
size_t workspace_size,
24+
void *grad_input,
25+
const void *grad_output,
26+
const void *input,
27+
void *stream);
28+
29+
__C infiniStatus_t infiniopDestroyAvgPoolBackwardDescriptor(infiniopAvgPoolBackwardDescriptor_t desc);
30+
31+
#endif // __INFINIOP_AVERAGEPOOL_BACKWARD_H__
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef __INFINIOP_CONV_BACKWARD_API_H__
2+
#define __INFINIOP_CONV_BACKWARD_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopConvBackwardDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateConvBackwardDescriptor(infiniopHandle_t handle,
9+
infiniopConvBackwardDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t grad_output_desc,
11+
infiniopTensorDescriptor_t input_desc,
12+
infiniopTensorDescriptor_t weight_desc,
13+
infiniopTensorDescriptor_t bias_desc,
14+
void *pads,
15+
void *strides,
16+
void *dilations,
17+
size_t n);
18+
19+
__C infiniStatus_t infiniopGetConvBackwardWorkspaceSize(infiniopConvBackwardDescriptor_t desc, size_t *size);
20+
21+
__C infiniStatus_t infiniopConvBackward(infiniopConvBackwardDescriptor_t desc,
22+
void *workspace,
23+
size_t workspace_size,
24+
void *grad_input,
25+
void *grad_weight,
26+
void *grad_bias,
27+
const void *grad_output,
28+
const void *input,
29+
const void *weight,
30+
void *stream);
31+
32+
__C infiniStatus_t infiniopDestroyConvBackwardDescriptor(infiniopConvBackwardDescriptor_t desc);
33+
34+
#endif
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef __INFINIOP_CROSS_ENTROPY_LOSS_API_H__
2+
#define __INFINIOP_CROSS_ENTROPY_LOSS_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopCrossEntropyLossDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateCrossEntropyLossDescriptor(infiniopHandle_t handle,
9+
infiniopCrossEntropyLossDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t loss_desc,
11+
infiniopTensorDescriptor_t logits_desc,
12+
infiniopTensorDescriptor_t target_desc);
13+
14+
__C infiniStatus_t infiniopGetCrossEntropyLossWorkspaceSize(infiniopCrossEntropyLossDescriptor_t desc,
15+
size_t *size);
16+
17+
__C infiniStatus_t infiniopCrossEntropyLoss(infiniopCrossEntropyLossDescriptor_t desc,
18+
void *workspace,
19+
size_t workspace_size,
20+
void *loss,
21+
const void *logits,
22+
const void *target,
23+
void *stream);
24+
25+
__C infiniStatus_t infiniopDestroyCrossEntropyLossDescriptor(infiniopCrossEntropyLossDescriptor_t desc);
26+
27+
#endif // __INFINIOP_CROSS_ENTROPY_LOSS_API_H__
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef __INFINIOP_INTERPOLATE_NEAREST_H__
2+
#define __INFINIOP_INTERPOLATE_NEAREST_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
__C typedef struct InfiniopDescriptor *infiniopInterpolateNearestDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateInterpolateNearestDescriptor(infiniopHandle_t handle,
9+
infiniopInterpolateNearestDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output_desc,
11+
infiniopTensorDescriptor_t input_desc);
12+
13+
__C infiniStatus_t infiniopGetInterpolateNearestWorkspaceSize(infiniopInterpolateNearestDescriptor_t desc,
14+
size_t *size);
15+
16+
__C infiniStatus_t infiniopInterpolateNearest(infiniopInterpolateNearestDescriptor_t desc,
17+
void *workspace,
18+
size_t workspace_size,
19+
void *output,
20+
const void *input,
21+
void *stream);
22+
23+
__C infiniStatus_t infiniopDestroyInterpolateNearestDescriptor(infiniopInterpolateNearestDescriptor_t desc);
24+
25+
#endif // __INFINIOP_INTERPOLATE_NEAREST_H__

include/infiniop/ops/maxpool.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef __INFINIOP_MAX_POOL_H__
2+
#define __INFINIOP_MAX_POOL_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
__C typedef struct InfiniopDescriptor *infiniopMaxPoolDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateMaxPoolDescriptor(infiniopHandle_t handle,
9+
infiniopMaxPoolDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output_desc,
11+
infiniopTensorDescriptor_t input_desc,
12+
void *kernel_size,
13+
void *strides,
14+
void *pads,
15+
bool ceil_mode);
16+
17+
__C infiniStatus_t infiniopGetMaxPoolWorkspaceSize(infiniopMaxPoolDescriptor_t desc,
18+
size_t *size);
19+
20+
__C infiniStatus_t infiniopMaxPool(infiniopMaxPoolDescriptor_t desc,
21+
void *workspace,
22+
size_t workspace_size,
23+
void *output,
24+
const void *input,
25+
void *stream);
26+
27+
__C infiniStatus_t infiniopDestroyMaxPoolDescriptor(infiniopMaxPoolDescriptor_t desc);
28+
29+
#endif // __INFINIOP_MAX_POOL_H__
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#ifndef __INFINIOP_MAXPOOL_BACKWARD_H__
2+
#define __INFINIOP_MAXPOOL_BACKWARD_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
__C typedef struct InfiniopDescriptor *infiniopMaxPoolBackwardDescriptor_t;
7+
8+
__C infiniStatus_t infiniopCreateMaxPoolBackwardDescriptor(infiniopHandle_t handle,
9+
infiniopMaxPoolBackwardDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t grad_input_desc,
11+
infiniopTensorDescriptor_t grad_output_desc,
12+
infiniopTensorDescriptor_t input_desc,
13+
void *kernel_size,
14+
void *strides,
15+
void *pads,
16+
bool ceil_mode);
17+
18+
__C infiniStatus_t infiniopGetMaxPoolBackwardWorkspaceSize(infiniopMaxPoolBackwardDescriptor_t desc,
19+
size_t *size);
20+
21+
__C infiniStatus_t infiniopMaxPoolBackward(infiniopMaxPoolBackwardDescriptor_t desc,
22+
void *workspace,
23+
size_t workspace_size,
24+
void *grad_input,
25+
const void *grad_output,
26+
const void *input,
27+
void *stream);
28+
29+
__C infiniStatus_t infiniopDestroyMaxPoolBackwardDescriptor(infiniopMaxPoolBackwardDescriptor_t desc);
30+
31+
#endif // __INFINIOP_MAXPOOL_BACKWARD_H__

scripts/python_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ def run_tests(args):
2525
"sub.py",
2626
"swiglu.py",
2727
"softplus.py",
28+
"averagepool_backward.py",
29+
"averagepool.py",
30+
"maxpool_backward.py",
31+
"maxpool.py",
32+
"interpolate_nearest.py",
33+
"conv_backward.py",
34+
"cross_entropy_loss.py",
2835
]:
2936
result = subprocess.run(
3037
f"python {test} {args} --debug", text=True, encoding="utf-8", shell=True

src/infiniop-test/include/ops.hpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ DECLARE_INFINIOP_TEST(add)
1616
DECLARE_INFINIOP_TEST(causal_softmax)
1717
DECLARE_INFINIOP_TEST(rearrange)
1818
DECLARE_INFINIOP_TEST(sub)
19+
DECLARE_INFINIOP_TEST(cross_entropy_loss)
20+
DECLARE_INFINIOP_TEST(averagepool)
21+
DECLARE_INFINIOP_TEST(averagepool_backward)
22+
DECLARE_INFINIOP_TEST(interpolate_nearest)
23+
DECLARE_INFINIOP_TEST(conv_backward)
24+
DECLARE_INFINIOP_TEST(maxpool)
25+
DECLARE_INFINIOP_TEST(maxpool_backward)
1926

2027
#define REGISTER_INFINIOP_TEST(name) \
2128
{ \
@@ -30,19 +37,26 @@ DECLARE_INFINIOP_TEST(sub)
3037
/*
3138
* Register all the tests here
3239
*/
33-
#define TEST_BUILDER_MAPPINGS \
34-
{ \
35-
REGISTER_INFINIOP_TEST(gemm) \
36-
REGISTER_INFINIOP_TEST(random_sample) \
37-
REGISTER_INFINIOP_TEST(add) \
38-
REGISTER_INFINIOP_TEST(mul) \
39-
REGISTER_INFINIOP_TEST(clip) \
40-
REGISTER_INFINIOP_TEST(swiglu) \
41-
REGISTER_INFINIOP_TEST(rope) \
42-
REGISTER_INFINIOP_TEST(rms_norm) \
43-
REGISTER_INFINIOP_TEST(causal_softmax) \
44-
REGISTER_INFINIOP_TEST(rearrange) \
45-
REGISTER_INFINIOP_TEST(sub) \
40+
#define TEST_BUILDER_MAPPINGS \
41+
{ \
42+
REGISTER_INFINIOP_TEST(gemm) \
43+
REGISTER_INFINIOP_TEST(random_sample) \
44+
REGISTER_INFINIOP_TEST(add) \
45+
REGISTER_INFINIOP_TEST(mul) \
46+
REGISTER_INFINIOP_TEST(clip) \
47+
REGISTER_INFINIOP_TEST(swiglu) \
48+
REGISTER_INFINIOP_TEST(rope) \
49+
REGISTER_INFINIOP_TEST(rms_norm) \
50+
REGISTER_INFINIOP_TEST(causal_softmax) \
51+
REGISTER_INFINIOP_TEST(rearrange) \
52+
REGISTER_INFINIOP_TEST(sub) \
53+
REGISTER_INFINIOP_TEST(cross_entropy_loss) \
54+
REGISTER_INFINIOP_TEST(averagepool) \
55+
REGISTER_INFINIOP_TEST(averagepool_backward) \
56+
REGISTER_INFINIOP_TEST(interpolate_nearest) \
57+
REGISTER_INFINIOP_TEST(conv_backward) \
58+
REGISTER_INFINIOP_TEST(maxpool) \
59+
REGISTER_INFINIOP_TEST(maxpool_backward) \
4660
}
4761

4862
namespace infiniop_test {

0 commit comments

Comments
 (0)