News for hackers. Stuff that matters.
Re:Path to 2 nm May Not Be Worth It by chooseaname on Monday August 27, 2018 @09:50AM (#17851465)
We've been complacent. Thus the old saying, "Intel giveth, Microsoft taketh away."[0]

Engineers have known for a long time that we aren't as efficient as we could be.

[0] Not attempting to beat up on either of those companies.

Re:Path to 2 nm May Not Be Worth It by ghaff on Monday August 27, 2018 @10:20AM (#17851622)
We've also just optimized for features, time to market, and programming approaches that don't require the most highly-skilled and trained developers. You can change all that of course (and we do for some applications/situations) but you don't get significantly more efficient code for free. It probably takes longer to write and a lot of current developers probably can't do it.
Re:Path to 2 nm May Not Be Worth It by rayiner on Monday August 27, 2018 @12:14PM (#17852322)
The remarkable thing to me is that there was so much inefficiency left to pull out of the bag. In the 1990s, Apple managed to make a dynamically-typed, garbage-collected language fit in a 68040 with 20MB of RAM: https://www.macintoshrepository.org/1358-apple-dylan-tr. In the late 1990s, I sincerely thought that was close to the end of the evolutionary process--once computers got fast enough to run software written in dynamically-typed, garbage-collected languages comfortably, we would have hit the plateau in the productivity/performance tradeoff curve.

I never dreamed that software developers would manage to make things slower still (by orders of magnitude) by throwing everything onto the 'net and using multiple round-trip web-api calls to do the most trivial things. I just didn't anticipate that this source of inefficiency was there to be harnessed.

(This came to a head for me recently when I was trying out planner apps for my phone. It boggled my mind that, even on a dual 1.8 GHz processor, Asana and MS Planner do not respond instantly.)

Re:Path to 2 nm May Not Be Worth It by gumby on Monday August 27, 2018 @01:12PM (#17852766)
> The remarkable thing to me is that there was so much inefficiency left to pull out of the bag. In the 1990s, Apple managed to make a dynamically-typed, garbage-collected language fit in a 68040 with 20MB of RAM

The Dylan folks were all trained computer scientists, mostly MIT PhDs, almost all with years and even decades of experience in writing garbage collected languages on resource-constrained machines (e.g. MACLISP). By contrast many of the apps you write are written by much less trained folks using a lot of automation and boilerplate.

While I personally prefer to write tight, clean code directly to the underlying system, I am really glad for this democratization of programming which has lead not only to good careers for people who didn't get to go to MIT/CMU/UCB but also lead to a profusion of great apps. Not everybody has to design TCP but everybody gets to use it.

And note that Dylan had little impact on society while Tinder sure has.

Re:Path to 2 nm May Not Be Worth It by gumby on Monday August 27, 2018 @03:47PM (#17853892)
Too late to edit my comment but for some reason I typed "many of the apps you write...". Bizarre, I mean't "many of today's apps are..."

Don't know what I was thinking.

Re:Path to 2 nm May Not Be Worth It by marvin on Monday August 27, 2018 @12:22PM (#17852376)
To be fair, developers haven't moved this way because they're dumb. The web has just turned out to be a _remarkably_ accessible and efficient distribution platform, and that currently trumps the cost of actually running the software. After all, it's what people are able to do with the software that matters.

But it also means there's some relatively low-hanging fruit these days if you find a niche where performance is much more important than accessibility :)

Re:Path to 2 nm May Not Be Worth It by gameswithgo on Monday August 27, 2018 @10:30AM (#17851685)
>We've also just optimized for features, time to market, and programming approaches that don't require the most highly-skilled and trained developers

We think we have been optimizing for those things, but I don't know that we actually have. Does Ruby/Python really help you get to market faster than would similar languages with static typing and compilers or JITs? (Kotlin, C#, F#, Nim, etc)

There is research that suggests not, certainly I don't think the effect is large if it even exists. Many people use TypeScript because they feel it is a productivity boon over Javascript. We might one day leverage that and use the static types to compile TypeScript more efficient WASM or something, win win situation.

Re:Path to 2 nm May Not Be Worth It by jkabrg on Monday August 27, 2018 @10:41AM (#17851768)
It's not clear what he's referring to. It could be garbage collection, libraries, frameworks, optimizing compilers...

  - Garbage collection make performance unpredictable because of collection spikes. 
  - If you use a big library, you now have to load the library, which is an extra time-sink. 
  - Likewise for frameworks. 
  - Optimizing compilers optimize the 80% of our programs that don't need optimizing, and under-optimize the 20% that do.
    (This is DJB's argument.)
That might be what he's saying. He didn't say anything about dynamic vs. static typing.

Also, there's a counter-argument to this, that writing non-garbage-collected code might result in security bugs (to do with memory management). And security is a non-functional requirement that some might say is more important than speed. It's hard to judge though; there are loads of requiremenets in software dev, and it's hard to balance them.

Re:Path to 2 nm May Not Be Worth It by ghaff on Monday August 27, 2018 @10:48AM (#17851805)
All those things could be the case. I'm not advocating any specific approach. I'm just saying that, if you make performance/efficiency job #1 and make all other language, tools, hiring, and project timeline decisions in service of that goal, you probably make some decisions that are different from today's norm.
Re:Path to 2 nm May Not Be Worth It by gameswithgo on Monday August 27, 2018 @11:18AM (#17851988)
Right, and I think there are lot of decisions we could make that would improve efficiency without downsides, if we could somehow change what are the popular ecosystems from things like Python/Ruby to other ones that are more efficient with similar ergonomics.
Re:Path to 2 nm May Not Be Worth It by Elv13 on Monday August 27, 2018 @11:58AM (#17852224)
> Also, there's a counter-argument to this, that writing non-garbage-collected code might result in security bugs (to do with memory management).

That's falacy. Don't mix "fully manual memory management" with "I have no GC". Those are 2 totally unrelated topics. GC is one of the way to manage memory automatically. There is hundreds with their own plus-sides and downsides. Here's the least unpopular:

* Stop the world and incremental GC: Makes it easy to write simple code. Doesn't really make the lifecycle explicit so when the codebase grow larger you start to have boilerplate code to manage/close connections/files/transactions. (all toys languages, also Java and Go).

* Reference counting: Can be made fast enough by using some of the pointer 64bits to store its state. A giant problem is that all your libraries have to support compatible "smart pointer" formats or the whole thing become unmanageable. (Modern C++)

* Contacts/Lending: Does it's job, is safe but makes the code more complex by making a lot of implicit things explicit (Rust, Modern C++)

* Explicit ownership + message passing: works well enough for GUI because just like HTML everything is less or more a tree. Also consuming messages allow "higher level" objects not to have to care about pointers. For backend code it's not very good. (Qt-C++)

* Pure functional: Everything is a copy, they get freed when out of scope. Works well for some domain, but gets in your way for more stateful constructs.

* Copy-on-Write: Pass everything by reference (and count them). Copy when they are modified, otherwise point to the real memory. Only solves half of the problem. Assuming most allocations are containers it works well enough. It doesn't attempt to solve objects management.

* Pipelining: Get input, process them, pass them on or free them. The processing should not have to dynamically allocate at all (Bash, Erlang).

* Pre-allocation: Allocate everything at compile time and use buffers big enough for your use case. (C)

* State machines: Encode the object lifecycle as a series of state changes. Release when it reaches end-of-life. Great for protocols, parsing, transactions. You usually can use code generators to generate proven safe C from an higher level format or proof. However it doesn't scale and only matches a subset of programming projects. It's also hard to learn for non EE programmers because it doesn't map perfectly on the iterative Von Neumann CPU. Easy to read but hard to write.

No-GC != security-bugs because of memory management. If a C program uses pre-allocated buffers, then the security issues is because the language is unsafe, not because it has no GC.

Re:Path to 2 nm May Not Be Worth It by ryanworl on Monday August 27, 2018 @11:02AM (#17851896)
This is barely even usable today for anything useful, but AssemblyScript is doing what you're talking about at the end there. It is essentially TypeScript syntax that compiles to WebAssembly.

https://github.com/AssemblyScript/assemblyscript

Re:Path to 2 nm May Not Be Worth It by mrguyorama on Monday August 27, 2018 @10:34AM (#17851722)
If you're looking for efficiency, wouldn't the actual win be to just use less javascript?
Re:Path to 2 nm May Not Be Worth It by gameswithgo on Monday August 27, 2018 @11:17AM (#17851976)
Yes, but typescript is a great way to ease people into that, since it is a superset of javascript which could be leveraged to AOT compile more efficient code. Also it is a very nice language!
Re:Path to 2 nm May Not Be Worth It by wolco on Monday August 27, 2018 @12:33PM (#17852448)
PHP does not because it is dyamanic but because the language and ecosystem are geared to getting things.
Re:Path to 2 nm May Not Be Worth It by Bartweiss on Monday August 27, 2018 @02:22PM (#17853204)
> It probably takes longer to write and a lot of current developers probably can't do it.

I think we can go even stronger than 'probably' - we know that there are people who do work to these constraints, and it's mostly experienced devs from a few starting tracks working on years-long projects.

As far as I know, NASA's coding standards haven't slipped from their famous "0 bugs per 500,000 lines", and that code (along with JPL, Orbital, SpaceX, etc) is often written to harsh physical constraints. Systems like the Mars entry controller have to operate unsupported in environments where slowness, power, and weight are all serious limiting factors. For all that the IoT is a disaster, embedded control software for non-consumer projects is often concise, fast, and reliable.

It would probably be possible to train a lot more high-performance developers than we have now, but the demand certainly hasn't been present and even if we could there'd be a real price exacted in lost development time and features.

It'll be interesting to see what happens as chip speedups become increasingly unavailable; it's possible we'll revisit the old stuff and make it faster, but so far the leading answer appears to be falling back on networking to handle tasks on bigger hardware.

Re:Path to 2 nm May Not Be Worth It by ryanmarsh on Monday August 27, 2018 @01:03PM (#17852688)
I'm not a low level developer (whatever that means today). I've written a very minimal amount of production C. Everything else has been higher level languages. So I apologize in advance for my ignorance.

Isn't the problem really memory bandwidth? Aren't most CPU cycles "wasted" on speculative execution while waiting on fetches from memory slower than CPU caches?

Wouldn't a hardware model where all of the RAM (SRAM?) was on the CPU die (fabrication and DRAM clock speed aside) solve this problem and make everything an order of magnitude faster? What am I missing? Is this really the programmers fault?

The CPU literally spends most of its time waiting on my instructions, not choking on them, so why is this my fault for being lazy?

Re:Path to 2 nm May Not Be Worth It by baybal2 on Monday August 27, 2018 @01:52PM (#17853010)
>What am I missing?

You are missing money...

SRAM and wider data paths are expensive.

You are totally right about that taking more logic into synchronous domain domain is an almost universal solution to getting more performance. The faster the chips become, the more IO gap becomes.

Experienced MCU programmers know quite a number of algorithms that may run faster on "dumb" 100mhz MCUs than on a 20-cored Xeon, and are proud to show them off.

Even when some of MCU cores may take like 6 cycles to do an arithmetic op, their strong side is that it will be taking them these 6 cycles to do that all and every time consistently, and that their memory runs synchronously.

Say, in a 1000000 cycle loop, where every operation results in cache miss, Xeon will spend more time on a loop than a wimpy 100Mhz MCU that simply don't take any penalty on unpredictable, heavy on synchronous ops cope.

Apple A11 is so fast for an ARM just because they choose the simplest, the surest, most direct, but also the most expensive way to scale performance: tons of SRAM and prefetch logic everywhere to reduce IO gap as much as possible.

Re:Path to 2 nm May Not Be Worth It by paulmd on Wednesday August 29, 2018 @04:33AM (#17866688)
20 MB of RAM should be enough for anybody! /s

I was reading a thing a while back on here or Reddit where someone asked about an OS that ran entirely in cache, after all in principle a modern processor has more L3 than an original Unix minicomputer.

Since many of the memory subsystems operate on the assumption that changes should be propagated to memory that you would still need to have RAM there even if you weren't really "using" it.

There was a suggestion that since the bringup code begins entirely on-processor (before initializing RAM) that you could hack the Management Engine and keep running in that mode forever.

Re:Path to 2 nm May Not Be Worth It by marcosdumay on Monday August 27, 2018 @04:20PM (#17854148)
Memory bandwidth is a problem. A large one. But saying that "most" CPU cycles are wasted to it is a huge overrate.

I have read estimates that go as high as 1/3 of the CPU lost to it (sorry, no reference here), but even those were not usual.

Re:Path to 2 nm May Not Be Worth It by pacaro on Monday August 27, 2018 @12:23PM (#17852386)
One irony of this expression is the role Intel played in making sure that as much of USB as possible had to go through the CPU
Re:Path to 2 nm May Not Be Worth It by cm2187 on Monday August 27, 2018 @06:46PM (#17855162)
The modern version being, "Intel giveth, javascript and python taketh away".
Re:Path to 2 nm May Not Be Worth It by overcast on Monday August 27, 2018 @10:12AM (#17851567)
I don't know, Windows 10 seems to be faster on even older hardware. Upgrading from 7 to 10 makes the machine feel MUCH more responsive. Seems to bring life back to the old machines around here.
Re:Path to 2 nm May Not Be Worth It by gameswithgo on Monday August 27, 2018 @10:31AM (#17851697)
Maybe you are just feeling a machine without bloat vs one with lots of bloat that has built up for 3rd party software?

At least one aspect of windows10 design will add input latency, which is the forced vsync in the windowing system.

Re:Path to 2 nm May Not Be Worth It by overcast on Monday August 27, 2018 @10:54AM (#17851835)
Nope, fresh installs of Windows 7 definitely not nearly as responsive. Thousands of machines a year, Windows 10 is by far the fastest.
Re:Path to 2 nm May Not Be Worth It by monocasa on Monday August 27, 2018 @11:26AM (#17852039)
Not sure why you're b eing downvoted. Windows 10 is the first release that Microsoft had really fully internalized the lessons learned from the whole Longhorn debacle. That is consumers aren't ever going to have 10Ghz processors.
Re:Path to 2 nm May Not Be Worth It by agumonkey on Monday August 27, 2018 @12:53PM (#17852612)
do you have a list of things that are really in need of redesign ?