Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
torch-scatter
Commits
ba26dfb1
"git@developer.sourcefind.cn:OpenDAS/ollama.git" did not exist on "bee2f4a3b0e5dbf6611a399cd6b8f6b176b9d376"
Commit
ba26dfb1
authored
Jan 13, 2018
by
rusty1s
Browse files
faster
parent
bb47653e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
12 deletions
+18
-12
torch_scatter/src/generic/cpu.c
torch_scatter/src/generic/cpu.c
+18
-12
No files found.
torch_scatter/src/generic/cpu.c
View file @
ba26dfb1
...
...
@@ -3,9 +3,10 @@
#else
void
scatter_
(
mul
)(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
input
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY3
(
real
,
output
,
int64_t
,
index
,
real
,
input
,
dim
,
TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
assertIndexInBoundaries
(
idx
,
output_size
,
TH_TENSOR_DIM_APPLY_counter
);
output_data
[
idx
*
output_stride
]
*=
*
(
input_data
+
i
*
input_stride
);
...
...
@@ -13,9 +14,10 @@ void scatter_(mul)(int dim, THTensor *output, THLongTensor *index, THTensor *inp
}
void
scatter_
(
div
)(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
input
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY3
(
real
,
output
,
int64_t
,
index
,
real
,
input
,
dim
,
TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
assertIndexInBoundaries
(
idx
,
output_size
,
TH_TENSOR_DIM_APPLY_counter
);
output_data
[
idx
*
output_stride
]
/=
*
(
input_data
+
i
*
input_stride
);
...
...
@@ -23,9 +25,10 @@ void scatter_(div)(int dim, THTensor *output, THLongTensor *index, THTensor *inp
}
void
scatter_
(
mean
)(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
input
,
THTensor
*
count
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY4
(
real
,
output
,
int64_t
,
index
,
real
,
input
,
real
,
count
,
dim
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
assertIndexInBoundaries
(
idx
,
output_size
,
TH_TENSOR_DIM_APPLY_counter
);
output_data
[
idx
*
output_stride
]
+=
*
(
input_data
+
i
*
input_stride
);
...
...
@@ -34,9 +37,10 @@ void scatter_(mean)(int dim, THTensor *output, THLongTensor *index, THTensor *in
}
void
scatter_
(
max
)(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
input
,
THLongTensor
*
arg
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY4
(
real
,
output
,
int64_t
,
index
,
real
,
input
,
int64_t
,
arg
,
dim
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
assertIndexInBoundaries
(
idx
,
output_size
,
TH_TENSOR_DIM_APPLY_counter
);
if
(
*
(
input_data
+
i
*
input_stride
)
>=
*
(
output_data
+
idx
*
output_stride
))
{
...
...
@@ -47,9 +51,10 @@ void scatter_(max)(int dim, THTensor *output, THLongTensor *index, THTensor *inp
}
void
scatter_
(
min
)(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
input
,
THLongTensor
*
arg
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY4
(
real
,
output
,
int64_t
,
index
,
real
,
input
,
int64_t
,
arg
,
dim
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
assertIndexInBoundaries
(
idx
,
output_size
,
TH_TENSOR_DIM_APPLY_counter
);
if
(
*
(
input_data
+
i
*
input_stride
)
<=
*
(
output_data
+
idx
*
output_stride
))
{
...
...
@@ -60,9 +65,10 @@ void scatter_(min)(int dim, THTensor *output, THLongTensor *index, THTensor *inp
}
void
index_backward
(
int
dim
,
THTensor
*
output
,
THLongTensor
*
index
,
THTensor
*
grad
,
THLongTensor
*
arg
)
{
int64_t
i
,
idx
;
int64_t
n
,
i
,
idx
;
n
=
THLongTensor_size
(
index
,
dim
);
TH_TENSOR_DIM_APPLY4
(
real
,
output
,
int64_t
,
index
,
real
,
grad
,
int64_t
,
arg
,
dim
,
for
(
i
=
0
;
i
<
THLongTensor_size
(
index
,
dim
)
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
idx
=
*
(
index_data
+
i
*
index_stride
);
if
(
*
(
arg_data
+
idx
*
arg_stride
)
==
i
)
output_data
[
i
*
output_stride
]
=
*
(
grad_data
+
idx
*
grad_stride
);
})
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment