| #ifndef THC_TENSOR_RANDOM_CUH |
| #define THC_TENSOR_RANDOM_CUH |
| |
| #include "THCNumerics.cuh" |
| |
| template <typename T> |
| __device__ int binarySearchForMultinomial(T* dist, |
| int size, |
| T val) { |
| int start = 0; |
| int end = size; |
| |
| while (end - start > 0) { |
| int mid = start + (end - start) / 2; |
| |
| T midVal = dist[mid]; |
| if (THCNumerics<T>::lt(midVal, val)) { |
| start = mid + 1; |
| } else { |
| end = mid; |
| } |
| } |
| |
| if (start == size) { |
| // No probability mass or precision problems; just return the |
| // first element |
| start = 0; |
| } |
| |
| return start; |
| } |
| |
| #endif // THC_TENSOR_RANDOM_CUH |