Skip to content

Commit 8b57466

Browse files
committed
Add InfiniCore axpy, blas_copy, scal and swap wrappers
1 parent b4f5bfa commit 8b57466

27 files changed

Lines changed: 865 additions & 0 deletions

File tree

include/infinicore/ops.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
#include "ops/atanh.hpp"
1111
#include "ops/attention.hpp"
1212
#include "ops/avg_pool1d.hpp"
13+
#include "ops/axpy.hpp"
1314
#include "ops/baddbmm.hpp"
1415
#include "ops/bilinear.hpp"
1516
#include "ops/binary_cross_entropy_with_logits.hpp"
1617
#include "ops/blas_amax.hpp"
1718
#include "ops/blas_amin.hpp"
19+
#include "ops/blas_copy.hpp"
1820
#include "ops/blas_dot.hpp"
1921
#include "ops/causal_softmax.hpp"
2022
#include "ops/cdist.hpp"
@@ -46,8 +48,10 @@
4648
#include "ops/relu.hpp"
4749
#include "ops/rms_norm.hpp"
4850
#include "ops/rope.hpp"
51+
#include "ops/scal.hpp"
4952
#include "ops/silu.hpp"
5053
#include "ops/silu_and_mul.hpp"
5154
#include "ops/softmax.hpp"
55+
#include "ops/swap.hpp"
5256
#include "ops/swiglu.hpp"
5357
#include "ops/topksoftmax.hpp"

include/infinicore/ops/axpy.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Axpy {
9+
public:
10+
using schema = void (*)(Tensor, Tensor, Tensor);
11+
static void execute(Tensor alpha, Tensor x, Tensor y);
12+
static common::OpDispatcher<schema> &dispatcher();
13+
};
14+
15+
void axpy_(Tensor alpha, Tensor x, Tensor y);
16+
17+
} // namespace infinicore::op
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class BlasCopy {
9+
public:
10+
using schema = void (*)(Tensor, Tensor);
11+
static void execute(Tensor x, Tensor y);
12+
static common::OpDispatcher<schema> &dispatcher();
13+
};
14+
15+
void blas_copy_(Tensor x, Tensor y);
16+
17+
} // namespace infinicore::op

include/infinicore/ops/scal.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Scal {
9+
public:
10+
using schema = void (*)(Tensor, Tensor);
11+
static void execute(Tensor alpha, Tensor x);
12+
static common::OpDispatcher<schema> &dispatcher();
13+
};
14+
15+
void scal_(Tensor x, Tensor alpha);
16+
17+
} // namespace infinicore::op

include/infinicore/ops/swap.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include "../device.hpp"
4+
#include "common/op.hpp"
5+
6+
namespace infinicore::op {
7+
8+
class Swap {
9+
public:
10+
using schema = void (*)(Tensor, Tensor);
11+
static void execute(Tensor x, Tensor y);
12+
static common::OpDispatcher<schema> &dispatcher();
13+
};
14+
15+
void swap_(Tensor x, Tensor y);
16+
17+
} // namespace infinicore::op

python/infinicore/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@
6161
from infinicore.ops.asum import asum
6262
from infinicore.ops.atanh import atanh
6363
from infinicore.ops.attention import attention
64+
from infinicore.ops.axpy import axpy
6465
from infinicore.ops.baddbmm import baddbmm
6566
from infinicore.ops.bilinear import bilinear
6667
from infinicore.ops.blas_amax import blas_amax
6768
from infinicore.ops.blas_amin import blas_amin
69+
from infinicore.ops.blas_copy import blas_copy
6870
from infinicore.ops.blas_dot import blas_dot
6971
from infinicore.ops.binary_cross_entropy_with_logits import (
7072
binary_cross_entropy_with_logits,
@@ -112,8 +114,10 @@
112114
from infinicore.ops.paged_caching import paged_caching
113115
from infinicore.ops.rearrange import rearrange
114116
from infinicore.ops.reciprocal import reciprocal
117+
from infinicore.ops.scal import scal
115118
from infinicore.ops.scatter import scatter
116119
from infinicore.ops.sinh import sinh
120+
from infinicore.ops.swap import swap
117121
from infinicore.ops.squeeze import squeeze
118122
from infinicore.ops.sum import sum
119123
from infinicore.ops.take import take
@@ -191,8 +195,10 @@
191195
"argwhere",
192196
"asin",
193197
"asum",
198+
"axpy",
194199
"blas_amax",
195200
"blas_amin",
201+
"blas_copy",
196202
"blas_dot",
197203
"acos",
198204
"addbmm",
@@ -241,6 +247,7 @@
241247
"float_power",
242248
"flipud",
243249
"scatter",
250+
"scal",
244251
"logcumsumexp",
245252
"logical_not",
246253
"logical_and",
@@ -253,6 +260,7 @@
253260
"index_add",
254261
"take",
255262
"sinh",
263+
"swap",
256264
"ones",
257265
"broadcast_to",
258266
"strided_empty",

python/infinicore/ops/axpy.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from infinicore.lib import _infinicore
2+
from infinicore.tensor import Tensor
3+
4+
5+
def axpy(alpha: Tensor, x: Tensor, y: Tensor):
6+
_infinicore.axpy_(alpha._underlying, x._underlying, y._underlying)
7+
return y

python/infinicore/ops/blas_copy.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from infinicore.lib import _infinicore
2+
from infinicore.tensor import Tensor
3+
4+
5+
def blas_copy(x: Tensor, y: Tensor):
6+
_infinicore.blas_copy_(x._underlying, y._underlying)
7+
return y

python/infinicore/ops/scal.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from infinicore.lib import _infinicore
2+
from infinicore.tensor import Tensor
3+
4+
5+
def scal(x: Tensor, alpha: Tensor):
6+
_infinicore.scal_(x._underlying, alpha._underlying)
7+
return x

python/infinicore/ops/swap.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from infinicore.lib import _infinicore
2+
from infinicore.tensor import Tensor
3+
4+
5+
def swap(x: Tensor, y: Tensor):
6+
_infinicore.swap_(x._underlying, y._underlying)
7+
return x, y

0 commit comments

Comments
 (0)