[Enjoy this guest post by Janette Rounds. – Ed.]
Recently, I binge-watched the first season of Arrow. I have to admit I was completely on board, in spite of the numerous, erroneous TV tropes regarding computer hacking, the inconsistent acting, and the formulaic plot. I was even willing to accept the whole earthquake machine thing. I was all in, right up until the scene in Episode 22, where the supposed hacker character (Felicity) says, “There’s at least a teraflop of data to go through.”
Oh no! Arrow, how could you? I have to stop watching the show now!
For those not in the know, a teraflop is a measurement of the rate of processing, specifically a trillion floating point operations per second. If Felicity had a normal computer, she should have said, “at least a terabyte of data to go through” because a terabyte is a measurement of an amount of data. How could she have an amount per second of data to go through?
I finished the season, and then decided to stop. I didn’t think much more about Arrow until weeks later, when I found myself thinking about the relationship between distance, velocity and acceleration. Distance is pretty self-explanatory, but units for velocity are usually put in terms of distance/time. Acceleration is even more interesting because the units are usually phrased in terms of distance/time2.
If you take total distance and divide it by the total time, you get average speed, or the average rate of change of distance. If you take total speed and divide it by the total time, you get average acceleration or average rate of change of speed. If you take total acceleration and divide it by time, you get jerk, a weird physics term that translates to rate of change of acceleration. You can go further with the averaging, but we don’t really need to. Interestingly, the derivative of position is speed, and the derivative of speed, or the second derivative of position is acceleration. The third derivative of position or the first derivative of acceleration is jerk.
Suddenly in the midst of this thought process, my brain switched back to Felicity and her poor addled brain mistaking bytes for flops. What would it mean if the flop/byte switch wasn’t a mistake? If we assume flops are equivalent to speed, then Felicity saying teraflops (speed) to go through (referencing future implies time) is like dividing speed by time. She is talking about the acceleration of her computing process. Instead of staying at a fixed speed, Felicity’s processor is changing as it computes, becoming faster (I hope). If we took the first derivative of Felicity’s processor speed, there is no telling what it would look like, except that the graph would not be a horizontal line.
Just a heads up: normal computers don’t work like that. If we took the first derivative of a normal processor’s speed, our answer would be 0 because the derivative of any constant number is 0. The graph would be a horizontal line at 0. If your processor runs at 10 gigaflops, it will always run at 10 gigaflops unless you break it. So, other than destruction, what could make your processor speed change?
The modern processor has a fixed number of flops it can manage, and we change processor speed generally by adding or subtracting microprocessors. Humans don’t make processors by hand. Instead they require massive clean rooms full of enormous machines and photochemical inscribing equipment. In Arrow, we see none of that. What could be making processors?
Since we don’t hear anyone on Arrow talking about moving black specks, we can assume that whatever is making processors is very small, so small that it operates at the molecular scale. Additionally, the scale that processors are constructed on would prevent anything much larger from building them without clean rooms and such like. These small things would have to be self-replicating machines; Felicity is not a millionaire (that we know of), and it would take a lot of money to build even one of these tiny machines. If you had to build multiple, it would require a significant chunk of Queen Consolidated’s total resources. If however, you only had to build the first one, and you could simply provide the materials and the rest built themselves, that might be possible for your typical IT person to manage. So we have these self-replicating tiny machines that are at work in Felicity’s computer. No, let’s call them what they are. Nanobots are making new nanobots to serve as processors so Felicity’s data processing can accelerate.
If Felicity has a hoard of nanobots, it would explain so much! Like how in a matter of days Felicity managed to pinpoint the water source being used to produce an entire city’s supply of an illegal drug. Also, how she managed to fit terabytes of data onto a Windows 8 tablet and hack into everything ever. It could also possibly explain how she managed to use Windows 8… like at all.
This explanation does leave us with a couple questions, however. If Felicity is accelerating her processing power by teraflops, how much data did she actually download off of Merlyn Global Group’s computers?To answer that question, we would need to know the amount of time involved. Felicity and Oliver break into Merlyn Global by using a burger delivery as cover, so we can reasonably assume that the hacking occurred around noon or one. We don’t know when Felicity makes her discovery of the location of the earthquake machine, but we do know it is “later that night”. Night implies sometime between 9 and midnight, so Felicity’s calculations probably ran between 8 and 12 hours. We also know that she accelerated her processing power by at least 1 teraflop. We don’t know what her starting processing power was but the fastest processor on the market today can hypothetically manage 0.125 teraflops (See Appendix). The best single core CPU can hypothetically manage 0.012 teraflops. I’m going to assume that each nanobot boosts processing power by half that. In other words, each nanobot boosts processing power by 0.006 teraflops. I’m also going to assume that the effect is additive rather than multiplicative. That results in a minimum nanobot population increase of 167 nanobots. If we assume those nanobots were built at a constant rate, we would have a range of 14 to 21 nanobots being produced per hour. However, we cannot assume a constant rate of nanobot construction. They are building themselves, remember. If we start with a relatively small number of bots, say 2, and grow our bot population to 169 (167+2), the rate of bot construction would depend heavily on the number of bots we could use for construction at any given time.
Applying the principles of population growth we have a graph that looks like this (see appendix for the formula and all that):
However, that is the graph for unrestricted growth. All populations face some kind of limiting factor eventually. In this case, the population would not be limited by resources, but by something called processor overhead. Processor overhead refers to a fixed limit of processor power due to things like transmission speed and the ability of the CPU controller to apportion tasks. We have to include a limit to nanobot production in our analysis. I am going to assume that if nanobots are possible, we’ve made some significant advances in CPU controllers and network transmission. A more realistic population graph looks like this:
Now comes the difficult part. If we multiply the equation mapped out in the graph above by our 0.006 teraflops per second per bot, we have the maximum floating point operations per second for any given time. In order to find the total floating point operations performed, we need to take the integral of the equation of the graph. (If math is your thing, look in the Appendix to see how I did that!) Then we plug in 9 – 0 and get 817.3156 trillion floating point operations total.
There is no way to translate floating point operations into bytes of data. However, if we break down the phrase “floating point operation,” we can perhaps find an approximation that will satisfy. In modern computers, each “float” is number that takes up 4 bytes worth of data. Each floating point operation has at least 4 bytes for the floating point and some amount for the operation. Let’s assume that each operation takes 8 bytes of data. This is not a direct translation, as there is no way to predict what operations will take up an amount of data storage based on the limited data we have. Quit yelling, internet, I know. For the record, Felicity started it. We have to make these assumptions however, because Felicity isn’t saying anything.
So we take (4 + 8) and multiply that by our number of floating point operations and we get 9,808.2197 trillion bytes of data. That means 9,808.2197 terabytes of data, or 9.81 petabytes (a petabyte is equal to a quadrillion bytes). For reference, one of my current computers holds 1 terabyte of data. Facebook processes as much as 500 terabytes (0.5 petabytes) of data PER DAY. It would be entirely conceivable for a large company such as Merlyn Global Group to have 10 petabytes of proprietary data stored on internal servers.
Where does that leave us? We have Felicity, capable of building nanobots that process a whopping (but conservatively estimated) petabyte an hour. Felicity, who hacks into government databases on a whim. Felicity, who does all the geeky things, while wearing cute dresses and pink lipstick. Once these qualifications are laid out, we only have one major question left. What in the heck was Felicity doing in IT?? IT is a good, well paid job, except when you compare IT wages to Fortune-500-CEO wages or brilliant-engineers-with-lots-of-patents wages. Felicity, based on this analysis, is capable of both those things. She must be the single most underappreciated employee in the history of the universe. Get out of the basement, girl! Go start a highly lucrative, life-saving company of your own, and don’t let Oliver Queen’s moodiness get you down!
Janette Rounds is a computer-scientist-in-training who enjoys overthinking everything from cilantro proportions in salsa to faster-than-light travel.
Appendix
Calculating max processor speed in flops:
Intel Core i7-4770K at max clock speed of 3.9 GigaHertz. Hertz is a measure of clock speed, specifically the number of cycles per second. There is no 100% accurate way to translate between Hertz and flops. However, there are some approximations. The modern microprocessor is able to do about 4 floating point operations per cycle. This processor has 4 cores, but Intel’s hyperthreading doubles the number of cores, so we get 8 cores. Using the formula cores * clock speed * FLOPs per cycle, we get an overall processing speed of 124,800,000,000 FLOPS per second or 124.8 gigaFLOPS
Unrestricted Growth Formula:
Base formulas come from Techniques for Wildlife Investigations and Management by Clait Braun.
Nt = N0ert where Nt is the population size at time t, N0 is the population at time 0, and r is the rate of population growth. I am assuming that our starting population is 2 nanobots and that the time was 9 hours.
169 = 2e9r
ln 169 = ln 2e9r
ln 169 = ln 2 + ln e9r
ln 169 = ln 2 + 9r ln e
ln169 – ln 2 = 9r
ln169/2 = 9r
1/9*ln84.5 = r
r = 0.49297
Our new equation is specific to our hypothetical population of nanobots.
Nt = 2e0.49297t
Density Dependent Growth Formula:
Nt = K/(1+ea-rt) where K is the carrying capacity, r is the maximum growth rate if the population were free of constraints and a is the size of the population at time 0 relative to the maximum population size. I am assuming a population carrying capacity of 200, because I think 200 is a nice number. We have to make so many assumptions with this data set. I wish Felicity would answer some hard questions about her nanobots.
169 = 200/(1+e2-9*r)
169(1+e2-9*r) = 200
1+e2-9*r = 200/169
e2-9*r = 1.1834 – 1
ln e2-9*r = ln 0.1834
2 – 9r = -1.6959
-9r = -3.6959
r = 0.41066
Nt = 200/(1+e2-0.41066t)
Integral of 0.006*( 200/(1+e2-0.41066t))
integral 1.2/(e(2-0.41066 x)+1) dx
= 1.2 integral 1/(e(2-0.41066 x)+1) dx
= -2.92213 integral 1/(eu+1) du
= -2.92213 integral 1/(s (s+1)) ds
= -2.92213 integral (1/s-1/(s+1)) ds
= 2.92213 integral 1/(s+1) ds-2.92213 integral 1/s ds
= 2.92213 integral 1/p dp-2.92213 integral 1/s ds
= 2.92213 log(p)-2.92213 integral 1/s ds
= 2.92213 log(p)-2.92213 log(s)+constant
= 2.92213 log(s+1)-2.92213 log(s)+constant
= 2.92213 log(eu+1)-2.92213 log(eu)+constant
= 2.92213 log(e(2-0.41066 x)+1)-2.92213 log(e(2-0.41066 x))+constant
= 2.92213 log(e(0.41066 x-2)+1)+constant
Answer: |
| = 2.92213 log(7.38906+e(0.41066 x))+constant
Plugging in 9 – 0 for x we get 817.3156