{"action":"created","issue":{"url":"https://api.github.com/repos/gunrock/gunrock/issues/254","repository_url":"https://api.github.com/repos/gunrock/gunrock","labels_url":"https://api.github.com/repos/gunrock/gunrock/issues/254/labels{/name}","comments_url":"https://api.github.com/repos/gunrock/gunrock/issues/254/comments","events_url":"https://api.github.com/repos/gunrock/gunrock/issues/254/events","html_url":"https://github.com/gunrock/gunrock/issues/254","id":239525298,"number":254,"title":"Sparse-matrix by sparse-matrix multiplication","user":{"login":"alexperrone","id":4990236,"avatar_url":"https://avatars0.githubusercontent.com/u/4990236?v=3","gravatar_id":"","url":"https://api.github.com/users/alexperrone","html_url":"https://github.com/alexperrone","followers_url":"https://api.github.com/users/alexperrone/followers","following_url":"https://api.github.com/users/alexperrone/following{/other_user}","gists_url":"https://api.github.com/users/alexperrone/gists{/gist_id}","starred_url":"https://api.github.com/users/alexperrone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexperrone/subscriptions","organizations_url":"https://api.github.com/users/alexperrone/orgs","repos_url":"https://api.github.com/users/alexperrone/repos","events_url":"https://api.github.com/users/alexperrone/events{/privacy}","received_events_url":"https://api.github.com/users/alexperrone/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2017-06-29T15:48:41Z","updated_at":"2017-06-29T19:48:46Z","closed_at":null,"body":"Couldn't find a function or example of sparse-matrix * sparse-matrix multiplication in gunrock or external dependencies (moderngpu and cub). Does an example exist for gunrock? Closest I could find in the codebase was sparse-matrix * vector. \r\n\r\nThere are two applications for this, the second one being a more specialized function: (1) relational algebra on the adjacency matrix to compute various projections of the graph, (2) computing the number of triangles each edge occurs in by computing A * transpose(A) where A is the adjacency matrix, since an edge i-j occurs in number of triangles equal to dot-product of row i and column j of adjacency matrix. This has an efficient CPU implementation in the function `tcrossprod` in the Csparse library, for example. From their documentation (where `%*%` indicates matrix multiplication and `t(.)` is the transpose): \r\n\r\n> The functions `crossprod` and `tcrossprod` are matrix products or “cross products”, ideally implemented efficiently without computing t(.)’s unnecessarily. [...] `tcrossprod()` takes the cross-product of the transpose of a matrix.`tcrossprod(x)` is formally equivalent to,  but  faster  than, the call `x  %*%  t(x)`,  and  so  is `tcrossprod(x,  y)` instead  of `x %*% t(y)`.\r\n\r\nSearch for `tcrossprod` here: https://cran.r-project.org/web/packages/Matrix/Matrix.pdf"},"comment":{"url":"https://api.github.com/repos/gunrock/gunrock/issues/comments/312084878","html_url":"https://github.com/gunrock/gunrock/issues/254#issuecomment-312084878","issue_url":"https://api.github.com/repos/gunrock/gunrock/issues/254","id":312084878,"user":{"login":"jowens","id":976970,"avatar_url":"https://avatars3.githubusercontent.com/u/976970?v=3","gravatar_id":"","url":"https://api.github.com/users/jowens","html_url":"https://github.com/jowens","followers_url":"https://api.github.com/users/jowens/followers","following_url":"https://api.github.com/users/jowens/following{/other_user}","gists_url":"https://api.github.com/users/jowens/gists{/gist_id}","starred_url":"https://api.github.com/users/jowens/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jowens/subscriptions","organizations_url":"https://api.github.com/users/jowens/orgs","repos_url":"https://api.github.com/users/jowens/repos","events_url":"https://api.github.com/users/jowens/events{/privacy}","received_events_url":"https://api.github.com/users/jowens/received_events","type":"User","site_admin":false},"created_at":"2017-06-29T19:48:46Z","updated_at":"2017-06-29T19:48:46Z","body":"For Gunrock, we currently just input CSR as our input format, so we'd need special handling to deal with a bit binary array/matrix. But it would make sense! The EmptyHeaded work and I believe Enterprise both used bit arrays."}}
{"actor":{"display_login":"jowens"}}