Skip to content

Commit b901178

Browse files
Merge pull request #1104 from InfiniTensor/issue/1031_T1-1-38
【比赛2025】T1-1-38
2 parents f7b2511 + 966009d commit b901178

103 files changed

Lines changed: 7660 additions & 40 deletions

File tree

Some content is hidden

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

include/infinicore/ops/flipud.hpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Flipud {
9+
public:
10+
// Schema signature: (Output, Input)
11+
using schema = void (*)(Tensor, Tensor);
12+
13+
static void execute(Tensor output, Tensor input);
14+
static common::OpDispatcher<schema> &dispatcher();
15+
};
16+
Tensor flipud(Tensor input);
17+
void flipud_(Tensor output, Tensor input);
18+
19+
} // namespace infinicore::op
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class FloatPower {
9+
public:
10+
// ==========================================================
11+
// Dispatcher Schemas
12+
// ==========================================================
13+
14+
// Output = Input ^ Scalar (scalar must be double!)
15+
using schema_scalar = void (*)(Tensor output,
16+
Tensor input,
17+
double exponent);
18+
19+
// Output = Input ^ Tensor
20+
using schema_tensor = void (*)(Tensor output,
21+
Tensor input,
22+
Tensor exponent);
23+
24+
// ==========================================================
25+
// Execute Entry Points (called by functional interface)
26+
// ==========================================================
27+
28+
static void execute(Tensor output,
29+
Tensor input,
30+
double exponent);
31+
32+
static void execute(Tensor output,
33+
Tensor input,
34+
Tensor exponent);
35+
36+
// ==========================================================
37+
// Dispatchers
38+
// ==========================================================
39+
40+
static common::OpDispatcher<schema_scalar> &dispatcher_scalar();
41+
static common::OpDispatcher<schema_tensor> &dispatcher_tensor();
42+
};
43+
44+
// =======================================================================
45+
// Functional Interface (Python-visible semantics)
46+
// =======================================================================
47+
48+
// -------------------------------
49+
// 1. Scalar Exponent
50+
// -------------------------------
51+
52+
// out-of-place: ALWAYS float64
53+
Tensor float_power(Tensor input, double exponent);
54+
55+
// in-place
56+
void float_power_(Tensor output, Tensor input, double exponent);
57+
58+
// -------------------------------
59+
// 2. Tensor Exponent
60+
// -------------------------------
61+
62+
// out-of-place: ALWAYS float64
63+
Tensor float_power(Tensor input, Tensor exponent);
64+
65+
// in-place
66+
void float_power_(Tensor output, Tensor input, Tensor exponent);
67+
68+
} // namespace infinicore::op
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
class FloorDivide {
8+
public:
9+
using schema = void (*)(Tensor, Tensor, Tensor);
10+
static void execute(Tensor c, Tensor a, Tensor b);
11+
static common::OpDispatcher<schema> &dispatcher();
12+
};
13+
14+
Tensor floor_divide(Tensor a, Tensor b);
15+
void floor_divide_(Tensor c, Tensor a, Tensor b);
16+
} // namespace infinicore::op
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class MultiMarginLoss {
9+
public:
10+
using schema = void (*)(Tensor, Tensor, Tensor, Tensor, int64_t, float, int64_t);
11+
12+
static void execute(Tensor output, Tensor input, Tensor target, Tensor weight, int64_t p, float margin, int64_t reduction);
13+
static common::OpDispatcher<schema> &dispatcher();
14+
};
15+
16+
Tensor multi_margin_loss(Tensor input, Tensor target, Tensor weight = {}, int64_t p = 1, float margin = 1.0f, int64_t reduction = 1);
17+
void multi_margin_loss_(Tensor output, Tensor input, Tensor target, Tensor weight, int64_t p, float margin, int64_t reduction);
18+
19+
} // namespace infinicore::op

include/infinicore/ops/scatter.hpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Scatter {
9+
public:
10+
using schema = void (*)(Tensor, Tensor, int64_t, Tensor, Tensor, int64_t);
11+
12+
static void execute(Tensor output, Tensor input, int64_t dim, Tensor index, Tensor src, int64_t reduction);
13+
static common::OpDispatcher<schema> &dispatcher();
14+
};
15+
16+
Tensor scatter(Tensor input, int64_t dim, Tensor index, Tensor src, int64_t reduction = 0);
17+
18+
// In-place / 指定 Output 接口
19+
void scatter_(Tensor output, Tensor input, int64_t dim, Tensor index, Tensor src, int64_t reduction);
20+
21+
} // namespace infinicore::op

include/infiniop.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030
#include "infiniop/ops/embedding.h"
3131
#include "infiniop/ops/equal.h"
3232
#include "infiniop/ops/flash_attention.h"
33+
#include "infiniop/ops/flipud.h"
34+
#include "infiniop/ops/float_power.h"
3335
#include "infiniop/ops/floor.h"
36+
#include "infiniop/ops/floor_divide.h"
3437
#include "infiniop/ops/fmin.h"
3538
#include "infiniop/ops/fmod.h"
3639
#include "infiniop/ops/gelu.h"
@@ -48,6 +51,7 @@
4851
#include "infiniop/ops/lp_norm.h"
4952
#include "infiniop/ops/masked_select.h"
5053
#include "infiniop/ops/mul.h"
54+
#include "infiniop/ops/multi_margin_loss.h"
5155
#include "infiniop/ops/ones.h"
5256
#include "infiniop/ops/paged_attention.h"
5357
#include "infiniop/ops/paged_attention_prefill.h"
@@ -60,6 +64,7 @@
6064
#include "infiniop/ops/relu.h"
6165
#include "infiniop/ops/rms_norm.h"
6266
#include "infiniop/ops/rope.h"
67+
#include "infiniop/ops/scatter.h"
6368
#include "infiniop/ops/sigmoid.h"
6469
#include "infiniop/ops/silu.h"
6570
#include "infiniop/ops/silu_and_mul.h"

include/infiniop/ops/flipud.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef __INFINIOP_FLIPUD_API_H__
2+
#define __INFINIOP_FLIPUD_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopFlipudDescriptor_t;
7+
8+
__INFINI_C __export infiniStatus_t infiniopCreateFlipudDescriptor(infiniopHandle_t handle,
9+
infiniopFlipudDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output,
11+
infiniopTensorDescriptor_t input);
12+
13+
// 获取工作空间大小
14+
__INFINI_C __export infiniStatus_t infiniopGetFlipudWorkspaceSize(infiniopFlipudDescriptor_t desc, size_t *size);
15+
16+
// 执行 Flipud 算子
17+
__INFINI_C __export infiniStatus_t infiniopFlipud(infiniopFlipudDescriptor_t desc,
18+
void *workspace,
19+
size_t workspace_size,
20+
void *output,
21+
const void *input,
22+
void *stream);
23+
24+
// 销毁描述符
25+
__INFINI_C __export infiniStatus_t infiniopDestroyFlipudDescriptor(infiniopFlipudDescriptor_t desc);
26+
27+
#endif // __INFINIOP_FLIPUD_API_H__

include/infiniop/ops/float_power.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef __INFINIOP_FLOAT_POWER_API_H__
2+
#define __INFINIOP_FLOAT_POWER_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopFloatPowerDescriptor_t;
7+
8+
__INFINI_C __export infiniStatus_t infiniopCreateFloatPowerDescriptor(infiniopHandle_t handle,
9+
infiniopFloatPowerDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t y,
11+
infiniopTensorDescriptor_t x,
12+
infiniopTensorDescriptor_t exponent,
13+
float scalar_exponent);
14+
15+
__INFINI_C __export infiniStatus_t infiniopGetFloatPowerWorkspaceSize(infiniopFloatPowerDescriptor_t desc, size_t *size);
16+
17+
__INFINI_C __export infiniStatus_t infiniopFloatPower(infiniopFloatPowerDescriptor_t desc,
18+
void *workspace,
19+
size_t workspace_size,
20+
void *y,
21+
const void *x,
22+
const void *exponent,
23+
void *stream);
24+
25+
__INFINI_C __export infiniStatus_t infiniopDestroyFloatPowerDescriptor(infiniopFloatPowerDescriptor_t desc);
26+
27+
#endif
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef __INFINIOP_FLOOR_DIVIDE_API_H__
2+
#define __INFINIOP_FLOOR_DIVIDE_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopFloorDivideDescriptor_t;
7+
8+
__INFINI_C __export infiniStatus_t infiniopCreateFloorDivideDescriptor(infiniopHandle_t handle,
9+
infiniopFloorDivideDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t c,
11+
infiniopTensorDescriptor_t a,
12+
infiniopTensorDescriptor_t b);
13+
14+
__INFINI_C __export infiniStatus_t infiniopGetFloorDivideWorkspaceSize(infiniopFloorDivideDescriptor_t desc, size_t *size);
15+
16+
__INFINI_C __export infiniStatus_t infiniopFloorDivide(infiniopFloorDivideDescriptor_t desc,
17+
void *workspace,
18+
size_t workspace_size,
19+
void *c,
20+
const void *a,
21+
const void *b,
22+
void *stream);
23+
24+
__INFINI_C __export infiniStatus_t infiniopDestroyFloorDivideDescriptor(infiniopFloorDivideDescriptor_t desc);
25+
26+
#endif
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#ifndef __INFINIOP_MULTI_MARGIN_LOSS_API_H__
2+
#define __INFINIOP_MULTI_MARGIN_LOSS_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopMultiMarginLossDescriptor_t;
7+
__INFINI_C __export infiniStatus_t infiniopCreateMultiMarginLossDescriptor(infiniopHandle_t handle,
8+
infiniopMultiMarginLossDescriptor_t *desc_ptr,
9+
infiniopTensorDescriptor_t output,
10+
infiniopTensorDescriptor_t input,
11+
infiniopTensorDescriptor_t target,
12+
infiniopTensorDescriptor_t weight,
13+
int p,
14+
float margin,
15+
int reduction);
16+
17+
__INFINI_C __export infiniStatus_t infiniopGetMultiMarginLossWorkspaceSize(infiniopMultiMarginLossDescriptor_t desc, size_t *size);
18+
19+
__INFINI_C __export infiniStatus_t infiniopMultiMarginLoss(infiniopMultiMarginLossDescriptor_t desc,
20+
void *workspace,
21+
size_t workspace_size,
22+
void *output,
23+
const void *input,
24+
const void *target,
25+
const void *weight,
26+
void *stream);
27+
28+
__INFINI_C __export infiniStatus_t infiniopDestroyMultiMarginLossDescriptor(infiniopMultiMarginLossDescriptor_t desc);
29+
30+
#endif // __INFINIOP_MULTI_MARGIN_LOSS_API_H__

0 commit comments

Comments
 (0)