"docs/zh_cn/advanced_guides/datasets/index.rst" did not exist on "a055f6ad99779084fcbc93c59393774d46abdfe8"
THCResponse.cuh 1.99 KB
Newer Older
rusty1s's avatar
rusty1s committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef THC_RESPONSE_INC
#define THC_RESPONSE_INC

#include "common.cuh"

    /* if (color[i] != -1) { continue; }  // Only visit blue nodes. */
    /* ptrdiff_t c; bool isDead = true; */
    /* for (ptrdiff_t e = cumDegree[i] - degree[i]; e < cumDegree[i]; e++) { */
    /*   c = col[e]; */
    /*   if (isDead && color[c] < 0) { isDead = false; }  // Unmatched neighbor found. */
    /*   if (color[c] == -2) { prop[i] = c; break; }  // Propose to first red neighbor. */
    /* } */
    /* if (isDead) { color[i] = i; }  // Mark node as dead. */

__global__ void responseKernel(int64_t *color, int64_t *prop, int64_t *row, int64_t *col,
                               int64_t *degree, int64_t *cumDegree, ptrdiff_t nNodes) {
  KERNEL_LOOP(i, nNodes) {
    if (color[i] != -2) { continue; }  // Only visit red nodes.
    /* ptrdiff_t c;  // int64_t neighborColor, minValue; */
    /* bool isDead = true; */
    for (ptrdiff_t e = cumDegree[i] - degree[i]; e < cumDegree[i]; e++) {
    /*   c = col[e]; */
    /*   neighborColor = color[c]; */
    /*   if (neighborColor == -1 && prop[c] == i) {  // Blue neighbor found which proposed to node i. */
    /*     minValue = min(i, c); */
    /*     color[i] = minValue; */
    /*     color[c] = minValue; */
    /*     break; */
    /*   } */
    /*   if (neighborColor < 0) isDead = false; */
    }
    /* if (isDead && color[i] < 0) color[i] = i;  // Mark node as dead. */
  }
}

void THCTensor_response(THCState *state, THCudaLongTensor *color, THCudaLongTensor *prop,
                        THCudaLongTensor *row, THCudaLongTensor *col, THCudaLongTensor *degree,
                        THCudaLongTensor *cumDegree) {
  KERNEL_RUN(responseKernel, THCudaLongTensor_nElement(state, color),
             THCudaLongTensor_data(state, color), THCudaLongTensor_data(state, prop),
             THCudaLongTensor_data(state, row), THCudaLongTensor_data(state, col),
             THCudaLongTensor_data(state, degree), THCudaLongTensor_data(state, cumDegree));
}

#endif  // THC_RESPONSE_INC