Slashdot Mirror


IBM's Chief Architect Says Software is at Dead End

j2xs writes "In an InformationWeek article entitled 'Where's the Software to Catch Up to Multicore Computing?' the Chief Architect at IBM gives some fairly compelling reasons why your favorite software will soon be rendered deadly slow because of new hardware architectures. Software, she says, just doesn't understand how to do work in parallel to take advantage of 16, 64, 128 cores on new processors. Intel just stated in an SD Times article that 100% of its server processors will be multicore by end of 2007. We will never, ever return to single processor computers. Architect Catherine Crawford goes on to discuss some of the ways developers can harness the 'tiny supercomputers' we'll all have soon, and some of the applications we can apply this brute force to."

61 of 334 comments (clear)

  1. Clearing things up a bit by AKAImBatman · · Score: 5, Insightful

    In an InformationWeek article entitled 'Where's the Software to Catch Up to Multicore Computing?' the Chief Architect at IBM gives some fairly compelling reasons why your favorite software will soon be rendered deadly slow because of new hardware architectures.
    *THUNK*

    owww... my head...

    There are a couple of serious problems with this statement. The most important one is that the article doesn't say that existing software will get slower. And there's a reason for that: Existing software will continue to run on the individual processor cores. Something that they've done for a long period of time. Old software may not get any faster due to a change in focus toward parallelism vs. increased core speed, but it's not going to suddenly come to a screeching halt any more than my DOS programs from 15 years ago are.

    Secondly, multicore systems are not a problem. Software (especially server software!) has been written around multi-processing capabilities for a long time now. Chucking more cores into a single chip won't change that situation. So my J2EE server will happily scale on IBM's latest multicore Xenon PowerPC 64 processor.

    Finally, what the article is really talking about is the difficulties in programming for the Cell architecture. Cell is, in effect, and entire supercomputer architecture shrunk to a single microprocessor. It has one PowerPC core that can do some heavy lifting, but its design counts on the programmers to code in 90%+ SIMD instructions to get the absolute fastest performance. By that, I mean that you need to write software that does the same transformation simultaneously across reasonably large datasets. (A simplification, but close enough for purposes of discussion.) What this means is that the Cell processor is the ultimate in Digital Signal Processor, achieving incredible thoroughput as long as the dataset is conductive to SIMD processing.

    The "problem" the article refers to is that most programs are not targetted toward massive SIMD architectures. Which means that Cell is just a pretty piece of silicon to most customers. Articles like this are trying to change that by convincing customers that they'd be better served by targetting Cell rather than a more general purpose architecture.

    With that out of the way, here's my opinion: The Cell Broadband Architecture is a specialized microprocessor that is perpendicular to the general market's needs. It has a lot of potential uses in more specialized applications (many of which are mentioned in the article), but I don't think that companies are ready to throw away their investment in Java, .NET, and PHP server systems. (Especially since they just finished divorcing themselves from specific chip architectures!) Architectures like the SPARC T1 and IBM's multicore POWER/PowerPC chips are the more logical path as they introduce parallelism that is highly compatible with existing software systems. The Cell will live on, but it will create new markets where its inexpensive supercomputing power will open new doors for data analysis and real-time processing.
    1. Re:Clearing things up a bit by Red+Flayer · · Score: 5, Insightful

      The "problem" the article refers to is that most programs are not targetted toward massive SIMD architectures. Which means that Cell is just a pretty piece of silicon to most customers. Articles like this are trying to change that by convincing customers that they'd be better served by targetting Cell rather than a more general purpose architecture.

      In other words, a spokesperson from $COMPANY is trying to convince the market that they'll soon need to use $PRODUCT if they want best results, conveniently which is sold by the $COMPANY?

      Imagine that.

      Sorry, cynical today.
      --
      "Trolls they were, but filled with the evil will of their master: a fell race..." -- J.R.R. Tolkien on Olog-hai
    2. Re:Clearing things up a bit by xtracto · · Score: 2, Informative

      (many of which are mentioned in the article), but I don't think that companies are ready to throw away their investment in Java, .NET, and PHP server systems. .

      The Cell will live on, but it will create new markets where its inexpensive supercomputing power will open new doors for data analysis and real-time processing..

      I just wanted to quote these two sentences you said relevant to my comment. The problem with multicore computing power is not in the software developers but in the available tools. The problem with having say, 60 cores able to run in parallel is that our computation methods (turing based machine computation) are based on the basic "serial algorithm". The main problem resides in the programming languages. As far as I know (although I am *sure* I must be wrong) all the "major" available programming languages are based on this paradigm and they only provide "some functionality" for parallel processing. What we need are compilers and (more importantly and difficult to come up with I think) languages with which
      we can create programs that are inherently parallel.

      --
      Ubuntu is an African word meaning 'I can't configure Debian'
    3. Re:Clearing things up a bit by markov_chain · · Score: 2, Insightful

      Most apps won't benefit; after all, most apps barely use any CPU at all.

      Things like audio/photo processing could benefit a lot, though. I imagine all you would need is a worker-thread design pattern, and let the OS do the rest.

      --
      Tsunami -- You can't bring a good wave down!
    4. Re:Clearing things up a bit by AKAImBatman · · Score: 2, Informative

      he problem with multicore computing power is not in the software developers but in the available tools. The problem with having say, 60 cores able to run in parallel is that our computation methods (turing based machine computation) are based on the basic "serial algorithm".
      I think you're misunderstanding the subject here. The Cell Processor is designed for chewing through massive data sets at an unprecidented rate. It has almost nothing to do with multiprocessing, and everything to do with fast transformations and data analysis.

      Take 3D programming as an example. Before I can render the screen, I have to run thousands of vertices through a matrix transformation so that they align with where the camera sees them. This is a bulk operation that can be run in parallel by multiple SIMD cores (each tranforming 2-4 vertices per instruction) by simply providing each core with a copy of the computational matrix. Simple, straightforward, and FAST. But utterly useless for general purpose code like multithreaded web servers.

      So the problem is not a lack of tools. The problem is that the Cell is a specialized architecture that's very different from traditional multiprocessing. It's designed for long number-crunching applications that have traditionally been the forte of supercomputers. Ergo, it is a supercomputer on a chip.
    5. Re:Clearing things up a bit by adam31 · · Score: 5, Informative
      but its design counts on the programmers to code in 90%+ SIMD instructions to get the absolute fastest performance.


      This is an often-repeated misconception. Cell abandons the practice of having different fp, integer, and vector registers... all registers are 128-bit and any instruction can be issued on any of them, and those instructions are generated by a C++ compiler. So saying that programmers code in these SIMD instructions is like saying that "x86's design counts on programmers to shuffle values between the fp stack, integer and vector registers, and code in separate fp, integer, and vector instructions to get the absolute fastest performance".

      The reality is that Cell was targeted more at solving the memory problem than just doing SIMD stream processing. Engineers looked around and decided a 32kb L1 cache was silly... not having a cache-snooping DMA engine (or prefetch engine) would be silly. Putting nine cores on a bus with 7 GB/s bandwidth would be silly. Not being able to overlap memory latency with execution is silly. To solve all these problems, you give up having a single coherent address space.

      But there is even more power in Java, .NET investments now... It is completely within the realm of possibility to write a runtime that executes your Java thread on SPU, or JITs the .NET to SPU code. It's a nice benefit that these are already handle-based rather than pointer based languages, so the memory-mapping is a task of the runtime and transparent to the code. And IBM is working hard on native C++ code generation that is agnostic of the address space problem.

    6. Re:Clearing things up a bit by TheRaven64 · · Score: 4, Insightful

      The problem with having say, 60 cores able to run in parallel is that our computation methods (turing based machine computation) are based on the basic "serial algorithm"

      We've had theoretical foundations for parallel processing back since Turing (see non-deterministic Turing Machine) and rigourous theoretical frameworks such as ?-calculus and CSP for decades. We even have languages like some Haskell dialects and Erlang that are built using these as foundations.

      If you choose to use languages designed for a PDP-11, that's up to you, but the rest of us are quite happy writing code for 64+ processors in languages designed for parallelism.

      --
      I am TheRaven on Soylent News
    7. Re:Clearing things up a bit by rifter · · Score: 2, Insightful

      With any language I'm aware of you just have to implement it.

      But there's the rub ... technically you can implement anything you want. Heck, you can do it in assembler! But do people do it and do they do it right? How much extra time and energy does it cost you and how difficult is the task? Why did database application developers care whether the database inherently supported transactions when they could just implement it in the application? Why did anyone care about Java's garbage collector when it can be (and was) implemented in C++? Why did people care about the C++ support for object orientation (or Java's enforcement of such) when you could implement such support yourself in C? Why does anyone use or care about GDI objects, GUI widgets, GUI APIs, and such when they can just write a program that draws stuff on the screen and implement that too? Why do we care that there are libraries providing threading functions, etc?

      The point is that abstraction layers, libraries, frameworks, object classes, etc exist specifically to provide functionality that is needed on a broad basis with an interface that is meant to be intuitive and usable for developers writing code within a given platform or context. The hope, too, is, that they might enforce certain policies and methodologies and provide more optimal implementations as well as an easier means of correcting any problems down the road. (If I have 1000 apps, each implementing some functionality a certain way, and a bug shows up that affects all or a chunk of them, I have to update them all. If these 1000 apps call on a library that implements that function and a similar bug is found, I can just update that library, in theory).

    8. Re:Clearing things up a bit by Lazerf4rt · · Score: 3, Interesting

      TFA is nothing more than a press release announcing the plan to develop a supercomputer in Los Alamos, New Mexico. Yeah, it'll be made by IBM and based on Cell (and Opteron). In an attempt to make it more interesting, the article seems to struggle to make another point... and the point is difficult to discern from its river of vague generalities, lame statistics and other banalities. Best I can fathom is that the writer (IBM's chief architect) simply hopes that new, multicore-centered development tools will somehow emerge as a result of the computer's development:

      We are inviting industry partners to define the components (APIs, tools, etc.) of the programming methodology so that the multicore systems are accessible to those partners as well.

      Fair enough. The Slashdot summary is a horrible spin on TFA, and the attached "-dept." tagline attached is just embarassing. Too bad there wasn't more information content here, because multicore processing is indeed the future, and this could have been a much more interesting read.

    9. Re:Clearing things up a bit by cmacb · · Score: 2, Insightful

      So many misconceptions, so little time...

      I'm not sure if anyone above read past the third paragraph, but I see no evidence of it.

      Noteworthy in the article was a combining of conventional X86 technology and Cell technology along with some state of the art memory management. (I'm not employed by or invested in any of the companies involved, just reporting the facts mam).

      For the average user there is NO downside to multi core technology, so any statement to the contrary (in the article summary in this case, not the article itself) gets me worked up.

      If you don't have a multi-core machine, go into your local superstore and start up the Windows Task Manager and watch the little graphs on the two (or more) processors as you open programs etc. See, both processors are being kept busy doing things in the background? Modern bloat-ware OSs have plenty of stuff that can be done in the background as you type up your little office party announcement. The "average" user can even benefit by being able to keep multiple programs running at the same time, doing a big complex document reformat, syncing your palm device, downloading the latest virus update, and so on. The OSs have been pretty good at multitasking for some time now, and while 16 or 32 processors are probably overkill, it is simply wrong to say there is no benefit and REALLY wrong to imply that there is some sort of disadvantage to multi-core processors (or even multiple single core processors) in almost ANY modern use of a computer. Beyond having multiple processors, advances are being made in controlling shared memory and I?O devices so those processors don't end up stepping on each others toes. What is finally happening is the "commodity" PC is beginning to look like a mainframe of the 70s (and earlier, which had separate devices for memory and I/O management) which the OS, not the application programmer, could use to very great effect. So THERE.

      Microsoft has been doing some "interesting" work in using the multiple processors in some graphics cards to do floating point calculations in the background and getting orders of magnitude faster restult with some (specialized) applications. Of course the better way is to leave the graphics card alone to accelerate graphics (presumably thats why you paid big bucks for it) and build the basic PC to handle all these parallel tasks (not just spreadsheet recalcs, but ordinary I/O and memory management) more efficiently. Based on this article, sounds like the scientific community will be seeing such systems in the near future, and us ordinary desktop users will probably start benefiting from it (or some Dell/Apple/Intel/etc variation in a few years.) It's great news.

      Yes, this is a sales piece. Just like yesterdays "announcement" of the upcoming 45nm processors was a (gigantic) sales piece coordinated to show up here there and everywhere with pre-taped videos, Scoble blog DRAHMA meltdowns and more pictures of bunny suits than we've seen in ten years. How much actual "news" was there in the Intel/IBM announcments? Not a lot as I think they (and AMD, and IBM) have been hawking this change for almost a year now. Yesterday we learned about "Hafnium", or at least that aspect of it was news to me, and in all these product announcements, even when there isn't MUCH news, there are often tidbits that make it interesting. There is no reason to be complaining about the article, at least until it has been duped half a dozen times or so (and it probably will be.)

  2. That's ridiculous. by The-Bus · · Score: 5, Funny

    I see no need for why we would ever need anything more than 640 cores per processor in the future.

    --

    Small potatoes make the steak look bigger.

  3. But Developers do? by Ckwop · · Score: 3, Insightful

    Software, she says, just doesn't understand how to do work in parallel to take advantage of 16, 64, 128 cores on new processors.

    But the developers do? When these processors become prevelant, people will design their software to utilise the parallel processing capability. What am I missing here?

    Simon

    1. Re:But Developers do? by theStorminMormon · · Score: 3, Interesting

      How does current virtualization software fare with multi-core architecture? I mean, if the hype is even somewhat believed even SMBs will be able to afford off-the-shelf "supercomputers". Of course relative to the real super-computers, these machines will be slow. But relative to actual requirements, they should be, well, supercomputers.

      Suddenly the old "everyone's moving to thin-clients/mainframes/dumb terminals/etc" story (as recently as today: http://it.slashdot.org/article.pl?sid=07/01/30/134 0210 ) becomes interesting again. If virtualization software works, then we don't need to wait for a golden age of multi-threaded software development. SMBs (and large companies too) will be able to deploy dumb terminals linked to multi-core monsters, install virtualization software to get as many servers as they need, offload individual instances of programs to the various cores as is natural, and viola: now you can actually realize all those TOC savings the thin client crowd has been raving about all these years.

      This transition to multi-core is what we need because, as far as I know, actually getting individual programs to run nicely on multiple cores is (with notable exceptions) something we're not really ready for yet in terms of development.

      -stormin

      --
      The Southern Baptist Convention has creationism. On Slashdot, we have porn.
  4. Yeah, if you only run one program at a time.. by ruiner13 · · Score: 5, Insightful

    What the author fails to take into account is that multi-core allows each program to effectively use a separate core to do its work, regardless of how it is programmed. All it takes is the OS to be smart enough to task each program to a free core, if available. The programs don't have to be specifically written to be multi-core aware as long as the OS is smart enough to send process to the idle cores. The programs that need more power than one core can deliver will usually have the multi-core support built in, as many games are starting to do now that the technology is taking off.

    Notice I took the high ground and didn't make the obligatory windows virus scan jokes... :)

    --

    today is spelling optional day.

    1. Re:Yeah, if you only run one program at a time.. by ArcherB · · Score: 3, Informative

      The programs don't have to be specifically written to be multi-core aware as long as the OS is smart enough to send process to the idle cores.

      While that is true of multi-core general purpose processors like the x86, but I don't think that works too well when talking about the Cell processor. The OS can't just assign a Power-PC compiled app to a SPU and expect it to run. Apps have to be specifically coded to take advantage of the SPU's on the Cell.

      --
      There is no "I disagree" mod for a reason. Flamebait, Troll, and Overrated are not substitutes.
    2. Re:Yeah, if you only run one program at a time.. by SatanicPuppy · · Score: 3, Interesting

      I keep thinking about this as well. Really, sitting down a trying to write code that runs optimally on multiple processors is a huge headache, and, frankly, judging by the code I've seen in my life, most coders aren't up to it...It would be far better to put a VM or a specialty compiler between the code and the system, one that is capable of taking regular code and making it more multi-core friendly.

      Sure it'll add overhead, but the number of cores we're going to be working with at a time is going to continue to change, and the only way to not write immediately obsolete code is to have an intermediate control layer that is smart enough to translate.

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    3. Re:Yeah, if you only run one program at a time.. by oliverthered · · Score: 3, Interesting

      And if thread management is good/fast enough then there's no reason things like GUI widgets can't run on their own thread/core. (I doubt spell checker in Firefox runs in it's own thread though)

      --
      thank God the internet isn't a human right.
    4. Re:Yeah, if you only run one program at a time.. by MysteriousPreacher · · Score: 3, Interesting

      I'm just dipping my toe in to the world of programming so bear with me if this is silly.

      Couldn't the programs inherit the benefits of a multi-core system if the APIs they call are written to distribute the work to the cores? I know this probably isn't optimal but there must be some benefits from this.

      I could take an old library (QuickDraw for example) and totally rewrite it to take advantage of a new architecture as long as it accepts the old calls and returns the expected results. This is probably an over-simplification though.

      --
      -- Using the preview button since 2005
    5. Re:Yeah, if you only run one program at a time.. by Jerf · · Score: 4, Informative

      Couldn't the programs inherit the benefits of a multi-core system if the APIs they call are written to distribute the work to the cores? I know this probably isn't optimal but there must be some benefits from this.

      In a word, no.

      The more complicated answer is "Yes, in rare cases".

      The problem is that programs written in your normal languages (C, C++, Java, C#, basically anything you've ever heard of) are totally synchronous; you can not proceed on to the next statement until the previous one completes.

      Thus, trying to parallelize something at the API is virtually worthless. I don't win anything if my "drawWindow" or "displayMPEGFrame" function flies off to another processor to do its work, if I still have to wait for it to complete before I can move on.

      (This can be helpful if you have two types of processors, so in fact 3D graphics APIs can be looked at as working just this way. But we already have that.)

      You might say, "But there are some operations that I can do that with, like loading a webpage!" We already can do that. It's called asynchronous IO; you fire your IO request, the hardware (with software assist) does its thing, and you get the results later. You might even fire off a lot of things and process them in the non-deterministic order they come back. UNIX has been doing that for about as long as it has been UNIX, via the select call.

      The easy stuff has been done. To write programs that actually fill a multi-core CPU's capacity is going to require a paradigm change. Shared-memory threading isn't looking very good (too complex for any human to correctly implement). There are several candidate paradigms, but there is no clear winner at the moment, some of them may never work, and they all have one thing in common: They look nothing like current coding practices with threads (because, as I said, that's looking pretty useless if we can't get it working in the decades we've had to play with it).

      The claims I've seen so far:

      • Erlang-style concurrency: This is a ton of little threads that communicate solely through message passing, no shared state. On the plus side, it's got a working implementation that you can use today. On the down side (and this is my personal opinion), I'm not sure you really need the "functional" part of Erlang to use it (I think you just need threads that share nothing, and if you did that in a more conventional OO language it'd be fine), and Erlang's still quite short on libraries for anything outside of its core competency of network programming.
      • Pure functional programming: Pure functional programming has the idea of no mutable state, which allows you to do certain things out-of-order automatically without fear of the system behaving non-deterministically. A lot of people are still making bold claims about this one, but I tend to agree with the papers that show the amount of implicit parallelism in real-world programs is fairly minimal; you're going to need to tell the system where the parallelism for the forseeable future.
      • Stream programming: Probably ultimately a special case of Erlang-style processes, and only useful in certain domains (like sound processing).
      • And of course, I'd be remiss to not mention the "suck it up and use threads" school of thought, but my feeling is that if programmers in general haven't gotten it right after 20 years, the claim that programmers are especially stupid becomes less plausible, and "the technology is uselessly complex in practice" must be the right answer.

      This isn't exhaustive, it's off the top of my head, and there are endless variations on each of those themes.

      If I had to lay money down, I'd go with "a language that used threadlets like Erlang and rigidly enforced no sharing, in an OO environment" winning, which does not really exist yet. (Probably the closest you get today would be Stackless Python with a manual enforcement of sending only immutables across t

    6. Re:Yeah, if you only run one program at a time.. by maxwell+demon · · Score: 2, Interesting

      But in which way are threads which don't share anything different from several processes which communicate (e.g. through sockets or through pipes)?

      --
      The Tao of math: The numbers you can count are not the real numbers.
    7. Re:Yeah, if you only run one program at a time.. by cweber · · Score: 2, Informative

      Exactly, and as it stands right now this is already happening.

      Scientific computing has gone from exhaustive and detailed simulation to exhaustive analyses of an entire parameter space with the advent of new life science branches such as Genomics, Proteomics and all the other broadly based omics-type endeavors. This means embarrassingly parallel computation at a massive scale. At my institution we keep roughly 3000 cores humming around the clock without any difficulty, largely using legacy code.

      At home I have a recording studio where the bulk of the processing is happening through plugins. Again, embarrassingly parallel workload, very easy to keep a number of cores working at 100% TODAY.

      That's just two examples, but I could mention many more, and so could many of you I'm sure. I fail to see why today's software cannot make productive use of multicore architectures. Unless we're talking productivity apps, which don't use much CPU anyway...

    8. Re:Yeah, if you only run one program at a time.. by jstott · · Score: 2, Informative

      The problem is that programs written in your normal languages (C, C++, Java, C#, basically anything you've ever heard of) are totally synchronous; you can not proceed on to the next statement until the previous one completes.

      *cough* Fortran *cough*

      Fortran has had support for this type of thing since F90 came out 15+ years ago. The language standard defines what are (and are not) asynchronous operations. For example, the WHERE()...OTHERWISE...END construct is designed to be implemented asynchronous. Dual-core is new enough that the free compilers don't implement parallel operations yet, but the support is already there with some of the commercial compilers.

      F90, it's not your Grandfather's FORTRAN...

      -JS

      --
      Vanity of vanities, all is vanity...
  5. rendered deadly slow? by Dr+Kool,+PhD · · Score: 3, Informative

    If you look at single-thread performance on Intel and AMD's dual/quad core chips, they meet or beat the best that single-core has to offer. I don't see why a multi-core system in the future will run single-thread apps any slower than right now. If anything I'd expect single-thread performance to increase incrementally as Intel and AMD are able to increase clock speeds.

    1. Re:rendered deadly slow? by Wesley+Felter · · Score: 3, Insightful

      But software bloat increases faster than single-thread performance, thus making software run slower.

  6. Yeah, but... by GillBates0 · · Score: 2, Funny

    Has Netcraft confirmed this yet?

    --
    An Indian-American Hindu committed to non-violent thought/speech/action alarmed by the global explosion of radical Islam
  7. Concurrency in software by NullProg · · Score: 4, Informative

    Herb Sutter wrote about this topic two years ago. A great read for anyone who is interested.
    http://www.gotw.ca/publications/concurrency-ddj.ht m

    Enjoy,

    --
    It's just the normal noises in here.
    1. Re:Concurrency in software by AKAImBatman · · Score: 2, Insightful

      VLC would benefit greatly from concurrent SIMD cores like the Cell Broadband Engine. Depending on the particular compression stream, the cores could be decoding multiple frames of video/audio in parallel at a much faster rate than a regular PC. Even if the particular compression stream didn't allow for multiprocessing, the SIMD design would still allow for the decompression stream to be completed in a fraction of the time it would take general purpose instructions to perform. (The exact fraction is dependent on how large the bits of data are. It could be as little as twice as fast, or it could easily be four times as fast.)

  8. Multi-cores vs. internal parallelism by BritneySP2 · · Score: 4, Informative

    IMHO, multi-cores are good for multitasking, which does not cover the whole problem of parallelism. Software (at least, in principle) _is_ ready: pure functional languages, for example, are perfectly suited for parallel processing; it is the lack of the CPUs with architectures that support internal concurrency (using a single core - as opposed to those providing support for multi-threading using multiple cores) that is the problem...

  9. Re:Compilers need to be better. by Rosco+P.+Coltrane · · Score: 2, Insightful

    Don't be silly, it's not that simple: sure you can spread processes and threads across several cores, as opposed to using just one cpu to do it all, but what distributed computing is about is arranging the code in a single thread to take advantage of the presence of several cores. It's called parallelizing code, and it's an extremely tough branch of computer sciences.

    Of course OSes can do load balancing on several cores with several processes, that's trivial... What's not is real parallel code.

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
  10. Concurrency is hard. by argent · · Score: 5, Informative

    Concurrency is a hard problem, and unexpected interactions between asynchronous events in concurrent environments has been a periodic bugbear for almost as long as computers have been interactive.

    It's what made the Amiga look less reliable than its competitors... if you only ran one native program at a time it was a lot more stable than MacOS or MS-DOS, because the OS provided a much richer set of services so applications didn't have to replicate them... but most people took advantage of the multitasking and when something crashed in the background the lack of memory protection meant the whole thing went down, and non-native software that wasn't written with multitasking in mind could produce the most entertaining crashes.

    These days we all have good protected mode multitasking operating systems, but we don't have good easy ways to distribute an application across multiple cores. Until we do, most applications are going to be written to run single-threaded and depend on the OS to use the other cores to speed up the rest of the system, both at the application level and doing things like running graphics libraries on another core.

    Until we have so many cores that the OS can't make effective use of them I don't think there's even going to be much of an attempt to make use of them for more developers. And then we're going to go through a painful period like we went through before Microsoft discovered multitasking.

    1. Re:Concurrency is hard. by texag98 · · Score: 3, Informative

      I agree... anyone who's developed multi-threaded code for an SMP has probably run into the problems of debugging asynchronous thread events. This can make debugging, which is already tedious even more tedious and time consuming.

      As the number of cores increases different algorithmic approaches will need to be pursued to get the maximum performance. Many algorithms which are great for serial processors will perform poorly on a parallel architecture.

      I think many people don't realize just yet how big of a paradigm shift multi-core really represents. Think of all the billions of lines of legacy code that exists out which was written for sequential computing. Scalability of code is also important since code written today is tomorrow's legacy code code written that isn't scalable will eventually need to be revisited.

      Multi-core will probably also require a new look at memory systems in PCs... To keep a lot of cores busy you have to feed them and that means possibly changes to the memory subsystems. It's not so bad now with so few cores on processors, but as they increase to 16, 32, etc. things start to get harder.

      In any case, multicore is here to stay and it will be exciting to see what changes come about in the next few years.

    2. Re:Concurrency is hard. by operagost · · Score: 2, Informative

      Windows 3.1, 95, and 98 didn't run in real mode either. Starting with 3.1, Windows required a 286 because it only ran in protected mode (called "Standard") and virtual 8086 ("386 enhanced") mode. Unless, of course, you mean during the DOS boot sequence which has no bearing on system performance once the 32-bit kernel is loaded.

      http://support.microsoft.com/kb/78326
      http://support.microsoft.com/kb/79749

      --

      Gamingmuseum.com: Give your 3D accelerator a rest.
  11. You hit the nail right on the head by Salvance · · Score: 5, Interesting

    The argument that software will get slower assumes that most consumer software will continue to have additional CPU requirements without being coded for multi-core applications. This doesn't make sense. The average consumer uses an Office product, e-mail, and a browser. None of these use anywhere close to 100% of the CPU for very long even on a Pentium 3, let alone on a 2GHz+ core in a multi-core processor.

    Workstation computing will suffer some until software vendors catch up, but this is already happening (e.g. most CAD, Animation, Video Processing are starting to come out with multi-core optimized software). Sure, some apps will continue to be single-threaded, but eventually, who would buy them? Software vendors aren't dumb.

    Games will probably speed up significantly as well. Imagine the possibilities of having a game engine where each AI character utilizes 100% of a single core? Game designers aren't going to sit around desiging games that run on single core engines, they always push the boundaries and will continue to do so.

    --
    Crack - Free with every butt and set of boobs
    1. Re:You hit the nail right on the head by Pxtl · · Score: 4, Interesting

      Even worst-case-scenario, minimally-threaded workstation software can still allow for manual multitasking - if the render-loop of your 3D-modelling app is only using a small amount of the available processor, then at least the others remain available for continuing to work in the main app.

      The real problem is that procedural languages are fugly for working in on this stuff. Even the "modern" commercial languages like Java/DotNet still are somewhat cumbersome in the world of threading, compared to other languages where the threading metaphors are deeper in teh logic (or more mutable languages, like Lisp, where creating new core metaphors is trivial).

    2. Re:You hit the nail right on the head by Pojut · · Score: 2, Interesting

      Well, programming languages come and go...of course, some of the "classics" are still in limited use (cobol, Pascal, C) but for the most part programming languages go the way of the dodo eventually.

      I would imagine that if these new multi-multi core procs are released into the wild in mass numbers, new programming languages will be developed that will enable things to be done more efficiently and easier....or perhaps a hybrid language: One half of the language is for writing processes for individual cores, while the other half acts as a "hub"....or even better, say you have 16 cores, and then one "central" core that acts like a post office...it doesn't actually create any of the mail, it just makes sure it gets delivered to the correct place.

      There is no way that the hardware would advance without the programming ability to back it up

    3. Re:You hit the nail right on the head by Pausanias · · Score: 2, Informative
      Er, C is in "limited use?" How about all of GNU software, the linux kernel, and all of GNOME, which are written in C (not C++ or anything else), and even large parts of Apple's OS X Darwin kernel?

      Regarding multicore CPUs, there already plenty of parallelization packages linkable directly into C (e.g. the various MPI implementations). All you have to do is structure your for loops to make use of it. Once you do that, you can run each iteration of the loop on a separate core via MPI or something similar, thus fantastically improving your code execution time and making full use of all your cores.

      Heck, with your OS's built-in threading calls, you can do this even without MPI, as long as you can make your for loops thread-safe. Interestingly, OS X does this all the time---in Activity Monitor you can see the number of threads your processes have spawned. The kernel usually has the most, and iTunes, iMovies, etc usually have a few as well. Expect this number to go up when cpus with dozens of cores come out. And, of course, linux has the same functionality, though I've seen fewer linux apps that actually make significant use of multiple threads. They'll come soon, as long as the GNOME, etc. authors

      Well, programming languages come and go...of course, some of the "classics" are still in limited use (cobol, Pascal, C) but for the most part programming languages go the way of the dodo eventually.

      I would imagine that if these new multi-multi core procs are released into the wild in mass numbers, new programming languages will be developed that will enable things to be done more efficiently and easier....or perhaps a hybrid language: One half of the language is for writing processes for individual cores, while the other half acts as a "hub"....or even better, say you have 16 cores, and then one "central" core that acts like a post office...it doesn't actually create any of the mail, it just makes sure it gets delivered to the correct place.

      There is no way that the hardware would advance without the programming ability to back it up
  12. Stephen Wolfram has a solution by maynard · · Score: 5, Interesting

    A New Kind of Science. Converting a range of standard CS algorithms into Cellular Automata networks is the very solution our brains use; a combination of message passing and feedback loops. If we want our computers to scale in parallel, we might want to look at how biology has solved the problem. A lot of people laughed at Wolfram when he initially published that book. I think he yet might have the last laugh.

    1. Re:Stephen Wolfram has a solution by Noiprox · · Score: 2, Informative

      That is not true. Our brains do not use Cellular Automata. Neural Networks is a branch of Artificial Intelligence which attempts to model biological nervous systems. There are many reasons why it is not practical to design software such as office suites or whole video games to run on neural nets. Biological networks are trained, not designed. We also have no way of building efficient artificial neural net hardware at present. Wolfram himself does mention in his book that Cellular Automata are not the alpha and the omega, they are merely visually striking simple computing systems which illustrate many of his more general points well.

      People scoffed when Wolfram published his tome with some justification. They were n

      ot arguing against the merit of many of his points. They were pointing out the fact that he has an arrogant tone and is blatantly plagiarising decades of established computer science, restating the ideas of many other scientists as though they were his own. That is a serious breach of scientific ethics and he deserves to be tarred and feathered for it.

  13. Re:Compilers need to be better. by AKAImBatman · · Score: 2, Interesting
    There are so many things wrong with this statement, that it's not even funny. You can't just recompile a program for multiprocessing. When we create computer programs, it is generally expected that future data processing will rely on past data processing. Attempts to parallelize the operations will give bad results. For example:

    int a = 10;
    int b = 20;
    int c = 30;
     
    a = b + c;
    c = a + b;
    If you run the additions in a serial fashion, you get a = 50 and c = 70. If you run them in parallel, you get a = 50 and c = 30. Whoops.

    Being a simplified example, of course, it is possible to parallelize the instructions above. It will require more memory, but we can do the following instead:

    int a = 10;
    int b = 20;
    int c = 30;
    int d;
    int e;
     
    d = b + c;
    e = b + c + b;
    If the first addition is run on a separate core than the second processor, then we'll get a net increase in performance even though we used more computational cycles to compute the results. There's just one catch. CPU designers have known about these micro-optimizations for decades, and have been designing microprocessors with an ability called "Superscalar execution" for almost as long. Superscalar designs make use of CPU processing units not currently utilized by other instructions in order to offer a simplistic form of multithreaded execution on a single core. In this way, the CPU can chew on a larger number of instructions in parallel than it could if it fully serialized the execution. Which makes full multithreading mostly redundant for these situations.
  14. Re:Compilers by TodMinuit · · Score: 2, Informative

    Besides this, is there a solution to this in the form of new programming languages?

    Erlang and Limbo have concurrency primitives built-in. Both used CSP as a launching point. Both give the programming easy-to-use, lightweight processes and message passing. Processes share nothing.

    However, neither have built-in support for multiple cores or multiple CPUs at the moment. It's just not a priority for the teams behind them. You can cheat such a setup with Erlang, however, as you can spawn processes on remote machines or remote Erlang instances. If you had two Erlang instances on the same machine, each would run on its own core, so all you'd need to do was spawn a process on each and then message pass between the two.

    --
    I wonder if I use bold in my signature, people will notice my posts.
  15. Can't the OS just bump apps to their own procs? by 192939495969798999 · · Score: 3, Interesting

    Forgive my ignorance, but can't the OS just make each new app run on it's own core? That would probably give us some overall apparent-speed-of-computer increases, without having to completely modify all existing stuff.

    --
    stuff |
    1. Re:Can't the OS just bump apps to their own procs? by Overzeetop · · Score: 4, Interesting

      You are correct. And given the multitude of things that modern OSes need to do to "help us", we need these cores. I wish my laptop could be upgraded to a multi-core system, as there are too many things that will bod down the system that have to run in the background. Having a processor (or two) for them would significantly increase the responsiveness of my system.

      A decade ago I had a dual PP200 that was one of the nicest machines I had ever run. I ran some unruly apps at the time, and having an extra idle processor to cut those processes of at the knee without rebooting was a nice benefit. Nothing was multi-threaded back then, but having two processors was still valuable.

      --
      Is it just my observation, or are there way too many stupid people in the world?
  16. Did the submitter even read the article? by jndale · · Score: 2, Informative


    If you read the article, you will see that Mrs. Crawford does not even come close to saying that "Software is at Dead End". She says software needs to catch up with the hardware.

    Computers have more and more processors (and different kinds of processors, like GPUs), and currently most software isn't designed for that kind of environment. IBM has developed some clever ways to program these types of systems in a "general purpose" way.

    That's the worst summary of a headline that I've ever read.

  17. Concurrency is... by TodMinuit · · Score: 4, Informative
    --
    I wonder if I use bold in my signature, people will notice my posts.
  18. Re:Architect by Overzeetop · · Score: 2, Insightful

    Give it up. Protected titles ceased to be protected decades ago when industry decided that it didn't need to be regulated. Architect means nothing these days, nor does engineer or doctor. We can throw around RA and PE and MD all we want, but the common words will always be crapped on. Interstingly, accountant and lawyer seems pretty safe - I guess we just need to choose fields that nobody wants to be associated with if we want to keep our monikers pristine.

    Overzeetop, PE

    --
    Is it just my observation, or are there way too many stupid people in the world?
  19. Re:Compilers need to be better. by xero314 · · Score: 2, Insightful

    Attempts to parallelize the operations will give bad results.
    I think what you meant was "attempts to parallelize the operations incorrectly may yield incorrect results."
    The example that you had given above where you manual converted an algorithm from sequential to potentially parallel processed could easily be handled by a compiler. If your brain can handle the optimization so can a compiler given enough time. When writing in a higher level language (i.e. Not Assembly or Machine Code), like you used in your example, then you should be able to expect the compiler to handle those optimizations. Yes I realize all of this is in theory, but eventually reality has to catch up with theory if we expect to improve.
  20. programming for multi-core architectures by barnacle · · Score: 5, Informative

    was an interesting article, particularly the part about the hybrid "roadrunner" architecture.

    However what is more relevant to today's non-supercomputing needs is SMP scalability.

    One of the challenges with SMP scalability is cache coherency; synchronizing the caches on the processors is a costly operation (this is necessary to ensure that each processor has the same view of certain memory at the same time), normally (always?) done with a cache invalidation.

    So the more invalidations you do, the more often the processor has to fetch memory from main memory, and the less it's using its cache. Processing slows down dramatically.

    I've tried to design the qore programming language http://qore.sourceforge.net/ to be scalable on SMP systems. The new version (released today) has some interesting optimizations that have resulting in a large performance boost on SMP machines - the optimizations involve reducing the number of cache invalidations to the minimum (more than just reducing locking, although that is a part of it too - even an atomic update - for example on intel an assembly lock and increment - involves a cache invalidation and therefore is an expensive operation on SMP platforms). There is more work to be done, but in simple benchmarks of affected code paths the performance increase was between 2 and 3 times as fast with the optimizations on the same qore code.

    Anyway it would be interesting to know if other high-level programming languages have also taken the same approach (or will do so); as we go forward, it's clear that SMP scalability will be an important topic for the future...

  21. Re:Compilers by mabhatter654 · · Score: 2, Insightful
    this is the best thread to reply to...


    First issue... who says "most" programs CAN be recompiled? The first gen dual cores were basically duplicates of full processors, but as multicore becomes more popular, the cores will be more efficient and may start leaving out 100% compatibility in favor of sending threads to the better processor... that could save millions of gates per chip by tailoring some cores for FPU and some for SSE3 etc. This means in the future multicore processors won't automatically handle the old code more efficently. In comment to your "multiple computer" comment, that's what happens with code that doesn't play nice NOW.. in the future, it may not be possible to have ALL the features fo a full processor on ALL the cores.



    In many companies they don't have access to code... sometimes the key parts are 20 + years old and the source physically lost.. very common in business/manufacturing. Sometimes it's not "profitable".. witness how long Adobe is taking to get a version for Intel macs... Sue it's JUST a recompile, but they don't WANT TO do it.. and normal users are legally not allowed.



    The problem is not NEW programing languages, it's that much low-level stuff needs to be at least looked at and tested even if it's simply recompiled... that takes TIME and MONEY! If it's copyrighted software, there's nobody but the publisher that can legally do that! That means new versions with upgrade costs (and profit scalping). Like you said, forcing people to recompile usually makes them want to rewrite parts as well from being lost, misunderstood, or inefficient. That's a great time to bring in a new language to simplify things on one base of code and tools... On the other hand it's a great time to push Linux and OSS!!! After all, the code is open so there's nothing preventing somebody from doing the simple work of recompiling and testing on their own. (it still costs TIME, which isn't free, but at least it CAN be done).

  22. Re:Compilers need to be better. by AKAImBatman · · Score: 2, Informative

    I think what you meant was "attempts to parallelize the operations incorrectly may yield incorrect results."
    Indeed. Thanks for the correction. :)

    The example that you had given above where you manual converted an algorithm from sequential to potentially parallel processed could easily be handled by a compiler.
    Of course. Which is why I showed exactly how the code could be handled in parallel. The key is that compilers already do this. Adding a new core won't help. It will just add overhead that will slow the program down rather than speeding it up.
  23. Never, ever, not in a million years! by Phat_Tony · · Score: 2, Insightful

    "We will never, ever return to single processor computers"

    Does anyone think that's anything other than a stupid thing to say?

    I mean, maybe we never will, and maybe it's really unlikely that we will anytime soon. But it seems that anytime there's a real revolutionary (rather than evolutionary) jump in processors, we may well go back to a single "core." For example, if they invented a fully optical processor that was insanely faster than anything in silicon, but they were very expensive to produce per core, and the price scaled linearly with the number of cores... sounds like we'd have single core computers around again for a while. And what about quantum computers? I don't even know what a "core" would be for a quantum computer, but are they by nature going to have a design that works on multiple problems simultaneously without being able to use that capacity to work on an individual problem faster? Even if that is the case, does the author know that, or are they just ignoring any possibility of non-silicon architectures?

    Even within silicon, is it out of the realm of conceivability that someone will develop a radical new architecture that can use more transistors to make a single core faster such that it's competitive with using the same transistor count for multiple cores?

    Considering how computers have spent a good 40 years continuously changing more quickly than any other technology in history, I'd be a bit more reserved in making sweeping generalizations about all possible future developments that might occur in the next forever.

    Still, computer scientists seem to be in rough agreement that current software development models mostly don't produce programs that are multi-threaded enough to take optimal advantage of the current trend toward increased cores. maybe it just sounds too boring when worded that way.

    --
    Can anyone tell me how to set my sig on Slashdot?
  24. CPU not the bottleneck by Tablizer · · Score: 4, Insightful

    Most apps get slow for these reasons:

    1. Disk is slow
    2. Network is slow
    3. Junkware hogging CPU
    4. Some primadona process decided against my will that it wants to run a scan, Java RTE update, registry cleaning, etc., using up disk head movements, RAM, and CPU.

    CPU is usually not the bottleneck except when other crap makes it the bottleneck.

  25. It's the Language, stupid! by david.emery · · Score: 2, Insightful

    I believe a big part of our problem is our piss-poor set of programming langauges and their support for concurrency. C/C++ threads packages and Java's low level synchronization primitives make developing parallel/concurrent programs much more difficult than it should be. (Ada95/Ada05 gets it better, at least by raising the level of abstraction and supporting one approach to unifying concurrency synchronization, concurrency avoidance, and object-oriented programming.)

    Additionally, there's the related problems of understanding concurrency. In the 80's and 90s in particular, there were a lot of fundamental research results in reasoning about concurrent systems. Nancy Lynch's work at MIT (http://theory.csail.mit.edu/tds/lynch-pubs.html) comes to my mind. I'm always dismayed at how little both new CS grads and practicing programmers know about distributed systems, and how poor their ability is collectively to reason about concurrency. It seems like most of the time when I say "race condition" or "deadlock", eyes glaze over and I have to go back and explain 'concurrency 101' to folks who I think should know this.

    Wasn't it Jim Gray (I sure hope he shows up safe and sound!) who coined the terms "Heisenbugs" and "Bohrbugs" to help describe concurrency and faults? (Wikipedia attributes this to Bruce Lindsay, http://en.wikipedia.org/wiki/Heisenbug) Not only is developing concurrent programs hard, debugging them is -really hard-, and our tools (starting with programming languages and emphasizing development tools/checkers), should be focused on substantially reducing or elminating the need for debugging, or development effort will continue to grow.

    Until we have more powerful tools -and training- (both academic and industrial) in using those tools, the Sapir-Whorf hypothesis (http://en.wikipedia.org/wiki/Sapir-Whorf_hypothes is) will apply: The lack of a language (programming language as well as 'spoken language') to talk about concurrency will make it nearly impossible for most programmers to develop concurrent programs. This applies to both MIMD and SIMD kinds of parallelism.

              dave

  26. "Build it and they will come" attitude by Animats · · Score: 4, Insightful

    I've met some of the architects of the Cell processor, and they have a "build it and they will come" attitude. They've designed the computer; it's up to others to make it useful. This is probably not going to fly.

    The Cell is a non-shared memory multiprocessor with quite limited memory per processor. There's only 256K per processor, which takes us back to before the 640K IBM PC. There are DMA channels to a bigger memory, but no cacheing. Architecturally, it's very retro; it's very similar to the NCube of the mid-1980s. It's not even superscalar. Cell processors are dumb RISC engines, like the old low-end MIPS machines. They clock fast, but not much gets done per clock.

    Yes, you get lots of CPUs, but that may not help. On a server, what are you going to run in a Cell? Not your Java or Perl or Python server app; there's not enough memory. No way will an instance of Apache fit. You could put a copy of the TCP/IP stack in a Cell, but that's not where the CPU time goes in a web server. One IBM document suggests putting "XML acceleration" (i.e. XML parsing) in the server, but that's an answer looking for a problem. It might be useful for streaming video or audio; that's a pipelined process. If you need to compress or decompress or transcode or decrypt, the Cell might be useful. But for most web services, those jobs are done once, not during playout. Even MPEG4 compression might be too much for a Cell; you need at least two frames of storage, and it doesn't have enough memory for that.

    Now if they had, say, 16MB per CPU, it might be different.

    The track record of non-shared memory supercomputers is terrible. There's a long history of dead ends, from the ILLIAC IV to the BBN Butterfly to the NCube to the Connection Machine. They're easy to design and build, but just not that useful for general purpose computing. Some volumetric simulation problems, like weather prediction, structural analysis, and fluid dynamics can be crammed into those machines, so there are jobs for them, but the applications are limited.

    Shared-memory microprocessors look much more promising as general purpose computers. Having eight or sixteen CPUs in a shared-memory multicore configuration is quite useful. That's how SGI servers worked, and they had a good track record. Scaling up today's multicore shared-memory CPUs is repeating that idea, but smaller and cheaper.

    At some point, you have to go to non-shared memory, but that doesn't have to happen until you hit maybe 16 CPUs sharing a few gigabytes of memory, which is about when the cache interconnects start to choke and speed of light lag to the far side of the RAM starts to hurt. That might even be pushed harder; there's been talk of 80 CPUs in a shared memory configuration. That's optimistic. But we know 16 will work; SGI had that years ago.

    Then you go to a cluster on a chip, which is also well understood.

    That's the near future. Not the Cell.

  27. How about the David Patterson perspective? by kscguru · · Score: 3, Interesting
    Instead of an IBM executive, how about David Patterson. Hint: he wrote The Book on computer architecture.

    Berkeley tech report (inc. Patterson as author)

    Brief summary (I heard the same talk when he spoke at PARC), computational problems are divisible into one of thirteen categories that range from matrix multiplication to finite state automata. Most existing research (academia and industry) into parallelism tends to focus on about seven of those categories that are most easily parallelized - think supercomputer cluster. Most apps that you or I use fall into the graph traversal or finite-state categories (think compilers, apps with an event loop, etc.), into which there is essentially no research. Patterson even suspects that finite state machines are inherently serial and CANNOT be parallelized.

    So ... the apps that we already use can't really get faster on parallel cores without major, fundamental advances in computer science that don't seem to be approaching. Which means we'll be using our current apps for a LONG time.

    Additional note: IBM (and other chip manufacturers) have a vested interest in telling everyone that parallelism is the future. They can't make faster chips anymore, they can only compete on sheer number of cores.

    --

    A witty [sig] proves nothing. --Voltaire

  28. Perl 6's chance?.. by Noiser · · Score: 2, Interesting

    Perl 6 (as it is designed) introduces a new concept of "junctions", which are a bit like arrays, but can be used in clever ways. One useful way is:

    if ($fruit == ("apple"|"orange"|"pear")) {
            print "sweet!";
    }

    But another intriguing way of using the junction will be parallel loops -

    for ("apple"|"orange"|"pear") {
            eat($_);
    } ... and instead of doing three consecutive eat's -

    eat("apple");
    eat("orange");
    eat("pear");

    the interpreter will run 3 threads, each with the eat() function.

    As the whole of Perl 6, this design is not finalized. Maybe it won't be like that at all. And of course threading is all non-safe and stuff.

    But having threads in a vanilla for loop, instead of setting up thread with clever functions, modules, etc. is something new. If it will happen and unsuspecting programmers will just use it, hey - that'd be something special.

  29. Multiple Cores will lead to Neural Net Apps by Geeko+Roman · · Score: 2, Informative

    This comment does not exactly apply to the question put forth about performance of existing apps under multiple cores. However, I would like to bring up that, in my opinion, given my experience with artificial Neural networks and related work, that I expect, in some form or another, that it is likely that one could fairly easily argue:

    1) The number of cores is going to increase
    2) The current concept of an artificial Neuron having some sort of value, with weights attributed to it is too simple for how our human brains realy work, and therefore need more than a simple value and one algorithm, such that it will likely need to be replaced with a more complex model of values and algorithms, and the work on such that requires a mini-process or in this case "a core"

    I expect that given that there will be an increased amount of cores, probably with an increase similiar to hard disc, processor, or memory increases of the past (1 10MB hard disc increasing to 500GB today), that we will have thousands or even hundreds of thousands of cores.

    As we learn more about how the brain works I believe that 2) will be accepted as true at some point.

    So I expect that more and more new software will attempt to be more intuitive, as more and more people begin to agree that the software we have now in general is crap, in that it doesn't help the layman as much as it could do their jobs.

    This intuitiveness will likely be in the form of artificial Neural Nets, paving the way for computing systems to begin to act like the science fiction computer systems we think of in "the future".

    Just my two-cents guess...

  30. Re:Java does threading probably easiest of all by Pxtl · · Score: 2, Insightful

    And Forth's manual stack-loading is practically 1:1 to the underlying OS too, why don't you use that? Garbage collection has nothing to do with the underlying OS, but we keep it around.

    Mapping 1:1 to the underlying OS is not the be-all and end-all of linguistic constructs. Consider Actors model languages, or dataflow-model languages - or the native rendezvous concepts from Ada. Im not saying that any of these are ideal approaches (I hate Ada, for example) - Im just saying that Algol-descended languages were designed to model procedure and formulas... so modelling concurrency doesnt come naturally to them.

  31. Purely Functional Programming... by Tracy+Reed · · Score: 2, Insightful

    ...is the only way we are going to take advantage of multi-core cpu's and continue to improve our software. Only through purely functional code can you make guarantees about what can be executed simultaneously and let the machine sort it all out. I'm learning Haskell for this very reason.

    1. Re:Purely Functional Programming... by Anonymous+Brave+Guy · · Score: 2, Interesting

      I commend you for broadening your programming horizons by learning Haskell. I also caution against drinking the kool-aid too much. A lot of the support for Haskell is in the academic community, and their priorities are very different to those of industrial software developers.

      When you start to combine Haskell with real world problems, a lot of that natural elegance starts to look very artificial. Then you introduce concepts that mimic imperative programming with shared state (albeit based on more mathematically rigorous underlying models) to overcome that. At that point, you're in the same bind as many of the newer languages today that are basically imperative in nature but starting to borrow from functional programming: you can do lots of the neat tricks, but when you dig deeper the expressive power isn't as much as you hoped.

      In other words, purely functional programming is very limited until you build in support for real world issues like I/O using monads or whatever. Once you do that, you're not really working with purely functional code (in the sense of having no side-effects) anymore, but rather with code that represents and reasons with side-effects explicitly. Whether the best way to write such code is in a declarative, functional style, or an imperative one, or something else, is a question yet to be answered, because right now only the functional programming language community is making a serious effort to do it.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    2. Re:Purely Functional Programming... by Tracy+Reed · · Score: 2, Informative

      A lot of the support for Haskell *used* to be in Academia. But #haskell is full of people using it for every day real-world purposes it seems. I was especially impressed after talking to Cliff Beshers of Linspire who are doing all of their distro-specific coding such as the installer etc. in Haskell. I have now seen IRC bots in haskell, web servers and web application servers in haskell, and video games in haskell. Heck, the only existing implementation of Perl 6 is written in Haskell. It seems like it has escaped Academia and has been looking for a problem to solve for a few years now. And it looks like this multi-core business may well be it. Especially since haskell has a parallelizing compiler.

  32. Amdahl's law by hoegh · · Score: 2, Informative

    Some tasks can't be done in parallel and this is the Achilles heel of massive parallel architectures. See for instance http://en.wikipedia.org/wiki/Amdahl's_law. No parallel hardware and no parallel algoritms - no matter how clever - will help you, if you have a task of sequential nature (and even only help you somewhat no matter how massively parallel it is, if your task is partly sequential).

    If one truckdriver can drive a truck 50 miles in one hour, how far can two drivers then drive the truck in the same amount of time?