- Notifications
You must be signed in to change notification settings - Fork15
-
Hello all, and thanks for the incredible work. The problemI have several use cases for GraphBLAS that involve either multi-channel graphs or batched graphs, where the sparsity pattern is the same across a vector of observations. For instance, this occurs when we have multiple data channels associated with each edge in a fixed mesh or grid, or when we have a batch of graphs whose connectivity structure is identical but whose weights are different. I’m not sure if there’s an “out-of-the-box” or recommended way of using The current solution (not great)Directly registering new operators with the I’ve thus created some very hackish patches of Is there a better way of doing this that I’m missing, which doesn’t rely on patching the internals? Is this use case something that Asides:
|
BetaWas this translation helpful?Give feedback.
All reactions
❤️ 1
Replies: 3 comments 1 reply
-
Hi@rciric! Thanks for the questions. Wow, I am beyond impressed. This is a challenging part of the codebase. What you want to do makes sense to me, and I suspect you're right that it would give good performance for UDTs of this size. Using UDTs like this would be the "GraphBLAS way" to do things IMHO. I added UDTs to Thanks so much for the gist ❤️ . Looks great and surprisingly readable at a glance (beauty is in the eye of the beholder ;) ). I will take a closer look at your code ASAP, and then we can decide how we can get the functionality into In my final comment#177 (comment), I call out the possibility of default operators to "just work" on array UDTs, such as Feel free to share any more details in this thread that you think may be useful. I'll read it and try to use it. Do you know of any shortcomings to your current solution? Are you blocked by anything, and how urgent are things to get unblocked or improved? We try to be responsive to user needs.
Sorry about that! We try to give a deprecation cycle of at least six months for breaking changes if possible. Moving things to Takeaways and actions
Thanks again@rciric, and welcome to our community 🎉 |
BetaWas this translation helpful?Give feedback.
All reactions
-
To clarify, this is an example workflow that I want to "just work" in >>>importgraphblasasgb>>>A=gb.Matrix("int[3]",2,2)>>>A<< (1,2,3)>>>A"M_0"nvalsnrowsncolsdtypeformatgb.Matrix422INT64[3]fullr (iso)-----------------------------------------------------010 [1,2,3] [1,2,3]1 [1,2,3] [1,2,3]>>>B=gb.Matrix("int[3]",2,2)>>>B<< (2,3,4)>>>B"M_1"nvalsnrowsncolsdtypeformatgb.Matrix422INT64[3]fullr (iso)-----------------------------------------------------010 [2,3,4] [2,3,4]1 [2,3,4] [2,3,4]>>> (A @B).new()"M_2"nvalsnrowsncolsdtypeformatgb.Matrix422INT64[3]fullr (iso)-----------------------------------------------------010 [4,12,24] [4,12,24]1 [4,12,24] [4,12,24] The final expression will be the most difficult to do, but this is my target end-state. The earlier expressions need these PRs--#299 and#300 --which make using UDTs extra-nice imho. |
BetaWas this translation helpful?Give feedback.
All reactions
-
Hello, and thanks for being so responsive! It’s great to hear you’ve planned on supporting this functionality — I would definitely be happy to work with you all to get a solution (particularly for the last case above) into the code base. I can also open issues for some of the specific troublespots I mentioned. There are a couple of other projects I’m working on simultaneously, so I will try to work with you all toward a preliminary PR in the next couple weeks, but no promises yet IMO the biggest deficiencies in my implementation, relative to the above and your#177 comment, are (1) that I’ve only hard-coded solutions for one elementary operator of each type, and (2) that the implementation defines and registers all new ops as part of the creation of the vector/array UDT, which is done explicitly. I’ll say a little bit about each of these issues below, and my working model of how they might be fixed.
Or, perhaps there is a better way to do this (e.g., that wouldn't require a separate JIT for each new array shape)? Preliminarily, I suspect another source of difficulty integrating my changes would likely stem from reconciling some of the patches with existing code. Off the top of my head, there are the patched op classes, There’s definitely no urgency/blocking here — there are plenty of other features I’m also experimenting with for my use case, etc. (To summarise briefly without going off-topic, the application is something DL-adjacent but not quite DL — I can share more details at the meeting / on the chat, and maybe we can see whether / how it might feasibly fit into the GraphBLAS ecosystem.) Thanks again, and happy to contribute however I can! |
BetaWas this translation helpful?Give feedback.
All reactions
-
That's exactly right. We'll use Thanks for your thoughtfulness and willingness to contribute. We're in no particular rush on this feature other than I'm eager for it :). I'm also curious to hear how your application might fit into the GraphBLAS ecosystem. If you want or need anything from us, please ask. Cheers! |
BetaWas this translation helpful?Give feedback.