BitTorrent Turns 10: Happy Birthday
torrentfreak.com
torrentfreak.com
Especially for problems where all you need to do is divide your data into slices, apply some function, and assemble the results, BitTorrent already solves the hard part of this. (Edit: because the hard part is getting at the data in the first place, not computing over it and assembling the results.) That's what you're doing when you download a movie, it's just that the function is "identity" and the assembly is "concat".
So HN, how would you build this? has it been worked on? what am I missing?
Underlying this is a desire for ad hoc computation, where the calculations to be performed don't have to be decided in advance. (Presumably this is also what Carmack means by "computation of opportunity".) You can't do this if you have to collect the data first. But if you know where the data already is, you can send the computations to it. It seems like the BitTorrent protocol would help here.
I think I must be misunderstanding you. Are you talking about some p2p system for distributing the code/data to the nodes? Like a decentralised BOINC?
The bit about BT that makes it special is the tit-for-tat negotiation system, which prevents clients from "cheating" by downloading and not uploading. In an environment where there is no motive for an individual node to behave differently from the rest of the swarm for its own gain, then BT's unique benefits disappear.
In other words, you want a decentralized, redundant morsel discoverer-replicator. To me this sounds like what BitTorrent already does with, say, movies. Any popular movie is already split into morsels and replicated a zillion times, so any particular download (computation, in our case) can immediately start running. Of course that's only true for files that are already well-seeded. But it's easy for anyone to come along with a new movie (dataset, in our case) and plug it in, making it easy for anyone else to download (compute with), and getting faster the more popular it becomes.
(MapReduce can do the computation easily... if you've first arranged all the data appropriately. But that "if" is what, in Carmack's words, "precludes most computation of opportunity.")
The reason I wonder if BitTorrent would be suitable for solving the hard part of this problem (discovering and transferring big data) is that it already has solved it, massively. What else would you need to get true ad hoc computation on arbitrary data? A query language, an evaluator for that language that knows how to compute with morsels and assemble the results (there's your MapReduce)... and what else?
One more point. You mentioned BOINC. I believe BOINC sends all input data to the client with each request. In other words, it's only good for computationally intensive tasks (lots of computation per unit of data). The same is true of GPGPU. That's why I brought up "average" as an example: it's a commonplace function that is not computionally intensive at all. The work is almost entirely in finding the data and accessing it.
What I really want to know, though, is who else has thought about using BitTorrent for this kind of thing, and what they think.
They need to keep data in memory and shuffle it around really fast. To do so, they use a bittorrent-variant algorithm. I think this is the paper that describes it - http://www.google.com/url?sa=t&source=web&cd=7&s...
Most unsolved problems today are probably thought problems, not technical problems (excepting battery life and blanketed super-fast wireless).