serial_cpu.c 1.32 KB
Newer Older
rusty1s's avatar
rusty1s committed
1
2
#include <TH/TH.h>

rusty1s's avatar
fixes  
rusty1s committed
3
4
#define cluster_(NAME) TH_CONCAT_4(cluster_, NAME, _, Real)

rusty1s's avatar
rusty1s committed
5
6
7
8
9
10
#define SERIAL(output, row, col, degree, SELECT) { \
  int64_t *output_data = output->storage->data + output->storageOffset; \
  int64_t *row_data = row->storage->data + row->storageOffset; \
  int64_t *col_data = col->storage->data + col->storageOffset; \
  int64_t *degree_data = degree->storage->data + degree->storageOffset; \
  \
rusty1s's avatar
rusty1s committed
11
  int64_t e = 0, row_value, col_value, v; \
rusty1s's avatar
rusty1s committed
12
13
  while(e < THLongTensor_nElement(row)) { \
    row_value = row_data[e]; \
rusty1s's avatar
bugfix  
rusty1s committed
14
    if (output_data[row_value] < 0) { \
rusty1s's avatar
rusty1s committed
15
16
17
18
19
20
      col_value = -1; \
      SELECT \
      if (col_value < 0) { \
        output_data[row_value] = row_value; \
      } \
      else { \
rusty1s's avatar
rusty1s committed
21
22
23
        v = row_value < col_value ? row_value : col_value; \
        output_data[row_value] = v; \
        output_data[col_value] = v; \
rusty1s's avatar
rusty1s committed
24
25
26
27
28
      } \
    } \
    e += degree_data[row_value]; \
  } \
}
rusty1s's avatar
rusty1s committed
29

rusty1s's avatar
rusty1s committed
30
31
32
void cluster_serial(THLongTensor *output, THLongTensor *row, THLongTensor *col, THLongTensor *degree) {
  int64_t d, c;
  SERIAL(output, row, col, degree,
rusty1s's avatar
rusty1s committed
33
    for (d = 0; d < degree_data[row_value]; d++) {  // Iterate over neighbors.
rusty1s's avatar
rusty1s committed
34
      c = col_data[e + d];
rusty1s's avatar
rusty1s committed
35
      if (output_data[c] < 0) {  // Neighbor is unmatched.
rusty1s's avatar
rusty1s committed
36
37
        col_value = c;
        break;
rusty1s's avatar
rusty1s committed
38
39
      }
    }
rusty1s's avatar
rusty1s committed
40
  )
41
42
}

rusty1s's avatar
fixes  
rusty1s committed
43
44
#include "generic/serial_cpu.c"
#include "THGenerateAllTypes.h"