THCGreedy.cu 1.15 KB
Newer Older
rusty1s's avatar
rusty1s committed
1
2
#include "THCGreedy.h"

3
4
#include "common.cuh"
#include "THCDegree.cu"
rusty1s's avatar
rusty1s committed
5
#include "THCColor.cu"
rusty1s's avatar
rusty1s committed
6
7
#include "THCPropose.cu"
#include "THCResponse.cu"
8

rusty1s's avatar
rusty1s committed
9
void THCGreedy(THCState *state, THCudaLongTensor *cluster, THCudaLongTensor *row,
10
               THCudaLongTensor *col) {
rusty1s's avatar
rusty1s committed
11
  THCAssertSameGPU(THCudaLongTensor_checkGPU(state, 3, cluster, row, col));
12
13

  int nNodes = THCudaLongTensor_nElement(state, cluster);
rusty1s's avatar
rusty1s committed
14
15

  THCudaLongTensor_fill(state, cluster, -1);
16
17
  THCudaLongTensor *prop = THCudaLongTensor_newClone(state, cluster);

rusty1s's avatar
rusty1s committed
18
19
  THCudaLongTensor *degree = THCudaLongTensor_newWithSize1d(state, nNodes);
  THCudaLongTensor_degree(state, degree, row);
20

rusty1s's avatar
rusty1s committed
21
22
  THCudaLongTensor *cumDegree = THCudaLongTensor_newWithSize1d(state, nNodes);
  THCudaLongTensor_cumsum(state, cumDegree, degree, 0);
23

rusty1s's avatar
rusty1s committed
24
  while(!THCGreedy_assignColor(state, cluster)) {
rusty1s's avatar
rusty1s committed
25
26
    THCGreedy_propose(state, cluster, prop, row, col, degree, cumDegree);
    THCGreedy_response(state, cluster, prop, row, col, degree, cumDegree);
rusty1s's avatar
rusty1s committed
27
  };
28
29

  THCudaLongTensor_free(state, prop);
rusty1s's avatar
rusty1s committed
30
31
  THCudaLongTensor_free(state, degree);
  THCudaLongTensor_free(state, cumDegree);
rusty1s's avatar
rusty1s committed
32
33
34
35
}

#include "generic/THCGreedy.cu"
#include "THC/THCGenerateAllTypes.h"