Skip to content

Commit f89f2c6

Browse files
committed
kthvalue triplet_margin_loss upsample_bilinear ldexp lerp operator
1 parent 726eacf commit f89f2c6

File tree

105 files changed

+8708
-21
lines changed

Some content is hidden

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

105 files changed

+8708
-21
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
#include <tuple>
6+
7+
namespace infinicore::op {
8+
9+
class Kthvalue {
10+
public:
11+
// Schema signature: values(out), indices(out), input, k, dim, keepdim
12+
using schema = void (*)(Tensor, Tensor, Tensor, int64_t, int64_t, bool);
13+
14+
static void execute(Tensor values, Tensor indices, Tensor input, int64_t k, int64_t dim, bool keepdim);
15+
static common::OpDispatcher<schema> &dispatcher();
16+
};
17+
18+
// Functional API: Returns a tuple containing (values, indices)
19+
std::tuple<Tensor, Tensor> kthvalue(Tensor input, int64_t k, int64_t dim = -1, bool keepdim = false);
20+
21+
// In-place/Output-provided API
22+
void kthvalue_(Tensor values, Tensor indices, Tensor input, int64_t k, int64_t dim, bool keepdim);
23+
24+
} // namespace infinicore::op

include/infinicore/ops/ldexp.hpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Ldexp {
9+
public:
10+
// Schema signature: output(out), input(x), other(exp)
11+
using schema = void (*)(Tensor, Tensor, Tensor);
12+
13+
static void execute(Tensor output, Tensor input, Tensor other);
14+
static common::OpDispatcher<schema> &dispatcher();
15+
};
16+
17+
// Functional API: Returns a new Tensor containing input * (2^other)
18+
Tensor ldexp(Tensor input, Tensor other);
19+
20+
// In-place/Output-provided API
21+
// Writes the result into 'output'
22+
void ldexp_(Tensor output, Tensor input, Tensor other);
23+
24+
} // namespace infinicore::op

include/infinicore/ops/lerp.hpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Lerp {
9+
public:
10+
using schema_t = void (*)(Tensor, Tensor, Tensor, Tensor);
11+
using schema_s = void (*)(Tensor, Tensor, Tensor, float);
12+
13+
static void execute(Tensor output, Tensor start, Tensor end, Tensor weight);
14+
static void execute(Tensor output, Tensor start, Tensor end, float weight);
15+
16+
// 【核心修改】必须声明为模板函数,才能支持 dispatcher<schema_t>() 和 dispatcher<schema_s>()
17+
template <typename T>
18+
static common::OpDispatcher<T> &dispatcher();
19+
};
20+
21+
Tensor lerp(Tensor start, Tensor end, Tensor weight);
22+
Tensor lerp(Tensor start, Tensor end, float weight);
23+
24+
void lerp_(Tensor output, Tensor start, Tensor end, Tensor weight);
25+
void lerp_(Tensor output, Tensor start, Tensor end, float weight);
26+
27+
} // namespace infinicore::op
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class TripletMarginLoss {
9+
public:
10+
// Schema signature: output, anchor, positive, negative, margin, p, eps, swap, reduction
11+
using schema = void (*)(Tensor, Tensor, Tensor, Tensor, float, int64_t, float, bool, int64_t);
12+
13+
static void execute(Tensor output, Tensor anchor, Tensor positive, Tensor negative, float margin, int64_t p, float eps, bool swap, int64_t reduction);
14+
static common::OpDispatcher<schema> &dispatcher();
15+
};
16+
17+
// Functional API
18+
// reduction: 0=None, 1=Mean, 2=Sum
19+
Tensor triplet_margin_loss(Tensor anchor, Tensor positive, Tensor negative, float margin = 1.0f, int64_t p = 2, float eps = 1e-6f, bool swap = false, int64_t reduction = 1);
20+
21+
// In-place / Explicit Output API
22+
void triplet_margin_loss_(Tensor output, Tensor anchor, Tensor positive, Tensor negative, float margin, int64_t p, float eps, bool swap, int64_t reduction);
23+
24+
} // namespace infinicore::op
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
#include <vector>
6+
7+
namespace infinicore::op {
8+
9+
class UpsampleBilinear {
10+
public:
11+
// Schema signature: output, input, align_corners
12+
using schema = void (*)(Tensor, Tensor, bool);
13+
14+
static void execute(Tensor output, Tensor input, bool align_corners);
15+
static common::OpDispatcher<schema> &dispatcher();
16+
};
17+
18+
// 需要传入 output_size (如 {H_out, W_out} 或 {N, C, H_out, W_out}) 来决定新 Tensor 的形状
19+
Tensor upsample_bilinear(Tensor input, std::vector<int64_t> output_size, bool align_corners = false);
20+
void upsample_bilinear_(Tensor output, Tensor input, bool align_corners);
21+
22+
} // namespace infinicore::op

include/infiniop.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
2929
#include "infiniop/ops/tanh.h"
3030
#include "infiniop/ops/topkrouter.h"
3131
#include "infiniop/ops/topksoftmax.h"
32+
#include "infiniop/ops/triplet_margin_loss.h"
33+
#include "infiniop/ops/upsample_bilinear.h"
34+
#include "infiniop/ops/kthvalue.h"
35+
#include "infiniop/ops/lerp.h"
36+
#include "infiniop/ops/ldexp.h"
3237
#include "infiniop/ops/zeros.h"
3338
#include "infiniop/tensor_descriptor.h"
34-
3539
#endif // __INFINIOP_API_H__

include/infiniop/ops/kthvalue.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef __INFINIOP_KTHVALUE_API_H__
2+
#define __INFINIOP_KTHVALUE_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopKthvalueDescriptor_t;
7+
8+
__C __export infiniStatus_t infiniopCreateKthvalueDescriptor(infiniopHandle_t handle,
9+
infiniopKthvalueDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t values,
11+
infiniopTensorDescriptor_t indices,
12+
infiniopTensorDescriptor_t input,
13+
int k,
14+
int dim,
15+
int keepdim);
16+
17+
__C __export infiniStatus_t infiniopGetKthvalueWorkspaceSize(infiniopKthvalueDescriptor_t desc, size_t *size);
18+
19+
__C __export infiniStatus_t infiniopKthvalue(infiniopKthvalueDescriptor_t desc,
20+
void *workspace,
21+
size_t workspace_size,
22+
void *values,
23+
void *indices,
24+
const void *input,
25+
void *stream);
26+
27+
__C __export infiniStatus_t infiniopDestroyKthvalueDescriptor(infiniopKthvalueDescriptor_t desc);
28+
29+
#endif // __INFINIOP_KTHVALUE_API_H__

include/infiniop/ops/ldexp.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef __INFINIOP_LDEXP_API_H__
2+
#define __INFINIOP_LDEXP_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopLdexpDescriptor_t;
7+
__C __export infiniStatus_t infiniopCreateLdexpDescriptor(infiniopHandle_t handle,
8+
infiniopLdexpDescriptor_t *desc_ptr,
9+
infiniopTensorDescriptor_t y,
10+
infiniopTensorDescriptor_t x,
11+
infiniopTensorDescriptor_t exp);
12+
__C __export infiniStatus_t infiniopGetLdexpWorkspaceSize(infiniopLdexpDescriptor_t desc, size_t *size);
13+
14+
__C __export infiniStatus_t infiniopLdexp(infiniopLdexpDescriptor_t desc,
15+
void *workspace,
16+
size_t workspace_size,
17+
void *y,
18+
const void *x,
19+
const void *exp,
20+
void *stream);
21+
22+
__C __export infiniStatus_t infiniopDestroyLdexpDescriptor(infiniopLdexpDescriptor_t desc);
23+
24+
#endif // __INFINIOP_LDEXP_API_H__

include/infiniop/ops/lerp.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef __INFINIOP_LERP_API_H__
2+
#define __INFINIOP_LERP_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopLerpDescriptor_t;
7+
8+
__C __export infiniStatus_t infiniopCreateLerpDescriptor(infiniopHandle_t handle,
9+
infiniopLerpDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output,
11+
infiniopTensorDescriptor_t start,
12+
infiniopTensorDescriptor_t end,
13+
infiniopTensorDescriptor_t weight,
14+
float weight_scalar);
15+
16+
__C __export infiniStatus_t infiniopGetLerpWorkspaceSize(infiniopLerpDescriptor_t desc, size_t *size);
17+
18+
__C __export infiniStatus_t infiniopLerp(infiniopLerpDescriptor_t desc,
19+
void *workspace,
20+
size_t workspace_size,
21+
void *output,
22+
const void *start,
23+
const void *end,
24+
const void *weight,
25+
void *stream);
26+
27+
__C __export infiniStatus_t infiniopDestroyLerpDescriptor(infiniopLerpDescriptor_t desc);
28+
29+
#endif // __INFINIOP_LERP_API_H__
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#ifndef __INFINIOP_TRIPLET_MARGIN_LOSS_API_H__
2+
#define __INFINIOP_TRIPLET_MARGIN_LOSS_API_H__
3+
4+
#include "../operator_descriptor.h"
5+
6+
typedef struct InfiniopDescriptor *infiniopTripletMarginLossDescriptor_t;
7+
8+
__C __export infiniStatus_t infiniopCreateTripletMarginLossDescriptor(infiniopHandle_t handle,
9+
infiniopTripletMarginLossDescriptor_t *desc_ptr,
10+
infiniopTensorDescriptor_t output,
11+
infiniopTensorDescriptor_t anchor,
12+
infiniopTensorDescriptor_t positive,
13+
infiniopTensorDescriptor_t negative,
14+
float margin,
15+
int p,
16+
float eps,
17+
int swap, // 0: False, 1: True
18+
int reduction); // 0: None, 1: Mean, 2: Sum
19+
20+
__C __export infiniStatus_t infiniopGetTripletMarginLossWorkspaceSize(infiniopTripletMarginLossDescriptor_t desc, size_t *size);
21+
22+
__C __export infiniStatus_t infiniopTripletMarginLoss(infiniopTripletMarginLossDescriptor_t desc,
23+
void *workspace,
24+
size_t workspace_size,
25+
void *output,
26+
const void *anchor,
27+
const void *positive,
28+
const void *negative,
29+
void *stream);
30+
31+
__C __export infiniStatus_t infiniopDestroyTripletMarginLossDescriptor(infiniopTripletMarginLossDescriptor_t desc);
32+
33+
#endif // __INFINIOP_TRIPLET_MARGIN_LOSS_API_H__

0 commit comments

Comments
 (0)