cpu.c 2.46 KB
Newer Older
rusty1s's avatar
rusty1s committed
1
#ifndef TH_GENERIC_FILE
rusty1s's avatar
rusty1s committed
2
#define TH_GENERIC_FILE "generic/cpu.c"
rusty1s's avatar
rusty1s committed
3
4
#else

rusty1s's avatar
rusty1s committed
5
void scatter_(add)(int dim, THTensor *output, THLongTensor *index, THTensor *input) {
rusty1s's avatar
rusty1s committed
6
  int64_t idx;
rusty1s's avatar
rusty1s committed
7
  TH_TENSOR_DIM_APPLY3(real, output, int64_t, index, real, input, dim, TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM,
rusty1s's avatar
rusty1s committed
8
9
10
11
12
13
14
    for (int64_t i = 0; i < THLongTensor_size(index, dim); i++) {
      idx = *(index_data + i * index_stride);
      assertIndexInBoundaries(idx, output_size, TH_TENSOR_DIM_APPLY_counter);
      output_data[idx] += *(input_data + i * input_stride);
    })
}

rusty1s's avatar
rusty1s committed
15
void scatter_(sub)(int dim, THTensor *output, THLongTensor *index, THTensor *input) {
rusty1s's avatar
rusty1s committed
16
  int64_t idx;
rusty1s's avatar
rusty1s committed
17
  TH_TENSOR_DIM_APPLY3(real, output, int64_t, index, real, input, dim, TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM,
rusty1s's avatar
rusty1s committed
18
19
20
    for (int64_t i = 0; i < THLongTensor_size(index, dim); i++) {
      idx = *(index_data + i * index_stride);
      assertIndexInBoundaries(idx, output_size, TH_TENSOR_DIM_APPLY_counter);
rusty1s's avatar
bugfix  
rusty1s committed
21
      output_data[idx] -= *(input_data + i * input_stride);
rusty1s's avatar
rusty1s committed
22
23
24
    })
}

rusty1s's avatar
rusty1s committed
25
void scatter_(mul)(int dim, THTensor *output, THLongTensor *index, THTensor *input) {
rusty1s's avatar
rusty1s committed
26
  int64_t idx;
rusty1s's avatar
rusty1s committed
27
  TH_TENSOR_DIM_APPLY3(real, output, int64_t, index, real, input, dim, TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM,
rusty1s's avatar
rusty1s committed
28
29
30
    for (int64_t i = 0; i < THLongTensor_size(index, dim); i++) {
      idx = *(index_data + i * index_stride);
      assertIndexInBoundaries(idx, output_size, TH_TENSOR_DIM_APPLY_counter);
rusty1s's avatar
bugfix  
rusty1s committed
31
      output_data[idx] *= *(input_data + i * input_stride);
rusty1s's avatar
rusty1s committed
32
33
34
    })
}

rusty1s's avatar
rusty1s committed
35
void scatter_(div)(int dim, THTensor *output, THLongTensor *index, THTensor *input) {
rusty1s's avatar
rusty1s committed
36
  int64_t idx;
rusty1s's avatar
rusty1s committed
37
  TH_TENSOR_DIM_APPLY3(real, output, int64_t, index, real, input, dim, TH_TENSOR_DIM_APPLY3_SIZE_EQ_EXCEPT_DIM,
rusty1s's avatar
rusty1s committed
38
    for (int64_t i = 0; i < THLongTensor_size(index, dim); i++) {
rusty1s's avatar
rusty1s committed
39
      idx = *(index_data + i * index_stride);
rusty1s's avatar
rusty1s committed
40
      assertIndexInBoundaries(idx, output_size, TH_TENSOR_DIM_APPLY_counter);
rusty1s's avatar
bugfix  
rusty1s committed
41
      output_data[idx] /= *(input_data + i * input_stride);
rusty1s's avatar
rusty1s committed
42
43
44
    })
}

rusty1s's avatar
rusty1s committed
45
46
47
48
49
50
51
52
53
54
55
void scatter_(mean)(int dim, THTensor *output, THLongTensor *index, THTensor *input, THTensor *output_count) {
  int64_t idx;
  TH_TENSOR_DIM_APPLY4(real, output, int64_t, index, real, input, real, output_count, dim, TH_TENSOR_DIM_APPLY4_SIZE_EQ_EXCEPT_DIM,
    for (int64_t i = 0; i < THLongTensor_size(index, dim); i++) {
      idx = *(index_data + i * index_stride);
      assertIndexInBoundaries(idx, output_size, TH_TENSOR_DIM_APPLY_counter);
      output_data[idx] += *(input_data + i * input_stride);
      output_count_data[idx]++;
    })
}

rusty1s's avatar
rusty1s committed
56
#endif