WarpLDA: a Cache Efficient O(1) Algorithm for Latent Dirichlet Allocation