Skip to content

Commit f11492a

Browse files
committed
accomplish flipud scatter multi_margin_loss float_power floor_divide oerator
1 parent 726eacf commit f11492a

File tree

103 files changed

+7615
-18
lines changed

Some content is hidden

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

103 files changed

+7615
-18
lines changed

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
@@ -27,6 +27,11 @@
2727
#include "infiniop/ops/sub.h"
2828
#include "infiniop/ops/swiglu.h"
2929
#include "infiniop/ops/tanh.h"
30+
#include "infiniop/ops/floor_divide.h"
31+
#include "infiniop/ops/float_power.h"
32+
#include "infiniop/ops/flipud.h"
33+
#include "infiniop/ops/scatter.h"
34+
#include "infiniop/ops/multi_margin_loss.h"
3035
#include "infiniop/ops/topkrouter.h"
3136
#include "infiniop/ops/topksoftmax.h"
3237
#include "infiniop/ops/zeros.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+
__C __export infiniStatus_t infiniopCreateFlipudDescriptor(infiniopHandle_t handle,
9+
infiniopFlipudDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output,
11+
infiniopTensorDescriptor_t input);
12+
13+
// 获取工作空间大小
14+
__C __export infiniStatus_t infiniopGetFlipudWorkspaceSize(infiniopFlipudDescriptor_t desc, size_t *size);
15+
16+
// 执行 Flipud 算子
17+
__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+
__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+
__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+
__C __export infiniStatus_t infiniopGetFloatPowerWorkspaceSize(infiniopFloatPowerDescriptor_t desc, size_t *size);
16+
17+
__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+
__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+
__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+
__C __export infiniStatus_t infiniopGetFloorDivideWorkspaceSize(infiniopFloorDivideDescriptor_t desc, size_t *size);
15+
16+
__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+
__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+
__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+
__C __export infiniStatus_t infiniopGetMultiMarginLossWorkspaceSize(infiniopMultiMarginLossDescriptor_t desc, size_t *size);
18+
19+
__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+
__C __export infiniStatus_t infiniopDestroyMultiMarginLossDescriptor(infiniopMultiMarginLossDescriptor_t desc);
29+
30+
#endif // __INFINIOP_MULTI_MARGIN_LOSS_API_H__

0 commit comments

Comments
 (0)