In my opinion, making everyone change their ways for a few who have an issue isn't ethical, whether it's forcing people to change their web page to make it more friendly to the disabled, or not letting peanut butter sandwiches in elementary schools.
On the other hand, people should know that if their web page is not available to a group of people, then those people will not get the benefit of the web page. In addition, there is a market for folks to create (and sell, if they so choose) products that help people who have problems get around in society. Thus, wheelchairs and hearing aids and braille and such. It's always been this way.
To say that everyone must be included in the class of users makes no sense; do you have to make music accessible to the deaf, or visual art available to the blind? Of course not. Should you have to change your personal web page that you use to post pictures for your friends and family to make it more friendly to some disabled user you don't know? Of course not.
We can get ultra-fast point-to-point connections using directional wireless. What's all this about "wires"? That seems like such an outdated concept.
Maybe it's because it's harder to get a government-funded monopoly if you push forward in directional high-speed wireless for backbone links?
OK, sure, there are reliability problems with wireless, but in most of the USA you could set up a huge network using relays on existing cell towers. Shoot, cell towers already use directional high-data-rate wireless links to communicate with each other. And there are reliability problems with fiber, too... it's harder to drive a backhoe through a wireless link...
Higher taxes to pay for rail passes for some people
Higher air taxes/fees so the new rail system can "compete"
Silly political-based decisions about where stops/tracks should go (like this)
TSA taking over for rail after the first suspected bomb
Now it takes 18.5 hours from NY->LA (plus stops, at 150mph)
I have a better idea: how about we let rising fuel prices dictate what gets built? If rail is so much more efficient than air travel, then when JP1 is 20USD/gal we should see trains become more economical naturally, right?
But for right now, Amtrak (which IS subsidized) takes 61 hours from NY-LA, and it's almost the same price to fly round-trip as it is to rail one way. So maybe the airlines are doing an OK job?
The US is NOT EUROPE! We have a much larger land area. This makes a difference in how people want to get around.
Was this about the time when we had cachedot.slashdot.org? I remember it was updated about once an hour and was infinitely faster than the "real" slashdot page.
I believe that if you check my comment history, my comments have been consistently more informative than the average Anonymous Coward comment.
I will grant to you that my reminiscing was perhaps not the most informative comment, however as a comment to a reminiscent article I don't feel it is out-of-place.
If slashdot hid userids, I would not alter how I comment at all.
Do you think your profanity-laden post counts as a contribution? Your complaints that people who have been here longer are respected -- have you considered that perhaps the people who have been visiting technology forums for ten years are perhaps the best-informed and most interested in technology?
Maybe I'm not the stupid one. Certainly not stupid enough to get very upset about an Anonymous Coward. AC's have usually had little to contribute, even from the very beginning.
The picture clearly has a quad-core processor in it. Is this just a binned quad-core processor where one of the cores has a defect (like what Sony did with their Cell chip?) Or is it something separate, where they use the florplan for an L3 or something?
And why should ``symmetric'' imply even? It merely implies that all cores see memory with the same class of service. And, in reality, aren't most AMD multiprocessors cc-NUMA machines, not SMP?
For most workloads, if they are fairly multithreadable, 3 processors available will be just fine. I know of very few workloads that require an even number of processors, and even if it were the case that the task were split into an even number of threads, the OS should have no problem scheduling on a reduced number of processors.
Hey, doesn't the XBox 360 have a 3-core PPC in it?
Perhaps that was the cause for her lack of problems.
It certainly seems to be the cause of your problems.
You look like you're new around here, so I'll try to be polite. Having used both UNIX[0] tools and DOS ones, the UNIX tools are far superior. They are different, but you would likely find the DOS ones more opaque if you had learned the UNIX ones first. If you are not "computer savvy" enough to learn how to use effective tools, then I'm sorry.
ls and find are different utilities, and should be used for the appropriate task. An OS is not like a car. It is like a kitchen or a workshop -- it contains tools to let you create things. Conventional ovens, microwaves, cooktops, broilers, toasters, griddles, torches... they all heat food. But having the right tool for the job allows you to create the things you are trying to create.
ls pretty-prints directory contents.
find finds files according to criteria and sends them to stdout, primarily for scripting.
locate checks a global file archive (locatedb) for filenames across the system.
You were getting error messages because you told find to search down directories you didn't have permission to look at. If you know this and don't want to see the warnings, you can redirect stderr.
Filename globbing is handled by the shell in Unix. Glob matches are expanded for the arguments to the program. This can be useful and dangerous.
The UNIX tools have been honed over time by many, many smart people. You don't walk into a gourmet kitchen and ask why they need more than a microwave and a bowl for ramen noodles. The chef knows that having the right tool is essential. And you don't go into UNIX asking why they don't use DIR like DOS.
You do have to learn new habits. You have to learn how to read man pages. You have to understand how UNIX works. But once you realize the delicious concoctions you can create with ease in your UNIX kitchen, you will find yourself frustrated when you go to your friend's house, who just has a microwave and a bowl for ramen noodles.
I don't know how I could use a computer effectively without: bash vim egrep sed awk cut find ssh basename make mutt. I use Windows often at work, but I typically have two fullscreen RXVT's with cygwin or ssh'd to a linux box. I miss copy-on-select-middle-click-paste.
You don't have to use vim. Emacs is fine too, though I don't prefer it. You don't have to use bash. Zsh is fine too, though I don't prefer it. You don't have to use mutt. You don't have to use the effective tool I like, if you have an effective tool that suits you. I often prefer a high-temperature silicone spatula to a wooden spoon, even though both would work. But I believe you can't effectively use notepad or "edit" as a text editor... although ed has his place.:-)
Unix is hard to learn. But it is easy to use. Far easier than DOS. But you have to learn it first. The steeper the learning curve, the bigger the payoff. In the windows world, it's a pain to have to learn vbscript, but there's no other automated way (at least that I know of) to have visio open 1000 visio diagrams and convert them to a different format. Once you know a powerful tool, you have the ability to do things that were nearly impossible before. And having powerful tools that can be combined together is what UNIX is all about.
I realize some of this might be personal preference. I hate VMS. A "Create" command (in my opinion) should not create text files and terminal windows. It didn't feel right to me. It never did, even after a summer of using it fairly effectively. But I understand that some people prefer VMS to UNIX. And that's OK, as long as you have powerful tools that do the things you need to do.
Anyway, back to work.
[0] I will use UNIX here to mean all UNIX-like systems... UNIX, Linux, BSD, GNU, cygwin, whatever you want to call these utilities.
TRIPS, like many other projects optimized to produce the largest number of PhD students possible, starts out with a premise something like:
So, I have this big array of CPUs/ALUs/Functional Units, all I need to do is program them and I can be the computingest damn thing you ever saw!
And it's true. You build a sea of ALUs and you sic some folks on hand coding all sorts of things to the machine, and you end up with some spectacular results.
The problem is that we still can't get a compiler to do a good job at it, for the most part. We thought we could, and we threw every bell and whistle into IA64 for a compiler-controlled architecture, and you've seen what we've ended up with. Many years later, the situation is still pretty much the same: the compiler can't do all that great of a job with these sorts of machines.
Don't get me wrong, there are lots of good ideas in TRIPS or any of the various other academic projects like it, but I'm yet to be convinced that it's useful in any kind of real codebase that's not coded by hand by an army of graudate students. For some tasks, that's an acceptable model -- It's been the model in the world of signal processing for quite a while (though becoming less so daily) -- but for most mainstream applications it just won't fly.
That, and it's hard for compilers to have knowledge about history. It's terribly important for optimization, and it's just hard to get into the compiler (though relatively easy to get into a branch predictor).
Haven't we learned this by now? Why do we keep going over this same stupid premise?
The Instruction Set of a processor architecture with so many resources available to it doesn't really matter, so long as it isn't utterly and completely braindead.
X86 isn't braindead enough to qualify... if you had an intercal instruction set or an One Instruction Set Computer it might.
You really want to do several things to get performance out of an instruction stream -- register renaming, instruction manipulation (breaking them apart or joining them together or changing them into other instructions), elimination of some bad instruction choices, and a host of other things. You would want to do these things even on a "clean" ISA like Alpha or PPC or MIPS. And if you are doing them, the x86 instruction set suddenly becomes much less of a problem. There are even advantages: the code size on x86 tends to be better than a 32-bits-per-instruction architecture.
Instruction sets are languages with exact meanings. Which means that you can precisely translate from one instruction set to another. And, as it turns out, you can do it fairly easily and efficiently. Which is why Transmeta did pretty well. Which is why Apple's rosetta and Java JIT compilers work (and Alpha FX32 before that). Which is why AMD and Intel are right there at the top of the performance curve with x86-style instruction sets, because it JUST DOESN'T MATTER THAT MUCH.
Why didn't Transmeta kick more butt? Because they didn't have the economies of scale that AMD and Intel have. Because they didn't have the design resources that AMD and intel have. Because AMD and Intel had better-tuned processes faster than TSMC or whoever was fabbing Transmeta's chips. THOSE are the most important things, not the instruction set that you have on disk.
Now a good ISA can help in many ways: SIMD instructions really help to point out data level parallelism. More registers helps a wee bit to prevent unnecessary work done around the stack for correctness. You can get rid of a bit of logic if you can execute without translation. But these things can either be added to x86 (SSE/x86-64) or aren't expensive enough to be worth it on a 100 sq mm, >50W processor. Maybe in an embedded, low-power processor.
If you know DSP, are adept with fixed point arithmetic, know a bunch of fun tricks,
can schedule well... there are many people who would like to hire you. Including the group I work in.
Simply, compilers cannot produce code of the same quality that great hand coders can produce code, especially for complex embedded
devices like DSPs. But it's not enough to know how to write assembly, you need to know all the tricks the compiler knows, all the
tricks you can play with the algorithm, and all the ways in which you can tinker with the code to fit it nicely into the architecture.
Those things are still highly valueable; people need to get really optimized code for their media players. If you can squeeze 20% out of your MP3 decoder, you can get 20% lower energy usage on your programmable logic.
My driving skills have improved since doing all the training that Gran Turismo makes you do.
I can drive faster, but also much better, and I'm much more aware of what my car is and is not capable of.
Of course, I recognize that my car and the roads are more variable and probably less ideal than most of the simulations,
and the ramifications of mistakes are much higher. So I leave bigger margins. I guess other people maybe don't have that
viewpoint. Maybe they would have been reckless drivers anyway.
The problem with Linux -- or the difficulty for the average user -- is typically not so much the user experience, but administration.
As it turns out, this is the same problem people tend to have with Windows.
At Red Hat, everyone uses Linux. Even the secretaries. Several internet cafes use linux. My mom uses linux, and she's not computer
savvy at all.
In all these cases, the "average user" doesn't have to administrate linux, just use it for normal tasks. What does my mom
do with it? Web browsing -- firefox. Email -- kmail. Tetris and freecell. Recently she's started to use Openoffice. But it is all
set up for her, and if she ever has a problem I can log in from 1000 miles away and investigate, even over her dialup modem. And typically
there are problems every 2-3 months, and the problem is typically "I can't find a file I saved" or "I can't send email" (problem with the
ISP's SMTP server).
I set her up with Linux because her Windows computer got infested with viruses and spyware. My mom doesn't have the expertise to fix that.
I can't fix that remotely, and to my knowledge the only sure solution is "reformat and reinstall" anyway. Windows Reinstalls from media
are very hard for the common user... you have to hunt down all the original disks and drivers. Some you can find on line (assuming Windows
could find your method of internet connection), assuming that the company that made your Aureal Vortex sound card is still around. And if you're
missing something -- because of the spring cleaning or move or divorce or "maybe it was thrown away" -- you're SOL, go buy another copy of Windows.
It's so hard for the average user to administrate Windows, there are entire studies of whether it's better to try and remove viruses, or just
buy a new computer. There are corporate projects making huge amounts of money administrating windows machines for people -- look at how much
the Fry's service center costs, or the "Geek Squad" at best buy.
Windows is probably easier on average to administrate than Linux. Mainly because it comes pre-installed and pre-configured so that everything
works (hopefully) from the factory you got the machine from. If you have to add hardware, some of the difficulty most people would find with Linux
is probably cancelled out by the difficulties with infections so many people have with Windows.
But going back to the main point, I think both a decently set up Linux -- say, booting into KDE -- and a decently set up Windows are of
similar difficulty of use for the average person. The difficulties in both places tend to be administration, not use. And windows
tends to have the advantage because it comes pre-installed.
New instructions (LZCNT, POPCNT, EXTRQ/INSERTQ, MOVNTSD/MOVNTSS)
Interesting!
I can't find much information on it, but I'm guessing "LZCNT" is count-leading-zeros. This is like "find-first-one" from the other direction. It's very useful for things like finding the magnitude of an unsigned numbers. It's used quite often on architectures without FPUs (like ARM) in floating point routines for renormalization. I guess it could also be useful if you are having to do floating point emulation for numbers with enourmous precision.
I guess if you have "BSR" then LZCNT = -BSR
POPCNT is probably population count, the number of 1s in a value.
Both LZCNT and POPCNT are instructions that are a pain to do in software if you lack the instruction in the hardware, and they are relatively cheap (especially if you have BSF/BSR already).
I'm still a bit suprised that there aren't a few more of these bit-banging instructions in x86, like bit interleave/deinterleave and bit reverse. Modern processors are doing enough signal processing work that one would think you'd thow the tools in the bucket, as cheap as they are. I guess lookup tables are good enough.
What's the over/under for which SSE revision will add a galois field multiplier? 7? 8?
But seriously, the dual ported caches are probably the best improvement for most people. You can't be too rich, too thin, or have too much memory bandwitdth.
It looks like AMD has done the same thing Intel did with "Core 2"... just take a good architecture and keep making improvements... more issue width, more memory bandwidth, more flexibility in scheduling. Every bit counts.
I think we're getting to a similar point in modern CPU microarchitectures to where we are in some other industries, where drastic improvements are much more rare and it all comes down to really great implementation... like making engines. There are some innovative ideas for engines, and certainly a lot of people experiment, but really the best designs are just really well balanced and tuned. (although more cylinders is usually a good thing for horsepower).
calculus before that, by people who thought they were doing pure sciences.
Bull. Calculus was invented along with models for elementary physics. Everyone who cares about projectiles in warfare cares about elementary physics. The applications were plain then, in the same way that applications for semiconductor device physics discoveries are plain now.
Sorry for the incredibly bad form of responding to myself; however the nutshell version is "both"... you need to be able to create ideas and use your resources to implement them.
Or put another way, submitter is falsely saying that you can learn how to think XOR how to implement things.
Is introductory classes that fuse ideas (Algorithms, Data Structures, Memory Allocation, Signal Processing) with specific languages (say -- lisp, Java, C, and Matlab).
Then, once you get into upper level classes, you use those tools that you've acquired -- from classes or from elsewhere -- to accomplish tasks.
At least, from what I've seen. Who's taken a design class and been told what language they must write in? Unless you're forced to use an existing tool (ie, you MUST do your Computer Architecture work by extending simplescalar) or limited by the architecture (you can only choose between C and Assembly on most microcontrollers).
When I took my computer architecture class, we did trace-driven pipeline and cache models. I did mine in python; I was familiar with it from friends and I enjoyed using it. (I still do.) Other people used languages like Perl and Java, because that is what they were familiar with.
When I took video game design & programming, my group used Java for the client and C for the server. Other groups used tools like Visual Somethingorother or the Unreal engine (which was state of the art at the time). They chose tools that got them the product they wanted in the time they had. The team that wanted to do a "FPS Ultimate Frisbee" had great success with the Unreal engine. We had great success doing a multiplayer 2D board game using Java for the clients and C for the server. Partly because we were familiar with the tools and didn't have to fight them. Similarly, the person using Visual Studio wanted to make a DirectX game... and that was the right tool for the job. Writing a FPS from scratch in Java was clearly not the right option, nor was writing a 2D board game in the unreal engine. But the point was classical engineering of the kind that is most useful: given a set of resources (10 weeks in the quarter, a few University students with other classes, and only so many tools in the bucket), come up with a feasible idea and implement it.
Other schools have "computer science" programs where you learn linked lists and C++ pretty far along in your schooling (Junior year?), and you rarely (if ever) get free enough to design projects from the start. The difference is one of philosophy: using whatever tools available to accomplish the task you want to do, versus knowing tools to make things that someone else has mostly planned out.
It takes some of both kinds of people to make the world go around.
Most skilled trades (law, medicine) have secondary post-college programs entirely on top of arbitrary undergraduate degrees. It's a shame in a way that engineering gets crammed in with everything else; I think the secondary programs confer more respect on the people that go through them -- and a higher salary. If you had to get a Degree of Engineering on top of your undergraduate degree of choice, maybe engineers would have the respect they (IMNSHO) deserve.
It's called :vsplit. Twice the number of rows!
On the other hand, people should know that if their web page is not available to a group of people, then those people will not get the benefit of the web page. In addition, there is a market for folks to create (and sell, if they so choose) products that help people who have problems get around in society. Thus, wheelchairs and hearing aids and braille and such. It's always been this way.
To say that everyone must be included in the class of users makes no sense; do you have to make music accessible to the deaf, or visual art available to the blind? Of course not. Should you have to change your personal web page that you use to post pictures for your friends and family to make it more friendly to some disabled user you don't know? Of course not.
Maybe it's because it's harder to get a government-funded monopoly if you push forward in directional high-speed wireless for backbone links?
OK, sure, there are reliability problems with wireless, but in most of the USA you could set up a huge network using relays on existing cell towers. Shoot, cell towers already use directional high-data-rate wireless links to communicate with each other. And there are reliability problems with fiber, too... it's harder to drive a backhoe through a wireless link...
I have a better idea: how about we let rising fuel prices dictate what gets built? If rail is so much more efficient than air travel, then when JP1 is 20USD/gal we should see trains become more economical naturally, right?
But for right now, Amtrak (which IS subsidized) takes 61 hours from NY-LA, and it's almost the same price to fly round-trip as it is to rail one way. So maybe the airlines are doing an OK job?
The US is NOT EUROPE! We have a much larger land area. This makes a difference in how people want to get around.
Was this about the time when we had cachedot.slashdot.org? I remember it was updated about once an hour and was infinitely faster than the "real" slashdot page.
That, and I seem to remember a flaming political rant from Hemos.
I will grant to you that my reminiscing was perhaps not the most informative comment, however as a comment to a reminiscent article I don't feel it is out-of-place.
If slashdot hid userids, I would not alter how I comment at all.
Do you think your profanity-laden post counts as a contribution? Your complaints that people who have been here longer are respected -- have you considered that perhaps the people who have been visiting technology forums for ten years are perhaps the best-informed and most interested in technology?
Maybe I'm not the stupid one. Certainly not stupid enough to get very upset about an Anonymous Coward. AC's have usually had little to contribute, even from the very beginning.
I, too, started reading slashdot whilst doing phone tech support, the summer before and Christmas break of my Freshman year at College.
Before the signal-to-noise ratio was so low, before ads, before the need for accounts...
It was a simpler, friendlier time.
Sniff.
But there are no announcements hinting at such a thing, therefore I believe we should conclude that these are binned parts until we see such evidence.
You don't make floorplans that aren't rectangular... what would they do with the extra space?
And why should ``symmetric'' imply even? It merely implies that all cores see memory with the same class of service. And, in reality, aren't most AMD multiprocessors cc-NUMA machines, not SMP?
For most workloads, if they are fairly multithreadable, 3 processors available will be just fine. I know of very few workloads that require an even number of processors, and even if it were the case that the task were split into an even number of threads, the OS should have no problem scheduling on a reduced number of processors.
Hey, doesn't the XBox 360 have a 3-core PPC in it?
Looks like there isn't a whole lot there that you couldn't get using existing performance counters and a tool like oprofile....
You look like you're new around here, so I'll try to be polite. Having used both UNIX[0] tools and DOS ones, the UNIX tools are far superior. They are different, but you would likely find the DOS ones more opaque if you had learned the UNIX ones first. If you are not "computer savvy" enough to learn how to use effective tools, then I'm sorry.
ls and find are different utilities, and should be used for the appropriate task. An OS is not like a car. It is like a kitchen or a workshop -- it contains tools to let you create things. Conventional ovens, microwaves, cooktops, broilers, toasters, griddles, torches... they all heat food. But having the right tool for the job allows you to create the things you are trying to create.
ls pretty-prints directory contents.
find finds files according to criteria and sends them to stdout, primarily for scripting.
locate checks a global file archive (locatedb) for filenames across the system.
You were getting error messages because you told find to search down directories you didn't have permission to look at. If you know this and don't want to see the warnings, you can redirect stderr.
Filename globbing is handled by the shell in Unix. Glob matches are expanded for the arguments to the program. This can be useful and dangerous.
The UNIX tools have been honed over time by many, many smart people. You don't walk into a gourmet kitchen and ask why they need more than a microwave and a bowl for ramen noodles. The chef knows that having the right tool is essential. And you don't go into UNIX asking why they don't use DIR like DOS.
You do have to learn new habits. You have to learn how to read man pages. You have to understand how UNIX works. But once you realize the delicious concoctions you can create with ease in your UNIX kitchen, you will find yourself frustrated when you go to your friend's house, who just has a microwave and a bowl for ramen noodles.
I don't know how I could use a computer effectively without: bash vim egrep sed awk cut find ssh basename make mutt. I use Windows often at work, but I typically have two fullscreen RXVT's with cygwin or ssh'd to a linux box. I miss copy-on-select-middle-click-paste.
You don't have to use vim. Emacs is fine too, though I don't prefer it. You don't have to use bash. Zsh is fine too, though I don't prefer it. You don't have to use mutt. You don't have to use the effective tool I like, if you have an effective tool that suits you. I often prefer a high-temperature silicone spatula to a wooden spoon, even though both would work. But I believe you can't effectively use notepad or "edit" as a text editor... although ed has his place. :-)
Unix is hard to learn. But it is easy to use. Far easier than DOS. But you have to learn it first. The steeper the learning curve, the bigger the payoff. In the windows world, it's a pain to have to learn vbscript, but there's no other automated way (at least that I know of) to have visio open 1000 visio diagrams and convert them to a different format. Once you know a powerful tool, you have the ability to do things that were nearly impossible before. And having powerful tools that can be combined together is what UNIX is all about.
I realize some of this might be personal preference. I hate VMS. A "Create" command (in my opinion) should not create text files and terminal windows. It didn't feel right to me. It never did, even after a summer of using it fairly effectively. But I understand that some people prefer VMS to UNIX. And that's OK, as long as you have powerful tools that do the things you need to do.
Anyway, back to work.
[0] I will use UNIX here to mean all UNIX-like systems... UNIX, Linux, BSD, GNU, cygwin, whatever you want to call these utilities.
And it's true. You build a sea of ALUs and you sic some folks on hand coding all sorts of things to the machine, and you end up with some spectacular results.
The problem is that we still can't get a compiler to do a good job at it, for the most part. We thought we could, and we threw every bell and whistle into IA64
for a compiler-controlled architecture, and you've seen what we've ended up with. Many years later, the situation is still pretty much the same: the compiler
can't do all that great of a job with these sorts of machines.
Don't get me wrong, there are lots of good ideas in TRIPS or any of the various other academic projects like it, but I'm yet to be convinced that it's useful in
any kind of real codebase that's not coded by hand by an army of graudate students. For some tasks, that's an acceptable model -- It's been the model in the world of
signal processing for quite a while (though becoming less so daily) -- but for most mainstream applications it just won't fly.
That, and it's hard for compilers to have knowledge about history. It's terribly important for optimization, and it's just hard to get into the compiler (though relatively
easy to get into a branch predictor).
The Instruction Set of a processor architecture with so many resources available to it doesn't really matter, so long as it isn't utterly and completely braindead. X86 isn't braindead enough to qualify... if you had an intercal instruction set or an One Instruction Set Computer it might.
You really want to do several things to get performance out of an instruction stream -- register renaming, instruction manipulation (breaking them apart or joining them together or changing them into other instructions), elimination of some bad instruction choices, and a host of other things. You would want to do these things even on a "clean" ISA like Alpha or PPC or MIPS. And if you are doing them, the x86 instruction set suddenly becomes much less of a problem. There are even advantages: the code size on x86 tends to be better than a 32-bits-per-instruction architecture.
Instruction sets are languages with exact meanings. Which means that you can precisely translate from one instruction set to another. And, as it turns out, you can do it fairly easily and efficiently. Which is why Transmeta did pretty well. Which is why Apple's rosetta and Java JIT compilers work (and Alpha FX32 before that). Which is why AMD and Intel are right there at the top of the performance curve with x86-style instruction sets, because it JUST DOESN'T MATTER THAT MUCH.
Why didn't Transmeta kick more butt? Because they didn't have the economies of scale that AMD and Intel have. Because they didn't have the design resources that AMD and intel have. Because AMD and Intel had better-tuned processes faster than TSMC or whoever was fabbing Transmeta's chips. THOSE are the most important things, not the instruction set that you have on disk.
Now a good ISA can help in many ways: SIMD instructions really help to point out data level parallelism. More registers helps a wee bit to prevent unnecessary work done around the stack for correctness. You can get rid of a bit of logic if you can execute without translation. But these things can either be added to x86 (SSE/x86-64) or aren't expensive enough to be worth it on a 100 sq mm, >50W processor. Maybe in an embedded, low-power processor.
I work for a communications/semiconductor company.
If you know DSP, are adept with fixed point arithmetic, know a bunch of fun tricks, can schedule well... there are many people who would like to hire you. Including the group I work in.
Simply, compilers cannot produce code of the same quality that great hand coders can produce code, especially for complex embedded devices like DSPs. But it's not enough to know how to write assembly, you need to know all the tricks the compiler knows, all the tricks you can play with the algorithm, and all the ways in which you can tinker with the code to fit it nicely into the architecture.
Those things are still highly valueable; people need to get really optimized code for their media players. If you can squeeze 20% out of your MP3 decoder, you can get 20% lower energy usage on your programmable logic.
I can drive faster, but also much better, and I'm much more aware of what my car is and is not capable of.
Of course, I recognize that my car and the roads are more variable and probably less ideal than most of the simulations, and the ramifications of mistakes are much higher. So I leave bigger margins. I guess other people maybe don't have that viewpoint. Maybe they would have been reckless drivers anyway.
According to www.secretlab.ca, it is a consulting company.
At Red Hat, everyone uses Linux. Even the secretaries. Several internet cafes use linux. My mom uses linux, and she's not computer savvy at all.
In all these cases, the "average user" doesn't have to administrate linux, just use it for normal tasks. What does my mom do with it? Web browsing -- firefox. Email -- kmail. Tetris and freecell. Recently she's started to use Openoffice. But it is all set up for her, and if she ever has a problem I can log in from 1000 miles away and investigate, even over her dialup modem. And typically there are problems every 2-3 months, and the problem is typically "I can't find a file I saved" or "I can't send email" (problem with the ISP's SMTP server).
I set her up with Linux because her Windows computer got infested with viruses and spyware. My mom doesn't have the expertise to fix that. I can't fix that remotely, and to my knowledge the only sure solution is "reformat and reinstall" anyway. Windows Reinstalls from media are very hard for the common user... you have to hunt down all the original disks and drivers. Some you can find on line (assuming Windows could find your method of internet connection), assuming that the company that made your Aureal Vortex sound card is still around. And if you're missing something -- because of the spring cleaning or move or divorce or "maybe it was thrown away" -- you're SOL, go buy another copy of Windows.
It's so hard for the average user to administrate Windows, there are entire studies of whether it's better to try and remove viruses, or just buy a new computer. There are corporate projects making huge amounts of money administrating windows machines for people -- look at how much the Fry's service center costs, or the "Geek Squad" at best buy.
Windows is probably easier on average to administrate than Linux. Mainly because it comes pre-installed and pre-configured so that everything works (hopefully) from the factory you got the machine from. If you have to add hardware, some of the difficulty most people would find with Linux is probably cancelled out by the difficulties with infections so many people have with Windows.
But going back to the main point, I think both a decently set up Linux -- say, booting into KDE -- and a decently set up Windows are of similar difficulty of use for the average person. The difficulties in both places tend to be administration, not use. And windows tends to have the advantage because it comes pre-installed.
Interesting!
I can't find much information on it, but I'm guessing "LZCNT" is count-leading-zeros. This is like "find-first-one" from the other direction. It's very useful for things like finding the magnitude of an unsigned numbers. It's used quite often on architectures without FPUs (like ARM) in floating point routines for renormalization. I guess it could also be useful if you are having to do floating point emulation for numbers with enourmous precision.
I guess if you have "BSR" then LZCNT = -BSR
POPCNT is probably population count, the number of 1s in a value.
Both LZCNT and POPCNT are instructions that are a pain to do in software if you lack the instruction in the hardware, and they are relatively cheap (especially if you have BSF/BSR already).
I'm still a bit suprised that there aren't a few more of these bit-banging instructions in x86, like bit interleave/deinterleave and bit reverse. Modern processors are doing enough signal processing work that one would think you'd thow the tools in the bucket, as cheap as they are. I guess lookup tables are good enough.
What's the over/under for which SSE revision will add a galois field multiplier? 7? 8?
But seriously, the dual ported caches are probably the best improvement for most people. You can't be too rich, too thin, or have too much memory bandwitdth.
It looks like AMD has done the same thing Intel did with "Core 2"... just take a good architecture and keep making improvements... more issue width, more memory bandwidth, more flexibility in scheduling. Every bit counts.
I think we're getting to a similar point in modern CPU microarchitectures to where we are in some other industries, where drastic improvements are much more rare and it all comes down to really great implementation... like making engines. There are some innovative ideas for engines, and certainly a lot of people experiment, but really the best designs are just really well balanced and tuned. (although more cylinders is usually a good thing for horsepower).
Bull. Calculus was invented along with models for elementary physics. Everyone who cares about projectiles in warfare cares about elementary physics. The applications were plain then, in the same way that applications for semiconductor device physics discoveries are plain now.
Or put another way, submitter is falsely saying that you can learn how to think XOR how to implement things.
Then, once you get into upper level classes, you use those tools that you've acquired -- from classes or from elsewhere -- to accomplish tasks.
At least, from what I've seen. Who's taken a design class and been told what language they must write in? Unless you're forced to use an existing tool (ie, you MUST do your Computer Architecture work by extending simplescalar) or limited by the architecture (you can only choose between C and Assembly on most microcontrollers).
When I took my computer architecture class, we did trace-driven pipeline and cache models. I did mine in python; I was familiar with it from friends and I enjoyed using it. (I still do.) Other people used languages like Perl and Java, because that is what they were familiar with.
When I took video game design & programming, my group used Java for the client and C for the server. Other groups used tools like Visual Somethingorother or the Unreal engine (which was state of the art at the time). They chose tools that got them the product they wanted in the time they had. The team that wanted to do a "FPS Ultimate Frisbee" had great success with the Unreal engine. We had great success doing a multiplayer 2D board game using Java for the clients and C for the server. Partly because we were familiar with the tools and didn't have to fight them. Similarly, the person using Visual Studio wanted to make a DirectX game... and that was the right tool for the job. Writing a FPS from scratch in Java was clearly not the right option, nor was writing a 2D board game in the unreal engine. But the point was classical engineering of the kind that is most useful: given a set of resources (10 weeks in the quarter, a few University students with other classes, and only so many tools in the bucket), come up with a feasible idea and implement it.
Other schools have "computer science" programs where you learn linked lists and C++ pretty far along in your schooling (Junior year?), and you rarely (if ever) get free enough to design projects from the start. The difference is one of philosophy: using whatever tools available to accomplish the task you want to do, versus knowing tools to make things that someone else has mostly planned out.
It takes some of both kinds of people to make the world go around.
Most skilled trades (law, medicine) have secondary post-college programs entirely on top of arbitrary undergraduate degrees. It's a shame in a way that engineering gets crammed in with everything else; I think the secondary programs confer more respect on the people that go through them -- and a higher salary. If you had to get a Degree of Engineering on top of your undergraduate degree of choice, maybe engineers would have the respect they (IMNSHO) deserve.