Talk:Central processing unit: Difference between revisions
imported>Dominic DeStefano No edit summary |
imported>J. Noel Chiappa (→Von Neumann architecture: My take on what vNA is) |
||
(48 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{subpages}} | |||
__TOC__ | |||
Hi Matt, thanks for importing an article from WP that you wrote. Can I hope that you'll be working on it here at least as much as there? Also, if anyone else made any other edits, we must check that "Content is from Wikipedia?" box. --[[User:Larry Sanger|Larry Sanger]] 13:23, 16 February 2007 (CST) | Hi Matt, thanks for importing an article from WP that you wrote. Can I hope that you'll be working on it here at least as much as there? Also, if anyone else made any other edits, we must check that "Content is from Wikipedia?" box. --[[User:Larry Sanger|Larry Sanger]] 13:23, 16 February 2007 (CST) | ||
:Of course. I'm going to remove a lot of red links that I don't think will have articles here in the near future and try and clean up some of the templates that don't exist on CZ. I'm also importing the images it uses that can be used here. I did actually check the box you mentioned in the original import, but it doesn't automagically stay checked in subsequent revisions. Do I need to manually check it for each revision I commit here (assuming that these subsequent revisions are applied on CZ exclusively)? -- [[User:Matt Britt|Matt Britt]] 13:32, 16 February 2007 (CST) | :Of course. I'm going to remove a lot of red links that I don't think will have articles here in the near future and try and clean up some of the templates that don't exist on CZ. I'm also importing the images it uses that can be used here. I did actually check the box you mentioned in the original import, but it doesn't automagically stay checked in subsequent revisions. Do I need to manually check it for each revision I commit here (assuming that these subsequent revisions are applied on CZ exclusively)? -- [[User:Matt Britt|Matt Britt]] 13:32, 16 February 2007 (CST) | ||
Some changes have been done to the article to simplify the summary of the definition, move the CPU operation section above the history section for better visibility, and restructure the CPU operation section for the purpose of a more concise description. Also, the terms [[instruction set architecture]] and [[program counter]] have been given their own entries and their ref tags removed from the main body of this article. None of the core information has been changed; simply reworded in more concise terms to allow for an easier read. No changes have been made to the history and implementation sections, as they are largely the advanced explanations of the term and need no simplification. Thanks! --[[User:Dominic DeStefano|Dominic DeStefano]] 16:03, 30 March 2007 (CDT) | |||
==Wikipedia Status?== | |||
Can we get some clarification on the article status vis a vis Wikipedia? Does it need to be marked or not? [[User:Greg Woodhouse|Greg Woodhouse]] 11:13, 14 May 2007 (CDT) | |||
:The guy that wrote the Wikipedia article moved it over to here. I don't know how that affects the "Content on Wikipedia" tag, but it was the original reason that this article wasn't tagged. [[User:Eric M Gearhart|Eric M Gearhart]] | |||
::This is true, see [http://en.citizendium.org/wiki?title=Central_processing_unit&diff=prev&oldid=100038149 this]. I will untag ethe article. —[[User:Stephen Ewen|Stephen Ewen]] [[User talk:Stephen Ewen|(Talk)]] 20:06, 11 August 2007 (CDT) | |||
==HUGE article== | |||
Can this article could be broken out a little more? On CZ the policy is more of a "layman's definition" on the main article, and if someone wants to dig deeper they can. Maybe [[History of the CPU]], [[CPU Manufacturing]], [[CPU Design and Implementation]] etc. need to get broken out into their own articles? --[[User:Eric M Gearhart|Eric M Gearhart]] 16:01, 8 April 2007 (CDT) | |||
:I'm not sure it's necessary. The article seems rather accessible to me, covering the fundamentals of processors in enough depth to be of value to a layperson, without using a great deal of jargon or requiring specialist knowledge to understand. [[User:Greg Woodhouse|Greg Woodhouse]] 10:51, 14 May 2007 (CDT) | |||
:I should add that I think there is plenty of room for subarticles such as those you mention. In fact, I had originally thought that such things as RISC vs. CISC processors, multi-core processors would have been covered here, but it may be more appropriate to go into detail in other articles. [[User:Greg Woodhouse|Greg Woodhouse]] 11:05, 14 May 2007 (CDT) | |||
==history of computing== | |||
We are starting work on [[history of computing]], and if no one objects, I might move the history part of this somewhere to match the style we're using there. The contents of this history section of this article is much more about computers and computer architecture as a whole than just about the CPU part of a computer. It's useful material (thanks to those who created it).[[User:Pat Palmer|Pat Palmer]] 09:07, 12 May 2007 (CDT) | |||
== Approval nomination == | |||
We still need clarification on the WP issue, but this article seems accessible, providing reasonably good coverage of the topic at an appropriate level, and quite stable. I'm going ahead and nominating it for approval. Nice work. [[User:Greg Woodhouse|Greg Woodhouse]] 11:25, 14 May 2007 (CDT) | |||
:I'd rather wait and not approve this yet. The corpus of Computers Workgroup articles is still in flux. A lot of this information crosses over with the information in [[computer architecture]] (or, it ought to). I also think the article is too long, and would benefit from having some topics broken out into subtopics. Finally, it takes a lot of work to comb through an article getting it ready for "Approval". I frankly would rather any editors/authors we have spend their time helping us grow the corpus of related articles and help stabilize them into a working form for the long run. Temporarily snapshotting an article by "approving" it will make this work of seeking the best inter-article relationships more awkward. I find myself constantly arguing against seeking early approval. This article, though full of good material, is far from as good as it could be. Finally, I don't know that we have enough deep experts working in Citizendium to approve this particular article. Processor architecture is a huge topic and, although this is a very good start, I don't feel that it's done yet. Sorry to sound like a party pooper :-( [[User:Pat Palmer|Pat Palmer]] 11:49, 14 May 2007 (CDT) | |||
::If it seems "stable", that's probably because there are not enough authors active in the area yet (in my opinion). I'd work on it but can't, right now, for lack or time. There are articles I feel are more urgent. I know enough to work on it, but I really want to get cracking on Java and .NET, which are where I'm actively working these days. [[User:Pat Palmer|Pat Palmer]] 11:52, 14 May 2007 (CDT) | |||
==grooming for approval== | |||
I'm starting to pick at this article to get it ready for approval, since the Computers Workgroup seems to strongly desire to get an article approved! [[User:Pat Palmer|Pat Palmer]] 12:43, 14 May 2007 (CDT) | |||
==let's break out history part== | |||
I would come closer to finding this ready if we could break out the history section into a new article, as I am beginning to recommend as a general strategy at [[CZ_Talk:Computers_Workgroup#need_to_break_out_history_parts_from_some_articles]] . If no one objects, that's what I'd like to do. That allows us to deal with the potential duplication which is happening across articles when authors start writing about the history of a technology. I think it will be much easier to agree on the current technology description if we break out the history, and also, that will help us organize the relationships for all the [[history of computing]] type articles. [[User:Pat Palmer|Pat Palmer]] 12:24, 14 May 2007 (CDT) | |||
:I just did it. [[User:Pat Palmer|Pat Palmer]] 12:43, 14 May 2007 (CDT) | |||
==Further reading== | |||
I think the pipelining and SIMD links under further reading should become references instead. [[User:Pat Palmer|Pat Palmer]] 12:43, 14 May 2007 (CDT) | |||
==Endnotes need to be changed to references== | |||
The current endnotes need to become references linked to particular sentences of the text. It is confusing to use both endnotes and references, and other articles mainly use references. Let's stick with one style. However, it's going to be tedious to convert them :-( [[User:Pat Palmer|Pat Palmer]] 12:46, 14 May 2007 (CDT) | |||
== Synchronous operation == | |||
I'm not sure that it's accurate to say that most CPUs operate synchronously. Operations initiated on one clock cycle (such as reads from memory) may take multiple cycles to complete. Optimizations such as pipelining (which are commonplace nowadays) are also highly asynchronous. [[User:Greg Woodhouse|Greg Woodhouse]] 13:36, 14 May 2007 (CDT) | |||
::Maybe it's apples and oranges; I think pipelines usually stick registers in between all the stages, so the pipeline is effectively prevented from being flow-through (combinatorial). [[User:Pat Palmer|Pat Palmer]] 13:42, 15 May 2007 (CDT) | |||
:::P S - I didn't write that stuff and haven't spent much time reading it. But it seems like it's better ''not'' to say something that may be uncertain. I also was a little startled by the sentence that you noticed. [[User:Pat Palmer|Pat Palmer]] 13:43, 15 May 2007 (CDT) | |||
:::On the other hand, it's probably harmless to say that (though maybe it doesn't add much but just confuses people). There are always conbinatorial bits; the ALU itself will usually be combinatorial. But everything in a CPU is pretty much clocked and controlled by the control unit so that things happen in the right order. It's a finite state machine, and so it has to work that way by definition. And finally, it is really hard to design asynchronous circuits. I've only heard of that being done for very small widgets. [[User:Pat Palmer|Pat Palmer]] 13:45, 15 May 2007 (CDT) | |||
==Von Neumann architecture== | |||
You might want to check on definitions of "Von Neumann" architecture (and please don't use Wikipedia as the source in this case). Doesn't it mean having program and instructions AND data in one sequential physical memory? As opposed to a "Harvard architecture" (from the Harvard Mark I) in which there are two physical memory banks, one for instructions, and another for data? I'm not sure the definition of this in the article is clear at present. [[User:Pat Palmer|Pat Palmer]] 22:32, 16 May 2007 (CDT) | |||
P.S. - The choice between the two (Von Neumann type arch. vs. Harvard) has several important implications that could be discussed to good purpose, such as that it is not possible to tell by looking at a set of bits whether that set of bits represents data, an address, or a machine instruction (in Von Neumann where it's just one memory). But with separate memories it is not possible to confuse instructions and data (eliminating some possible virus causes, for example). Some machines today do still have separate memories (at least, some SPARC/Solaris machines do). [[User:Pat Palmer|Pat Palmer]] 22:46, 16 May 2007 (CDT) | |||
: 'Harvard architecture' is now (back in the Mark I days it meant something different) the correct term for 'instuctions and data in separate memory banks' - or, more likely/accurately, 'instuctions and data are fetched into the CPU through separate memory busses', usually from separate memory banks (to improve memory bandwidth into the CPU, locality, etc). That separation of memory may or may not be visible to the programmer. After all, it ''doesn't'' generally mean that the CPU doesn't have write access to the instruction memory (although there may be very specialized machines of which this is not true) - otherwise how would you load a new program? | |||
: 'Von Neuman architecture' does '''not''' mean 'inverse of Harvard architecture'. What it means is, basically, the basic concepts in the EDVAC (with reference to how that machine differed from previous machines, e.g. ENIAC and Mark I). | |||
: One key difference is that the machine has write access to its own instruction memory, i.e. it can modify its own program. The EDVAC (and most - all? - other early computers) did this by combining the instruction and data memory into a single memory, so a memory cell could be interpreted ''either'' as instructions or data. But I don't think sinlge-memory aspect is totally fundamental; a Harvard architecture machine with different word lengths in the two memory banks would still be a vNA if it could modify its own program, I think. | |||
: Also, the programs possible with e.g. ENIAC were more limited; it had looping, but not completely general control-flow (i.e. arbitrary goto within the program). I.e. the EDVAC implemented a universal Turing machine. So that's a second key attribute of vNA. | |||
: Another aspect of vNA is that it's basically sequential, with a single-instruction/single-data, and not a dataflow type architecture (as the ENIAC was, to some degree). There is now stuff in the middle (e.g. SIMD), but that's a modified vNA. (And MIMD is really just parallel vNA machines.) So I think that's the third, but it's not quite as key as the first two, I think. [[User:J. Noel Chiappa|J. Noel Chiappa]] 22:18, 26 April 2008 (CDT) | |||
==very dense information; can we explain these terms before starting to use them?== | |||
This sentence: ''It also makes hazard-avoiding techniques like branch prediction, speculative execution, and out-of-order execution crucial to maintaining high levels of performance.'' contains several advanced concepts. The section goes on to discuss these without attempting any kind of simple explanation, to a relatively non-expert reader, about what they are. In other words, at present it seems to be written for people who already understand these concepts. Would it be possible to rewrite this for people who don't yet understand them but would like to? Even though there are hot links to a subarticle (yet to be written), it might be helpful to include a quickie overview, here, of what each term means. [[User:Pat Palmer|Pat Palmer]] 22:38, 16 May 2007 (CDT) | |||
:''I'm'' struggling with it. I'd be considered a power-user, and I've taught Intro to Computers. [[User:Stephen Ewen|Stephen Ewen]] 23:18, 16 May 2007 (CDT) | |||
I actually think the article reads rather well, but you're right that this section is likely to be a bit forbidding to the reader with no exposure to computer architecture. But a perfectly reasonable response is to ask whether every article should be expected to try and explain everything in elementary terms. It's perfectly reasonable to say the answer is ''no''. Maybe this article is going to be tough going, but is that really so terrible? Someone else can always come along and write an overview article. The obvious counterargument is that an article titled Central processing unit is likely to be where a lot of people will start reading. But even so, if we insist that authors always begin from ground zero, authors will start leaving in droves, either from burnout our out of sheer boredom. Having said that, examples or brief explanations could certainly help. Carrying out instructions takes time, so if the processor starts a division and has other opertations not depending on the result of that division that can be started while waiting for the division to complete, then out of order execution can save time. Similarly, adding one to the contents of a register is very fast. It may be wise to continue the process of incrementing a value in a register (without destroying information of course) even if the instruction to increment it has not arrived. The reason is that this is a common operation with counters, and it can save time (on the average) to guess that a counter is just being incremented and perform that operation "speculatively" even if when the next instructions actually arrive, it turns out that there was no need to increment that value any further, so the effort was wasted. In other words, instead of waiting and doing nothing, it can be more prudent to do something that may or may not turn out to have been necessary in the end. [[User:Greg Woodhouse|Greg Woodhouse]] 15:07, 17 May 2007 (CDT) | |||
:I don't think the choice is either/or here but ''both''. The choice is between whether articles will be ''layered'' or not, i.e., whether they will explain enough material in elementary terms so the article is a university-level introduction to ''both'' geeks and non-geeks. By way of analogy, consider the topic "democracy". An excellent article on the topic should be accessible to people with no to little experience in the matter, ''as well as'' be meaningful to those seasoned in its exercise and theory. As an educator, I know that doing such is both an art and an acquired skill, and that it is not always easy, but that it is always incredibly rewarding. We should strive to really explicate our knowledge for reasons of self-expansion/improvement, and for the sake of having our knowledge and writing reach a maximimal audience. Thankfully, no one writer need do that alone. That's why we collaborate. :-) ---[[User:Stephen Ewen|Stephen Ewen]] 16:57, 17 May 2007 (CDT) | |||
::I have taught this subject matter (for 4 years). It isn't easy to assume no prior knowledge, but it can be done, and it's worth doing. Each concept should have its own detailed article; but we might, here, describe just ONE of the concepts in terms accessible to non-experts, and say that it is one of a variety of advanced techniques used to speed up processors (followed by a list, with links, to the additional techniques). [[User:Pat Palmer|Pat Palmer]] 10:06, 26 May 2007 (CDT) | |||
===Two articles?=== | |||
:What concerns me is that we may end up taking a well-written article and eviscerating (okay, so that's a bit strong) by replacing it with a series of vague, imprecis definitions. The topic of this article ''is'' fairly technical, whether we like it or not, and I'd strongly oppose dumping the article just because the term CPU has found its way into popular culture. What we really need, in my opinion, is something like | |||
:We could then create new article and leave this one alone. [[User:Greg Woodhouse|Greg Woodhouse]] 15:33, 26 May 2007 (CDT) | |||
::Have I asked for anything to be removed? I have not, and I will not. I'm asking for concepts to be ''explained'' as they are introduced. I am quite astonished that anyone is bothering to argue about this; it seems self-evident to me that it ought to be the rule, rather than the exception. If a concept is not fully explained, it should at least link to a more detailed article that ''does'' explain it. [[User:Pat Palmer|Pat Palmer]] 16:08, 26 May 2007 (CDT) | |||
::For a non-technical introduction see [[Central processing unit (overview)]]. | |||
:::I don't like that idea very much. Let's just explain concepts as we introduce them. It's simple courtesy to readers. [[User:Pat Palmer|Pat Palmer]] 16:08, 26 May 2007 (CDT) | |||
::If you can make that work, then so much the better. This whole discussion is awfully theoretical, and it will probably be a lot easier to talk about actual text. [[User:Greg Woodhouse|Greg Woodhouse]] 01:16, 29 May 2007 (CDT) |
Latest revision as of 21:18, 26 April 2008
Hi Matt, thanks for importing an article from WP that you wrote. Can I hope that you'll be working on it here at least as much as there? Also, if anyone else made any other edits, we must check that "Content is from Wikipedia?" box. --Larry Sanger 13:23, 16 February 2007 (CST)
- Of course. I'm going to remove a lot of red links that I don't think will have articles here in the near future and try and clean up some of the templates that don't exist on CZ. I'm also importing the images it uses that can be used here. I did actually check the box you mentioned in the original import, but it doesn't automagically stay checked in subsequent revisions. Do I need to manually check it for each revision I commit here (assuming that these subsequent revisions are applied on CZ exclusively)? -- Matt Britt 13:32, 16 February 2007 (CST)
Some changes have been done to the article to simplify the summary of the definition, move the CPU operation section above the history section for better visibility, and restructure the CPU operation section for the purpose of a more concise description. Also, the terms instruction set architecture and program counter have been given their own entries and their ref tags removed from the main body of this article. None of the core information has been changed; simply reworded in more concise terms to allow for an easier read. No changes have been made to the history and implementation sections, as they are largely the advanced explanations of the term and need no simplification. Thanks! --Dominic DeStefano 16:03, 30 March 2007 (CDT)
Wikipedia Status?
Can we get some clarification on the article status vis a vis Wikipedia? Does it need to be marked or not? Greg Woodhouse 11:13, 14 May 2007 (CDT)
- The guy that wrote the Wikipedia article moved it over to here. I don't know how that affects the "Content on Wikipedia" tag, but it was the original reason that this article wasn't tagged. Eric M Gearhart
- This is true, see this. I will untag ethe article. —Stephen Ewen (Talk) 20:06, 11 August 2007 (CDT)
HUGE article
Can this article could be broken out a little more? On CZ the policy is more of a "layman's definition" on the main article, and if someone wants to dig deeper they can. Maybe History of the CPU, CPU Manufacturing, CPU Design and Implementation etc. need to get broken out into their own articles? --Eric M Gearhart 16:01, 8 April 2007 (CDT)
- I'm not sure it's necessary. The article seems rather accessible to me, covering the fundamentals of processors in enough depth to be of value to a layperson, without using a great deal of jargon or requiring specialist knowledge to understand. Greg Woodhouse 10:51, 14 May 2007 (CDT)
- I should add that I think there is plenty of room for subarticles such as those you mention. In fact, I had originally thought that such things as RISC vs. CISC processors, multi-core processors would have been covered here, but it may be more appropriate to go into detail in other articles. Greg Woodhouse 11:05, 14 May 2007 (CDT)
history of computing
We are starting work on history of computing, and if no one objects, I might move the history part of this somewhere to match the style we're using there. The contents of this history section of this article is much more about computers and computer architecture as a whole than just about the CPU part of a computer. It's useful material (thanks to those who created it).Pat Palmer 09:07, 12 May 2007 (CDT)
Approval nomination
We still need clarification on the WP issue, but this article seems accessible, providing reasonably good coverage of the topic at an appropriate level, and quite stable. I'm going ahead and nominating it for approval. Nice work. Greg Woodhouse 11:25, 14 May 2007 (CDT)
- I'd rather wait and not approve this yet. The corpus of Computers Workgroup articles is still in flux. A lot of this information crosses over with the information in computer architecture (or, it ought to). I also think the article is too long, and would benefit from having some topics broken out into subtopics. Finally, it takes a lot of work to comb through an article getting it ready for "Approval". I frankly would rather any editors/authors we have spend their time helping us grow the corpus of related articles and help stabilize them into a working form for the long run. Temporarily snapshotting an article by "approving" it will make this work of seeking the best inter-article relationships more awkward. I find myself constantly arguing against seeking early approval. This article, though full of good material, is far from as good as it could be. Finally, I don't know that we have enough deep experts working in Citizendium to approve this particular article. Processor architecture is a huge topic and, although this is a very good start, I don't feel that it's done yet. Sorry to sound like a party pooper :-( Pat Palmer 11:49, 14 May 2007 (CDT)
- If it seems "stable", that's probably because there are not enough authors active in the area yet (in my opinion). I'd work on it but can't, right now, for lack or time. There are articles I feel are more urgent. I know enough to work on it, but I really want to get cracking on Java and .NET, which are where I'm actively working these days. Pat Palmer 11:52, 14 May 2007 (CDT)
grooming for approval
I'm starting to pick at this article to get it ready for approval, since the Computers Workgroup seems to strongly desire to get an article approved! Pat Palmer 12:43, 14 May 2007 (CDT)
let's break out history part
I would come closer to finding this ready if we could break out the history section into a new article, as I am beginning to recommend as a general strategy at CZ_Talk:Computers_Workgroup#need_to_break_out_history_parts_from_some_articles . If no one objects, that's what I'd like to do. That allows us to deal with the potential duplication which is happening across articles when authors start writing about the history of a technology. I think it will be much easier to agree on the current technology description if we break out the history, and also, that will help us organize the relationships for all the history of computing type articles. Pat Palmer 12:24, 14 May 2007 (CDT)
- I just did it. Pat Palmer 12:43, 14 May 2007 (CDT)
Further reading
I think the pipelining and SIMD links under further reading should become references instead. Pat Palmer 12:43, 14 May 2007 (CDT)
Endnotes need to be changed to references
The current endnotes need to become references linked to particular sentences of the text. It is confusing to use both endnotes and references, and other articles mainly use references. Let's stick with one style. However, it's going to be tedious to convert them :-( Pat Palmer 12:46, 14 May 2007 (CDT)
Synchronous operation
I'm not sure that it's accurate to say that most CPUs operate synchronously. Operations initiated on one clock cycle (such as reads from memory) may take multiple cycles to complete. Optimizations such as pipelining (which are commonplace nowadays) are also highly asynchronous. Greg Woodhouse 13:36, 14 May 2007 (CDT)
- Maybe it's apples and oranges; I think pipelines usually stick registers in between all the stages, so the pipeline is effectively prevented from being flow-through (combinatorial). Pat Palmer 13:42, 15 May 2007 (CDT)
- P S - I didn't write that stuff and haven't spent much time reading it. But it seems like it's better not to say something that may be uncertain. I also was a little startled by the sentence that you noticed. Pat Palmer 13:43, 15 May 2007 (CDT)
- On the other hand, it's probably harmless to say that (though maybe it doesn't add much but just confuses people). There are always conbinatorial bits; the ALU itself will usually be combinatorial. But everything in a CPU is pretty much clocked and controlled by the control unit so that things happen in the right order. It's a finite state machine, and so it has to work that way by definition. And finally, it is really hard to design asynchronous circuits. I've only heard of that being done for very small widgets. Pat Palmer 13:45, 15 May 2007 (CDT)
Von Neumann architecture
You might want to check on definitions of "Von Neumann" architecture (and please don't use Wikipedia as the source in this case). Doesn't it mean having program and instructions AND data in one sequential physical memory? As opposed to a "Harvard architecture" (from the Harvard Mark I) in which there are two physical memory banks, one for instructions, and another for data? I'm not sure the definition of this in the article is clear at present. Pat Palmer 22:32, 16 May 2007 (CDT)
P.S. - The choice between the two (Von Neumann type arch. vs. Harvard) has several important implications that could be discussed to good purpose, such as that it is not possible to tell by looking at a set of bits whether that set of bits represents data, an address, or a machine instruction (in Von Neumann where it's just one memory). But with separate memories it is not possible to confuse instructions and data (eliminating some possible virus causes, for example). Some machines today do still have separate memories (at least, some SPARC/Solaris machines do). Pat Palmer 22:46, 16 May 2007 (CDT)
- 'Harvard architecture' is now (back in the Mark I days it meant something different) the correct term for 'instuctions and data in separate memory banks' - or, more likely/accurately, 'instuctions and data are fetched into the CPU through separate memory busses', usually from separate memory banks (to improve memory bandwidth into the CPU, locality, etc). That separation of memory may or may not be visible to the programmer. After all, it doesn't generally mean that the CPU doesn't have write access to the instruction memory (although there may be very specialized machines of which this is not true) - otherwise how would you load a new program?
- 'Von Neuman architecture' does not mean 'inverse of Harvard architecture'. What it means is, basically, the basic concepts in the EDVAC (with reference to how that machine differed from previous machines, e.g. ENIAC and Mark I).
- One key difference is that the machine has write access to its own instruction memory, i.e. it can modify its own program. The EDVAC (and most - all? - other early computers) did this by combining the instruction and data memory into a single memory, so a memory cell could be interpreted either as instructions or data. But I don't think sinlge-memory aspect is totally fundamental; a Harvard architecture machine with different word lengths in the two memory banks would still be a vNA if it could modify its own program, I think.
- Also, the programs possible with e.g. ENIAC were more limited; it had looping, but not completely general control-flow (i.e. arbitrary goto within the program). I.e. the EDVAC implemented a universal Turing machine. So that's a second key attribute of vNA.
- Another aspect of vNA is that it's basically sequential, with a single-instruction/single-data, and not a dataflow type architecture (as the ENIAC was, to some degree). There is now stuff in the middle (e.g. SIMD), but that's a modified vNA. (And MIMD is really just parallel vNA machines.) So I think that's the third, but it's not quite as key as the first two, I think. J. Noel Chiappa 22:18, 26 April 2008 (CDT)
very dense information; can we explain these terms before starting to use them?
This sentence: It also makes hazard-avoiding techniques like branch prediction, speculative execution, and out-of-order execution crucial to maintaining high levels of performance. contains several advanced concepts. The section goes on to discuss these without attempting any kind of simple explanation, to a relatively non-expert reader, about what they are. In other words, at present it seems to be written for people who already understand these concepts. Would it be possible to rewrite this for people who don't yet understand them but would like to? Even though there are hot links to a subarticle (yet to be written), it might be helpful to include a quickie overview, here, of what each term means. Pat Palmer 22:38, 16 May 2007 (CDT)
- I'm struggling with it. I'd be considered a power-user, and I've taught Intro to Computers. Stephen Ewen 23:18, 16 May 2007 (CDT)
I actually think the article reads rather well, but you're right that this section is likely to be a bit forbidding to the reader with no exposure to computer architecture. But a perfectly reasonable response is to ask whether every article should be expected to try and explain everything in elementary terms. It's perfectly reasonable to say the answer is no. Maybe this article is going to be tough going, but is that really so terrible? Someone else can always come along and write an overview article. The obvious counterargument is that an article titled Central processing unit is likely to be where a lot of people will start reading. But even so, if we insist that authors always begin from ground zero, authors will start leaving in droves, either from burnout our out of sheer boredom. Having said that, examples or brief explanations could certainly help. Carrying out instructions takes time, so if the processor starts a division and has other opertations not depending on the result of that division that can be started while waiting for the division to complete, then out of order execution can save time. Similarly, adding one to the contents of a register is very fast. It may be wise to continue the process of incrementing a value in a register (without destroying information of course) even if the instruction to increment it has not arrived. The reason is that this is a common operation with counters, and it can save time (on the average) to guess that a counter is just being incremented and perform that operation "speculatively" even if when the next instructions actually arrive, it turns out that there was no need to increment that value any further, so the effort was wasted. In other words, instead of waiting and doing nothing, it can be more prudent to do something that may or may not turn out to have been necessary in the end. Greg Woodhouse 15:07, 17 May 2007 (CDT)
- I don't think the choice is either/or here but both. The choice is between whether articles will be layered or not, i.e., whether they will explain enough material in elementary terms so the article is a university-level introduction to both geeks and non-geeks. By way of analogy, consider the topic "democracy". An excellent article on the topic should be accessible to people with no to little experience in the matter, as well as be meaningful to those seasoned in its exercise and theory. As an educator, I know that doing such is both an art and an acquired skill, and that it is not always easy, but that it is always incredibly rewarding. We should strive to really explicate our knowledge for reasons of self-expansion/improvement, and for the sake of having our knowledge and writing reach a maximimal audience. Thankfully, no one writer need do that alone. That's why we collaborate. :-) ---Stephen Ewen 16:57, 17 May 2007 (CDT)
- I have taught this subject matter (for 4 years). It isn't easy to assume no prior knowledge, but it can be done, and it's worth doing. Each concept should have its own detailed article; but we might, here, describe just ONE of the concepts in terms accessible to non-experts, and say that it is one of a variety of advanced techniques used to speed up processors (followed by a list, with links, to the additional techniques). Pat Palmer 10:06, 26 May 2007 (CDT)
Two articles?
- What concerns me is that we may end up taking a well-written article and eviscerating (okay, so that's a bit strong) by replacing it with a series of vague, imprecis definitions. The topic of this article is fairly technical, whether we like it or not, and I'd strongly oppose dumping the article just because the term CPU has found its way into popular culture. What we really need, in my opinion, is something like
- We could then create new article and leave this one alone. Greg Woodhouse 15:33, 26 May 2007 (CDT)
- Have I asked for anything to be removed? I have not, and I will not. I'm asking for concepts to be explained as they are introduced. I am quite astonished that anyone is bothering to argue about this; it seems self-evident to me that it ought to be the rule, rather than the exception. If a concept is not fully explained, it should at least link to a more detailed article that does explain it. Pat Palmer 16:08, 26 May 2007 (CDT)
- For a non-technical introduction see Central processing unit (overview).
- I don't like that idea very much. Let's just explain concepts as we introduce them. It's simple courtesy to readers. Pat Palmer 16:08, 26 May 2007 (CDT)
- If you can make that work, then so much the better. This whole discussion is awfully theoretical, and it will probably be a lot easier to talk about actual text. Greg Woodhouse 01:16, 29 May 2007 (CDT)