POV-Ray : Newsgroups : povray.off-topic : Complicated Server Time
12 Oct 2026 16:06:18 EDT (-0400)
  Complicated (Message 1 to 50 of 52)  
Goto Latest 50 Messages Next 2 Messages >>>
From: Mike Raiford
Subject: Complicated
Date: 2 Jun 2011 10:06:05
Message: <4de798cd$1@news.povray.org>
So, I've been sort of reading this:

http://download.intel.com/design/intarch/manuals/27320401.pdf

I've had a pretty good idea of how the 8086 and 8088 deal with the 
system bus. But, I wanted to understand more about the later generation 
processors, so I started with the Pentium.

I'm on the section dealing with bus arbitration and cache coherency when 
there are 2 processors in the system. (This is the embedded version, I'm 
not sure if the full version is all that different)

It occurs to me that handling the cache when there are 2 parts vying for 
the same resource can get rather messy.

What I understand so far is: One process has the bus, and either reads 
or writes from/to the bus. The other processor watches the activity and, 
if it sees an address it has modified it tells the other processor, 
which passes bus control to the other, puts the data out on the bus, 
then returns control to the first processor.

Apparently, the bus can also be pipelined. I'm not exactly sure how this 
works, but the processors then have to agree on whether the operation 
actually can be put in a pipeline.

I can definitely see some potential for bottle-necks in a 
multi-processor system when dealing with the bus, since electrically, 
only one device can place data on the bus at one time. The nice thing 
is, in system design, you can design your bus the same for single or 
dual processors. Provided you've wired the proper signals together, and 
initialized the processors properly with software and certain pin 
levels, it's totally transparent to the rest of the system.

-- 
~Mike


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 3 Jun 2011 09:48:47
Message: <4de8e63f$1@news.povray.org>
On 02/06/2011 03:06 PM, Mike Raiford wrote:
> So, I've been sort of reading this:
>
> http://download.intel.com/design/intarch/manuals/27320401.pdf

Woooo boy, that's one big can of complexity, right there! ;-)

> I've had a pretty good idea of how the 8086 and 8088 deal with the
> system bus. But, I wanted to understand more about the later generation
> processors, so I started with the Pentium.

I'm going to sound really old now, but... I remember back in the days 
when the RAM was faster than the CPU. I remember in-order execution 
without pipelines. When I first sat down to read about how modern IA32 
processors actually work... I was pretty shocked. The circuitry seems to 
spend more time deciding how to execute the code than actually, you 
know, *executing* it! o_O

> I'm on the section dealing with bus arbitration and cache coherency when
> there are 2 processors in the system.

> It occurs to me that handling the cache when there are 2 parts vying for
> the same resource can get rather messy.

 > I can definitely see some potential for bottle-necks in a
 > multi-processor system when dealing with the bus, since electrically,
 > only one device can place data on the bus at one time. The nice thing
 > is, in system design, you can design your bus the same for single or
 > dual processors. Provided you've wired the proper signals together, and
 > initialized the processors properly with software and certain pin
 > levels, it's totally transparent to the rest of the system.

There are two main problems with trying to connect two CPUs to one RAM 
block:

1. Bandwidth.

2. Cache coherence.

Currently, RAM is way, way slower than the CPU. Adding more CPU cores 
simply makes things worse. Unless you're doing a specific type of 
compute-heavy process that doesn't require much RAM access, all you're 
doing is taking the system's main bottleneck and making it twice as bad. 
Instead of having /one/ super-fast CPU sitting around waiting for RAM to 
respond, now you have /two/ super-fast CPUs fighting over who gets to 
access RAM next.

(I've seen plenty of documentation from the Haskell developers where 
they benchmark something, and then find that it goes faster if you turn 
*off* parallelism, because otherwise the multiple cores fight for 
bandwidth or constantly invalidate each other's caches.)

It seems inevitable that the more memory you have, the slower it is. 
Even if we completely ignore issues of cost, bigger memory = more 
address decode logic + longer traces. Longer traces mean more power, 
more latency, more capacitance, more radio interference. It seems 
inevitable that if you have a really huge memory, it will necessarily be 
very slow.

Similarly, if you have huge numbers of processing elements all trying to 
access the same chunk of RAM through the same bus, you're splitting the 
available bandwidth many, many ways. The result isn't going to be high 
performance.

My personal belief is that the future is NUMA. We already have cache 
hierarchies three or four levels deep, backed by demand-paged virtual 
memory. Let's just stop pretending that "memory" is all uniform with 
identical latency and start explicitly treating it as what it is.

Indeed, sometimes I start thinking about what some kind of hyper-Harvard 
architecture would look like. For example, what happens if the machine 
stack is on-chip? (I.e., it exists in its own unique address space, and 
the circuitry for it is entirely on-chip.) What about if there were 
several on-chip memories optimised for different types of operation?

Unfortunately, the answer to all these questions generally ends up being 
"good luck implementing multitasking".

The other model I've looked at is having not a computer with one giant 
memory connected to one giant CPU, but zillions of smallish memories 
connected to zillions of processing elements. The problem with *that* 
model tends to be "how do I get my data to where I need it?"

As someone else once said, "a supercomputer is a device for turning a 
compute-bound problem into an I/O-bound problem".

> What I understand so far is: One process has the bus, and either reads
> or writes from/to the bus. The other processor watches the activity and,
> if it sees an address it has modified it tells the other processor,
> which passes bus control to the other, puts the data out on the bus,
> then returns control to the first processor.

http://en.wikipedia.org/wiki/Cache_coherence
http://en.wikipedia.org/wiki/MESI_protocol

Looks like what you're describing is a "snooping" implementation. There 
are also other ways to implement this.

> Apparently, the bus can also be pipelined. I'm not exactly sure how this
> works, but the processors then have to agree on whether the operation
> actually can be put in a pipeline.

Again, when I learned this stuff, RAM was the fastest thing in the 
system. You just send the address you want on the address bus and read 
back (or write) the data on the data bus.

These days, the CPU is the fastest thing. You can "pipeline" read 
requests by requesting a contiguous block of data. That way, you 
eliminate some of the latency of sending a memory request for each 
datum. (And, let's face it, you only talk to main memory to fill or 
empty cache lines, which are contiguous anyway.)

I understand this also has something to do with the internal way that 
the RAM chips do two-dimensional addressing...


Post a reply to this message

From: Mike Raiford
Subject: Re: Complicated
Date: 3 Jun 2011 10:18:35
Message: <4de8ed3b$1@news.povray.org>
OK... something I don't get. Presumably, it has some weird thing to do 
with alignment.

A bit of background first: The Pentium has a 64-bit data bus. What this 
means is that the lower two bits of the address bus have been dropped. 
Meaning, the processor really only accesses memory on 8 byte boundaries.

But, it has a way of getting around that, it has 8 pins that act as a 
mask. If it only needs the first four bytes, then it can pull low only 
the first four of the BE# pins. This tells the system's logic what it 
wants. This makes accessing smaller chunks of memory much more efficient 
if, say, the RAM is composed of modules that have an 8 bit data bus. Oh, 
by the way... this is why it was critically important to make sure your 
memory is installed in pairs. ;) You see, back in the day DRAM was sold 
in 32 bit modules. With only one module installed, the data bus was only 
32 bits wide (*IF* the motherboard actually supported that 
configuration) but, with both....

But here's the part that isn't making sense to me:

>
+---------------------------------------------------------------------------------------------------------------+
> |Length of Transfer            |1 Byte  |2 Bytes                                    
                           |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |Low Order Address             |xxx     |000     |001     |010     |011     |100    
|101     |110     |111     |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |1st transfer                  |b       |w       |w       |w       |hb      |w      
|w       |w       |hb      |
> |Byte enables driven           |0       |BE0-1#  |BE1–2#  |BE2–3#  |BE4#    |BE4–5# 
|BE5–6#  |BE6–7#  |BE0#    |
> |Value driven on A3            |        |0       |0       |0       |0       |0      
|0       |0       |1       |
>
+------------------------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
> |2nd transfer (if needed)      |        |        |        |        |lb      |       
|        |lb      |        |
> |Byte enables driven           |        |        |        |        |BE3#    |       
|        |BE7#    |        |
> |Value driven on  A3           |        |        |        |        |0       |       
|        |0       |        |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |Length of Transfer            |4 Bytes                                             
                           |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |Low Order Address             | 000     |001      |010      |011       |100     
|101      |110       |111     |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |1st transfer                  | d       |hb       |hw       |h3        |d       
|hb       | hw       |h3      |
> |Byte enables driven           | BE0–3#  |BE4#     |BE4–5#   |BE4–6#    |BE4–7#  
|BE0#     |BE0–1#    |BE0–2#  |
> |Low order address             | 0       |0        |0        |0         |0        |1
       |1         |1       |
>
+------------------------------+---------+---------+---------+----------+---------+---------+----------+--------+
> |2nd transfer (if needed)      |         |l3       |lw       |lb        |        
|l3       |lw        |lb      |
> |Byte enables driven           |         |BE1–3#   |BE2–3#   |BE3#      |        
|BE5–7#   |BE6–7#    |BE7#    |
> |Value driven on A3            |         |0        |0        |0         |         |0
       |0         |0       |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |Length of Transfer            |8 Bytes                                             
                           |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |Low Order Address             | 000     |001      |010      |011       |100     
|101      |110       |111     |
>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
> |1st transfer                  | q       |hb       |hw       |h3        |hd      
|h5       |h6        |h7      |
> |Byte enables driven           | BE0–7#  |BE0#     |BE0–1#   |BE0–2#    |BE0–3#  
|BE0–4#   |BE0–5#    |BE0–6#  |
> |Value driven on A3            | 0       |1        |1        |1         |1        |1
       |1         |1       |
>
+------------------------------+---------+---------+---------+----------+---------+---------+----------+--------+
> |2nd transfer (if needed)      |         |l7       |l6       |l5        |ld      
|l3       |lw        |lb      |
> |Byte enables driven           |         |BE1–7#   |BE2–7#   |BE3–7#    |BE4–7#  
|BE5–7#   |BE6–7#    |BE7#    |
> |Value driven on A3            |         |0        |0        |0         |0        |0
       |0         |0       |
>
+---------------------------------------------------------------------------------------------------------------+
>
> Key:
>
> b = byte transfer       w = 2-byte transfer     3 = 3-byte transfer     d = 4-byte
transfer
> 5 = 5-byte transfer     6 = 6-byte transfer     7 = 7-byte transfer     q = 8-byte
transfer
> h = high order         ll = low order
>
> 8-byte operand:
>
+----------------------------------------------------------------------------------------+
> | high order byte | byte 7 | byte 6 | byte 5 | byte 4 | byte 3 | byte 2 | low order
byte |
>
+----------------------------------------------------------------------------------------+

OK, so... in this table you can see when the operand is a word it 
requires a second transfer if the low order bits of the address are 3 or 7.

7 is understandable. after all, you're crossing a boundary, there. But, 
3 is utterly baffling.

from this chart, when dealing with word-length operands I can surmise:

Address = # transfers for word
0x12345678 = 1 transfer
0x12345679 = 1 transfer
0x1234567A = 1 transfer
0x1234567B = 2 transfers
0x1234567C = 1 transfer
0x1234567D = 1 transfer
0x1234567E = 1 transfer
0x1234567F = 2 transfer

To me it makes no sense. xxxxB should be able to transfer in one go. Why 
wouldn't it?
-- 
~Mike


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 3 Jun 2011 10:45:54
Message: <4de8f3a2$1@news.povray.org>
On 03/06/2011 02:48 PM, Invisible wrote:

> Woooo boy, that's one big can of complexity, right there! ;-)

I've said it before, and I'll say it again: The IA32 platform is one 
huge stack of backwards compatibility kludges.

The story begins (arguably) with the Intel 8008, released in 1972 or so. 
(!!) It consisted of 3,500 transistors, and was manufactured on a 10 μm 
process PMOS. It ran at 500 kHz. (That's 0.5 MHz or 0.00005 GHz.) It had 
a grand total of 18 pins (despite the 14-bit address space). It featured 
two main registers, A and B, both 8 bits wide.

Then came the 8080 (around 1974), with a 2 MHz maximum clock speed. This 
had 7 registers, named A, B, C, D, H, and L, all 8 bits wide. Certain 
pairs (BC, DE, HL) could be used together for certain instructions to 
perform 16 bit operations.

(The world-famous Z80 processor is an enhanced version of the 8080.)

Now, finally, in 1978 (!) we arrive at the 8086. The A, B, C and D 
registers are renamed AL, BL, CL and DL, and new registers called AH, 
BH, CH and DH were added. These are all 8-bit, and can be combined 
together creating AX, BX, CX and DX registers 16 bits wide.

Also new was the infamous memory segmentation model. Under this bizarre 
scheme, there are four "segment pointer" registers which select which 
"segment" you access data from. But because the segment offsets are 
16-bit, the segments actually overlap, so there are multiple ways to 
refer to the same physical address.

Basically, this is a huge kludge. Rather than implementing real 32-bit 
addressing, they kludged in 20-bit addressing. While not /completely/ 
without merit (e.g., this whole segment melarchy makes relocatable code 
quite a bit easier), it's really a bad solution.

Not content with that, Intel developed the 8087, the FPU to go with the 
8086 CPU. Unlike any sane design, this FPU has 8 registers, but you 
cannot access them directly. Instead, they function as a "stack". Math 
operations "pop" their operands from the top and "push" the result back 
on. If you want to access something lower down, you have to FXCH 
instructions to swap the top register's contents with one of the 
registers lower down.

In later generations of chip, the registers are mapped in hardware with 
pointers, and two parallel instruction pipelines allow you to optimise 
FXCH down to zero clock cycles (effectively). But still, WTF?

In 1982 (this is the first year in the list so far when I was actually 
*live*!) the 80286 (or "286") appeared. This was the first CPU with 
memory protection.

In 1985, the 80386 ("386") came along. This was the first 32-bit 
processor. (Which is why IA32 is sometimes referred to as "i386", and 
why Linux generally refuses to work with anything older.) This was the 
first processor where the relationship between segment numbers and 
physical memory addresses is programmable rather than hard-wired. In 
other words, this is where memory pages got invented.

The 386 inherits all of the registers from the 286 (i.e., AL, AH, AX, 
BL, BH, BX, etc.) But AX is a 16-bit register. So the 386 adds a new 
register, EAX, which is 32 bits. AX is the bottom 16 bits of EAX. 
Similarly for B, C and D.

(By contrast, a *real* 32-bit chip like the Motorola 68000 has registers 
A0 through A7 and D0 through D7, and when you do an operation, you 
specify how many bits to use, e.g., mov.l d3 d7. None of this stupidity 
with multiple names for the same register.)

When AMD64 eventually came along, these became 64-bit registers RAX, 
RBX, etc., of which EAX, EBX, etc. are the lower 32-bits. (AMD64 also 
adds completely new 64-bit registers R8 through R15, just for good 
measure. You would expect this to result in an utterly massive speed 
increase, but apparently people have measured it at less than 2%.)

If I say 80486, you probably think of some ancient old thing. But it was 
the first chip in the family to include an L1 cache, and the first one 
to support superscalar execution (i.e., executing more than one 
instruction per clock cycle). In the form of the 486DX, it was also the 
first one with an on-chip FPU.

In 1996, the Pentium MMX arrived. MMX stands for "multimedia 
extensions". (Remember, in the 1990s, "multimedia" was the wave of the 
future that was going to take over the world...) What this actually 
*does* is it adds SIMD (single-instruction, multiple-data) instructions. 
Basically, there's 8 new registers, MMX0 through MMX7, each 64 bits 
wide. Using the new MMX instructions, you can basically treat a given 
MMX register as an array of values (e.g., 4 items of 16 bits each) and 
do element-wise operations over them.

Nothing wrong with that.

Oh yeah, and the MMX registers are the FPU registers.

KLUDGE! >_<

Yes, rather than add 8 *new* registers, MMX just adds new names for the 
existing FPU registers. (But now you have proper random access to them.) 
The reason for this is simple: it means that the OS doesn't have to 
support MMX for context switches to work properly. (I.e., a context 
switch under an OS that doesn't know about MMX won't clobber the MMX 
registers, because the MMX registers *are* the FPU registers, which any 
FPU-aware OS will already be preserving.)

This horrifying kludge still haunts us to this day. Yes, it meant that 
developers could start using MMX because Microsoft released an updated 
version of Windows. On the other hand, it means you can't use MMX (which 
is integer-only) and normal FPU operations at the same time, because one 
will clobber the other. FAIL!

In 1998, AMD released the 3DNow! technology that almost nobody now 
remembers. This basically adds new MMX operations, using the same "MMX 
registers that are really the FPU registers" kludge, for the same reason.

Apparently 3DNow! was never that popular, and is being phased out now. 
Instead, Intel came up with SSE, which adds new registers named XMM. 
(Get it?) Yes, that's right, *finally* they actually added new registers 
rather than kludging old ones. These new XMM registers are 128 bits 
wide, and can be operated as 4 x single-precision floats.

Then SSE2 came along, and added versions of all the MMX instructions 
that work on the XMM registers instead. So now you never need to use the 
old MMX instructions ever again! And now the XMM registers can be 
treated not just as 2 x single-precision floats, but also as (say) 2 x 
double-precision floats, 8 x 16-bit integers, and so on.

Of course, since the OS has to know to include the new XMM registers in 
context switches, SSE is disabled by default. The OS has to explicitly 
enable it before it will work. A bit like the way the processor starts 
up in "real mode" (i.e., 8086 emulation mode), and the OS has to 
manually switch it into "protected mode" (i.e., the normal operating 
mode that all modern software actually freaking uses) during the boot 
sequence.

Then we have AMD64, which runs in 32-bit mode by default until the OS 
switches it to 64-bit mode. (The PC I am using right now is *still* 
running in 32-bit mode, despite possessing a 64-bit processor.) In that 
mode, an extra 8 XMM registers appear (XMM8 to XMM15).

Did you follow all that?

Don't even get me started on all the different memory paging and 
segmentation schemes...

In short, they kept kludging more and more stuff in. Having a 
stack-based FPU register file is a stupid, stupid idea. But now all our 
software depends on this arrangement, so we're stuck with it forever. 
Aliasing the MMX registers to the FPU registers was stupid, but 
fortunately we don't have to live with that one. Memory segmentation was 
stupid, but now we're basically stuck with it. The list goes on...


Post a reply to this message

From: Mike Raiford
Subject: Re: Complicated
Date: 3 Jun 2011 10:50:02
Message: <4de8f49a$1@news.povray.org>
On 6/3/2011 8:48 AM, Invisible wrote:
> On 02/06/2011 03:06 PM, Mike Raiford wrote:
>> So, I've been sort of reading this:
>>
>> http://download.intel.com/design/intarch/manuals/27320401.pdf
>
> Woooo boy, that's one big can of complexity, right there! ;-)
>
>> I've had a pretty good idea of how the 8086 and 8088 deal with the
>> system bus. But, I wanted to understand more about the later generation
>> processors, so I started with the Pentium.
>
> I'm going to sound really old now, but... I remember back in the days
> when the RAM was faster than the CPU. I remember in-order execution
> without pipelines. When I first sat down to read about how modern IA32
> processors actually work... I was pretty shocked. The circuitry seems to
> spend more time deciding how to execute the code than actually, you
> know, *executing* it! o_O
>

Me, too. I remember (I think it was back in the 386 days) when the 
processors started to outpace some memory, you had to start adding wait 
states in order to keep the processor from spamming the memory with too 
many requests. Now the core operates many times the speed of the bus. 
Everything with a modern multi-core CPU is IO bound.

>> I'm on the section dealing with bus arbitration and cache coherency when
>> there are 2 processors in the system.
>
>> It occurs to me that handling the cache when there are 2 parts vying for
>> the same resource can get rather messy.
>
>> I can definitely see some potential for bottle-necks in a
>> multi-processor system when dealing with the bus, since electrically,
>> only one device can place data on the bus at one time. The nice thing
>> is, in system design, you can design your bus the same for single or
>> dual processors. Provided you've wired the proper signals together, and
>> initialized the processors properly with software and certain pin
>> levels, it's totally transparent to the rest of the system.
>
> There are two main problems with trying to connect two CPUs to one RAM
> block:
>
> 1. Bandwidth.
>
> 2. Cache coherence.
>
> Currently, RAM is way, way slower than the CPU. Adding more CPU cores
> simply makes things worse. Unless you're doing a specific type of
> compute-heavy process that doesn't require much RAM access, all you're
> doing is taking the system's main bottleneck and making it twice as bad.
> Instead of having /one/ super-fast CPU sitting around waiting for RAM to
> respond, now you have /two/ super-fast CPUs fighting over who gets to
> access RAM next.
>
> (I've seen plenty of documentation from the Haskell developers where
> they benchmark something, and then find that it goes faster if you turn
> *off* parallelism, because otherwise the multiple cores fight for
> bandwidth or constantly invalidate each other's caches.)

The solution, of course would be to break the task down into small 
blocks that can fit within the CPUs' caches (good locality) and work on 
units that are in areas of memory where cache lines will not overlap. 
Which is all fine and good, but ... not really feasable because you are 
not in charge of where your task's pages physically reside in memory. 
The OS is in charge of that, and it could change the physical layout at 
any moment.

> It seems inevitable that the more memory you have, the slower it is.
> Even if we completely ignore issues of cost, bigger memory = more
> address decode logic + longer traces. Longer traces mean more power,
> more latency, more capacitance, more radio interference. It seems
> inevitable that if you have a really huge memory, it will necessarily be
> very slow.

Right, because all of those elements work against you. It still amazes 
me that a CPU can operate at the speeds it does and still run robustly 
enough to produce good results without completely distorting the signals 
it's handling. Each FET has a capacitance at the gate. They've managed 
to get the total capacitance (traces, gates, etc) so tiny that it 
doesn't kill the signal.

> Similarly, if you have huge numbers of processing elements all trying to
> access the same chunk of RAM through the same bus, you're splitting the
> available bandwidth many, many ways. The result isn't going to be high
> performance.
>
> My personal belief is that the future is NUMA. We already have cache
> hierarchies three or four levels deep, backed by demand-paged virtual
> memory. Let's just stop pretending that "memory" is all uniform with
> identical latency and start explicitly treating it as what it is.
>
> Indeed, sometimes I start thinking about what some kind of hyper-Harvard
> architecture would look like. For example, what happens if the machine
> stack is on-chip? (I.e., it exists in its own unique address space, and
> the circuitry for it is entirely on-chip.) What about if there were
> several on-chip memories optimised for different types of operation?

Don't some RISC processors sort of do this?

> Unfortunately, the answer to all these questions generally ends up being
> "good luck implementing multitasking".
>
> The other model I've looked at is having not a computer with one giant
> memory connected to one giant CPU, but zillions of smallish memories
> connected to zillions of processing elements. The problem with *that*
> model tends to be "how do I get my data to where I need it?"

Right.. There would need to be some sort of controller that could 
transfer data from Block A to Block B. Addressing would be quite ... 
interesting in this scheme.

> As someone else once said, "a supercomputer is a device for turning a
> compute-bound problem into an I/O-bound problem".
>

Pretty much. Unless you're working on something that can fit entirely 
inside the processing units' caches, you'll have exactly that problem.

>> What I understand so far is: One process has the bus, and either reads
>> or writes from/to the bus. The other processor watches the activity and,
>> if it sees an address it has modified it tells the other processor,
>> which passes bus control to the other, puts the data out on the bus,
>> then returns control to the first processor.
>
> http://en.wikipedia.org/wiki/Cache_coherence
> http://en.wikipedia.org/wiki/MESI_protocol
>

Wow. I actually recognized MESI right off: Modified, Exclusive, Shared, 
Invalid. This is exactly what the Pentium uses.

> Looks like what you're describing is a "snooping" implementation. There
> are also other ways to implement this.

Yep. exactly, the LRM snoops the MRM's activity. If it sees that the MRM 
is writing or reading a line that the LRM has marked as modified or 
exclusive, then it signals the MRM that it needs the bus to write out 
what it has.

>
> These days, the CPU is the fastest thing. You can "pipeline" read
> requests by requesting a contiguous block of data. That way, you
> eliminate some of the latency of sending a memory request for each
> datum. (And, let's face it, you only talk to main memory to fill or
> empty cache lines, which are contiguous anyway.)
>

OK, So... essentially, this is burst mode.

> I understand this also has something to do with the internal way that
> the RAM chips do two-dimensional addressing...

I can't remember the specifics, at the moment.

-- 
~Mike


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 3 Jun 2011 11:19:03
Message: <4de8fb67@news.povray.org>
>> I'm going to sound really old now, but... I remember back in the days
>> when the RAM was faster than the CPU. I remember in-order execution
>> without pipelines. When I first sat down to read about how modern IA32
>> processors actually work... I was pretty shocked. The circuitry seems to
>> spend more time deciding how to execute the code than actually, you
>> know, *executing* it! o_O
>
> Me, too. I remember (I think it was back in the 386 days) when the
> processors started to outpace some memory, you had to start adding wait
> states in order to keep the processor from spamming the memory with too
> many requests. Now the core operates many times the speed of the bus.
> Everything with a modern multi-core CPU is IO bound.

Well, I suppose if you want to be picking, it's not bound by I/O 
operations, it's bound by RAM bandwidth and/or latency.

Current trends seem to be towards increasing RAM bandwidth to greater 
and greater amounts, at the expense of also increasing latency. If your 
caches and pipelines and prefetch and branch prediction manage to hige 
the latency, that's fine. If they don't... SLOOOOOW!

There was a time when the CPU core was only a dozen times faster than 
RAM. Those days are gone. Last I heard, if the CPU needs to access main 
memory, you're talking about a 400 clock cycle stall.

At this point, increasing clock speed or adding more cores simply 
increases the amount of time the CPU spends waiting. Even the faster 
memory connections only increase the bandwidth /of the interface/. The 
actual RAM cells aren't getting any faster.

>> (I've seen plenty of documentation from the Haskell developers where
>> they benchmark something, and then find that it goes faster if you turn
>> *off* parallelism, because otherwise the multiple cores fight for
>> bandwidth or constantly invalidate each other's caches.)
>
> The solution, of course would be to break the task down into small
> blocks that can fit within the CPUs' caches (good locality) and work on
> units that are in areas of memory where cache lines will not overlap.

Sometimes this is possible. For example, the latest releases of the 
Haskell run-time system have an independent heap per CPU core, and each 
core can run a garbage collection cycle of its own local heap 
independently of the other cores. Since the heaps never overlap, there's 
no problem here.

The *problem* of course happens when data migrates from the generation-1 
area into the shared generation-2 heap area. Then suddenly you have to 
start worrying about cores invalidating each other's caches and so 
forth. Again, the GC engine uses a block-based system to try to minimise 
this.

Another example: A Haskell thread can generate "sparks" which are tasks 
which can usefully be run in the background. But the developers found 
that if you let /any/ core do so, it tends to slow down rather than 
speed up. Basically, it's best to keep sparks local to the core that 
created them, unless there are cores actually sitting idle.

> Which is all fine and good, but ... not really feasable because you are
> not in charge of where your task's pages physically reside in memory.
> The OS is in charge of that, and it could change the physical layout at
> any moment.

Almost every OS known to Man exposes RAM to the application as a linear 
range of virtual addresses. No two [writeable] pages in your 
application's virtual address space will ever map to the same physical 
address.

>> It seems inevitable that the more memory you have, the slower it is.
>> Even if we completely ignore issues of cost, bigger memory = more
>> address decode logic + longer traces. Longer traces mean more power,
>> more latency, more capacitance, more radio interference. It seems
>> inevitable that if you have a really huge memory, it will necessarily be
>> very slow.
>
> Right, because all of those elements work against you. It still amazes
> me that a CPU can operate at the speeds it does and still run robustly
> enough to produce good results without completely distorting the signals
> it's handling. Each FET has a capacitance at the gate. They've managed
> to get the total capacitance (traces, gates, etc) so tiny that it
> doesn't kill the signal.

Over the distances inside a chip, it's not too bad. If the signal has to 
leave the chip, suddenly the distances, the capacitance, the 
interference, the power requirements increase by an order of magnitude. 
That's why you can have a 2.2 GHz L1 cache, but you have a piffling 0.1 
GHz RAM bus.

>> Indeed, sometimes I start thinking about what some kind of hyper-Harvard
>> architecture would look like. For example, what happens if the machine
>> stack is on-chip? (I.e., it exists in its own unique address space, and
>> the circuitry for it is entirely on-chip.) What about if there were
>> several on-chip memories optimised for different types of operation?
>
> Don't some RISC processors sort of do this?

Certainly there are chips that have used some of these ideas. DSP chips 
often have separate address spaces for code and data, and sometimes 
multiple buses too. It tends not to be used for desktop processors though.

(Hell, anything that isn't 8086-compatible tends not to be used for 
desktop processors! Which is a shame, because 8086 isn't that good...)

>> The other model I've looked at is having not a computer with one giant
>> memory connected to one giant CPU, but zillions of smallish memories
>> connected to zillions of processing elements. The problem with *that*
>> model tends to be "how do I get my data to where I need it?"
>
> Right.. There would need to be some sort of controller that could
> transfer data from Block A to Block B. Addressing would be quite ...
> interesting in this scheme.

It's quite feasible that the processing elements themselves would 
organise forwarding messages to where they need to go. You don't 
necessarily need dedicated switching and routing circuitry.

The trouble, of course, is that as the number of processing elements 
increases, either the number of buses increases geometrically, or the 
communications latency increases geometrically. One or the other.

I gather that several supercomputers make use of AMD Opteron chips.

http://en.wikipedia.org/wiki/Jaguar_%28computer%29

The Opteron is a bit unusual:

http://en.wikipedia.org/wiki/Opteron#Multi-processor_features

http://www.amd.com/us/products/technologies/direct-connect-architecture/Pages/direct-connect-architecture.aspx

Basically, each time you add a new chip, you're adding new buses too, 
increasing bandwidth. The Opteron has a limit of 8 CPUs per motherboard; 
Wikipedia claims you can buy "expensive routing chips" to extend this.

>>> What I understand so far is: One process has the bus, and either reads
>>> or writes from/to the bus. The other processor watches the activity and,
>>> if it sees an address it has modified it tells the other processor,
>>> which passes bus control to the other, puts the data out on the bus,
>>> then returns control to the first processor.
>>
>> http://en.wikipedia.org/wiki/Cache_coherence
>> http://en.wikipedia.org/wiki/MESI_protocol
>>
>
> Wow. I actually recognized MESI right off: Modified, Exclusive, Shared,
> Invalid. This is exactly what the Pentium uses.

This is exactly what almost all systems of this kind do.


Post a reply to this message

From: clipka
Subject: Re: Complicated
Date: 3 Jun 2011 13:57:50
Message: <4de9209e$1@news.povray.org>
Am 03.06.2011 16:45, schrieb Invisible:

> In 1982 (this is the first year in the list so far when I was actually
> *live*!) the 80286 (or "286") appeared. This was the first CPU with
> memory protection.
>
> In 1985, the 80386 ("386") came along. This was the first 32-bit
> processor. (Which is why IA32 is sometimes referred to as "i386", and
> why Linux generally refuses to work with anything older.) This was the
> first processor where the relationship between segment numbers and
> physical memory addresses is programmable rather than hard-wired. In
> other words, this is where memory pages got invented.

Not really; IIRC the first x86 processor to introduce programmable 
mapping of logical addresses to physical memory was the 80286; it could 
only do this on a per-segment basis though.


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 6 Jun 2011 11:59:06
Message: <4decf94a$1@news.povray.org>
On 6/3/2011 7:45, Invisible wrote:
> (By contrast, a *real* 32-bit chip like the Motorola 68000 has registers A0
> through A7 and D0 through D7, and when you do an operation,

Which is fine if you're not trying to be assembly-language compatible.

> In short, they kept kludging more and more stuff in. Having a stack-based
> FPU register file is a stupid, stupid idea.

Not when your FPU is a separate chip from your CPU.

> But now all our software depends on this arrangement,

Not any longer. For example, I believe gcc has a command-line switch to say 
"use x87 instructions" instead of loading floats via the MMX instructions.

> Aliasing the MMX registers to the FPU registers was stupid,

No, it saved chip space.

> The list goes on...

It would be nice if it was practical to throw out all software and start 
over every time we had a new idea, wouldn't it? But then, everything would 
be as successful as Haskell. ;-)

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 6 Jun 2011 12:04:21
Message: <4decfa85$1@news.povray.org>
On 6/3/2011 7:50, Mike Raiford wrote:
> Don't some RISC processors sort of do this?

Actually, all you need to do is accept that maybe C-like/Algol-like 
languages aren't the best approach to programming these types of machines. 
FORTH, for example, is very happy doing bunches of work on the local stack 
before going explicitly out to external memory, and I've seen designs for 
very high-speed FORTH-based chips with 32 or 64 cores per chip that have 
relatively little memory contention because of it.

Go to a language model that's either primitive enough (like FORTH) yet close 
enough to the chip architecture that you can force the programmer to 
structure the algorithm in a way that's efficient, or something high-level 
enough (like Hermes or Haskell perhaps) that a Sufficiently Smart Compiler 
(TM) can restructure the code appropriately.

> Right.. There would need to be some sort of controller that could transfer
> data from Block A to Block B. Addressing would be quite ... interesting in
> this scheme.

This is a well known problem with lots of good solutions, depending on how 
you implement the interconnections. The problem is that lots of algorithms 
are inherently sequential.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 6 Jun 2011 12:56:11
Message: <4ded06ab@news.povray.org>
On 6/3/2011 6:48, Invisible wrote:
> I'm going to sound really old now, but... I remember back in the days when
> the RAM was faster than the CPU.

The first mainframe I worked on had memory clocked at 8x the CPU speed. 7 
DMA channels for each CPU instruction executed. You could be swapping out 
two processes while bringing in two processes without noticing the load.

Even the Atari 400 had RAM clocked twice the CPU speed.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 6 Jun 2011 13:40:09
Message: <4ded10f9@news.povray.org>
On 06/06/2011 04:59 PM, Darren New wrote:
> On 6/3/2011 7:45, Invisible wrote:
>> (By contrast, a *real* 32-bit chip like the Motorola 68000 has
>> registers A0
>> through A7 and D0 through D7, and when you do an operation,
>
> Which is fine if you're not trying to be assembly-language compatible.

That's amusing. The 68000 is a 16-bit processor, which is 
forwards-compatible with the 68020. You run the same code, but now all 
the 32-bit operations automatically go twice as fast. It doesn't /get/ 
much more compatible than that. (Admittedly later processors did 
introduce a few new instructions that won't work on the older models.)

>> In short, they kept kludging more and more stuff in. Having a stack-based
>> FPU register file is a stupid, stupid idea.
>
> Not when your FPU is a separate chip from your CPU.

In what way does having a bizarre machine model help here?

>> But now all our software depends on this arrangement,
>
> Not any longer. For example, I believe gcc has a command-line switch to
> say "use x87 instructions" instead of loading floats via the MMX
> instructions.

Yeah, but every OS will have to support the old arrangement forever 
more, every VM product will have to support it forever more, and every 
processor design will have to support it forever more.

>> Aliasing the MMX registers to the FPU registers was stupid,
>
> No, it saved chip space.

It's quite clear that the design motivation behind this was not chip 
space but OS support. Compared to the space taken up by huge caches, a 
piffling 7 registers is nothing...

>> The list goes on...
>
> It would be nice if it was practical to throw out all software and start
> over every time we had a new idea, wouldn't it? But then, everything
> would be as successful as Haskell. ;-)

This is precisely why Haskell's unofficial motto is "avoid success at 
all costs". (I.e., once you are successful, you have to *care* about 
backwards compatibility.)

I would argue that backwards compatibility is about balance. On the one 
hand, if you change your entire platform every three minutes, nobody 
will build anything for it. (For example, Java.) On the other hand, if 
you support everything forever, you end up with an unmanageable mess. 
(For example, IA32.)

I keep hoping that some day somebody will come up with a chip design 
that runs crappy old 16-bit MS-DOS stuff under software emulation, but 
runs real Big Boy software that people might give a damn about on a 
platform with a modern, coherant design. But apparently I'm just dreaming...

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 6 Jun 2011 14:07:09
Message: <4ded174d$1@news.povray.org>
>> Right.. There would need to be some sort of controller that could
>> transfer
>> data from Block A to Block B. Addressing would be quite ...
>> interesting in
>> this scheme.
>
> This is a well known problem with lots of good solutions, depending on
> how you implement the interconnections. The problem is that lots of
> algorithms are inherently sequential.

Sometimes I start thinking like this:

Why do we have computers in the first place?

To do the sorts of calculations that humans suck at.

What sorts of calculations do humans suck at?

Calculations which aren't easily parallelisable.

If this line of logic is correct... um... we may have a problem here.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 6 Jun 2011 14:12:24
Message: <4ded1888$1@news.povray.org>
On 6/6/2011 10:40, Orchid XP v8 wrote:
> On 06/06/2011 04:59 PM, Darren New wrote:
>> On 6/3/2011 7:45, Invisible wrote:
>>> (By contrast, a *real* 32-bit chip like the Motorola 68000 has
>>> registers A0
>>> through A7 and D0 through D7, and when you do an operation,
>>
>> Which is fine if you're not trying to be assembly-language compatible.
>
> That's amusing. The 68000 is a 16-bit processor, which is
> forwards-compatible with the 68020.

But that's because it has the same machine code. I'm talking about the 8086 
being assembler-language compatible with the 8080.

>>> In short, they kept kludging more and more stuff in. Having a stack-based
>>> FPU register file is a stupid, stupid idea.
>>
>> Not when your FPU is a separate chip from your CPU.
>
> In what way does having a bizarre machine model help here?

First, it's not bizarre; it's pretty much how many (for example) VMs define 
their machine language. It's called a zero-address machine. Second, it's 
because the op codes don't need to have register numbers in them, so they 
can be smaller and hence faster to transfer. Most mathematics involving FP 
that you are actually willing to pay extra to speed up wind up being larger 
expressions, I'd wager. Plus, the intermediate registers were 80 bits.

> Yeah, but every OS will have to support the old arrangement forever more,
> every VM product will have to support it forever more, and every processor
> design will have to support it forever more.

That's not all our software. That's a pretty tiny part of a context switch.

>>> Aliasing the MMX registers to the FPU registers was stupid,
>> No, it saved chip space.
>
> It's quite clear that the design motivation behind this was not chip space
> but OS support.

True, in this case. But why would you say "the old OS works with new 
software to take advantage of this feature" is stupid?

> This is precisely why Haskell's unofficial motto is "avoid success at all
> costs". (I.e., once you are successful, you have to *care* about backwards
> compatibility.)

That's why I mentioned Haskell. Unfortunately, real-world companies building 
billion-dollar semiconductor fabs don't get to actively avoid success.

> I keep hoping that some day somebody will come up with a chip design that
> runs crappy old 16-bit MS-DOS stuff under software emulation, but runs real
> Big Boy software that people might give a damn about on a platform with a
> modern, coherant design.

They do. Intel chips are RISCs interpreting IA32 instructions. :-)


-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: clipka
Subject: Re: Complicated
Date: 6 Jun 2011 14:14:34
Message: <4ded190a$1@news.povray.org>
Am 06.06.2011 19:40, schrieb Orchid XP v8:

> I keep hoping that some day somebody will come up with a chip design
> that runs crappy old 16-bit MS-DOS stuff under software emulation, but
> runs real Big Boy software that people might give a damn about on a
> platform with a modern, coherant design. But apparently I'm just
> dreaming...

That's what Intel tried with the Itanium.

"I'm making a note here: Huge Success."

So for the records, it was AMD who convinced people that a backward 
compatible 64-bit processor would be a much better idea. And it was the 
consumers who bought that message.

In the end it was the users' fear of <Insert Your Favorite 32-bit PC 
Video Game Here> running slower than on their older system that won over 
any rationale.


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 6 Jun 2011 14:27:27
Message: <4ded1c0f@news.povray.org>
On 06/06/2011 07:14 PM, clipka wrote:
> Am 06.06.2011 19:40, schrieb Orchid XP v8:
>
>> I keep hoping that some day somebody will come up with a chip design
>> that runs crappy old 16-bit MS-DOS stuff under software emulation, but
>> runs real Big Boy software that people might give a damn about on a
>> platform with a modern, coherant design. But apparently I'm just
>> dreaming...
>
> That's what Intel tried with the Itanium.
>
> "I'm making a note here: Huge Success."

As far as I can tell, the trouble with Itanium is that it had very, very 
poor performance. This is not much incentive to switch.

(Which is surprising really, because on paper it looks like a really 
good design...)

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: clipka
Subject: Re: Complicated
Date: 6 Jun 2011 14:33:33
Message: <4ded1d7d$1@news.povray.org>
Am 06.06.2011 20:07, schrieb Orchid XP v8:

>> This is a well known problem with lots of good solutions, depending on
>> how you implement the interconnections. The problem is that lots of
>> algorithms are inherently sequential.
>
> Sometimes I start thinking like this:
>
> Why do we have computers in the first place?
>
> To do the sorts of calculations that humans suck at.
>
> What sorts of calculations do humans suck at?
>
> Calculations which aren't easily parallelisable.
>
> If this line of logic is correct... um... we may have a problem here.

Fortunately it isn't.

Humans suck at /any/ calculations requiring higher degree of precision 
than rule-of-thumb estimates. The human brain is "designed" to work 
/despite/ uncertainties rather than avoid or eliminate them.

However, humans also suck at understanding systems, and are much better 
at understanding single entities working on a problem sequentially. At 
least that's typically true for men - maybe the next generation of 
computers needs women as software developers.


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 6 Jun 2011 14:39:46
Message: <4ded1ef2@news.povray.org>
>> If this line of logic is correct... um... we may have a problem here.
>
> Fortunately it isn't.
>
> Humans suck at /any/ calculations requiring higher degree of precision
> than rule-of-thumb estimates. The human brain is "designed" to work
> /despite/ uncertainties rather than avoid or eliminate them.
>
> However, humans also suck at understanding systems, and are much better
> at understanding single entities working on a problem sequentially. At
> least that's typically true for men - maybe the next generation of
> computers needs women as software developers.

I don't think I agree with any of this.

Pick any two locations in London. Ask a London cabbie how to get from 
one to the other. I guarantee they can do it faster than any satnav 
computer.

Pick up a picture of Harrison Ford. Show it to a bunch of people. Almost 
all of them will instantly be able to tell you who it's a picture of. 
Now try getting a computer to figure that out. Good luck with that.

The human brain is really very, very good at certain tasks. Quite 
astonishingly good, when you actually think about it. But it's very bad 
at certain other tasks.

I think of it as being a bit like GPGPU. The brain is a special-purpose 
computational device which is absurdly good at the tasks its designed 
for, and quite bad at everything else. To get good performance on other 
problems, you have to artificially transform them into a problem that 
"looks like" one they're good at. (A bit like the way GPGPU originally 
meant encoding your data as video textures before you can process it.) 
There are people in the Guinness Book of Records who can do crazy things 
like compute the 72nd root of a 15-digit number in their head in under 
10 seconds. It's just that most people can't do that.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 6 Jun 2011 14:42:56
Message: <4ded1fb0@news.povray.org>
>> In what way does having a bizarre machine model help here?
>
> First, it's not bizarre; it's pretty much how many (for example) VMs
> define their machine language. It's called a zero-address machine.
> Second, it's because the op codes don't need to have register numbers in
> them, so they can be smaller and hence faster to transfer. Most
> mathematics involving FP that you are actually willing to pay extra to
> speed up wind up being larger expressions, I'd wager. Plus, the
> intermediate registers were 80 bits.

I suppose if you had a really deep stack, this might make sense. You 
could just keep subexpressions on the stack in their natural order, and 
everything would be fine. Unfortunately, 7 deep is nowhere near enough. 
You end up needing to constantly rearrange the data to avoid spilling 
registers back to main memory. (The only explanation I can come up with 
is that if RAM is faster than CPU, spilling is no biggie.)

>> It's quite clear that the design motivation behind this was not chip
>> space
>> but OS support.
>
> True, in this case. But why would you say "the old OS works with new
> software to take advantage of this feature" is stupid?

Kludging the design in a way which will haunt us forever just to get a 
product to market a few months faster sounds pretty stupid to me.

>> This is precisely why Haskell's unofficial motto is "avoid success at all
>> costs". (I.e., once you are successful, you have to *care* about
>> backwards compatibility.)
>
> That's why I mentioned Haskell. Unfortunately, real-world companies
> building billion-dollar semiconductor fabs don't get to actively avoid
> success.

Fortunately, Haskell gave up avoiding success some time ago...

>> I keep hoping that some day somebody will come up with a chip design that
>> runs crappy old 16-bit MS-DOS stuff under software emulation, but runs
>> real
>> Big Boy software that people might give a damn about on a platform with a
>> modern, coherant design.
>
> They do. Intel chips are RISCs interpreting IA32 instructions. :-)

In other words, they are RISC chips with none of the advantages of RISC.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: clipka
Subject: Re: Complicated
Date: 6 Jun 2011 15:02:40
Message: <4ded2450@news.povray.org>
Am 06.06.2011 20:27, schrieb Orchid XP v8:
> On 06/06/2011 07:14 PM, clipka wrote:
>> Am 06.06.2011 19:40, schrieb Orchid XP v8:
>>
>>> I keep hoping that some day somebody will come up with a chip design
>>> that runs crappy old 16-bit MS-DOS stuff under software emulation, but
>>> runs real Big Boy software that people might give a damn about on a
>>> platform with a modern, coherant design. But apparently I'm just
>>> dreaming...
>>
>> That's what Intel tried with the Itanium.
>>
>> "I'm making a note here: Huge Success."
>
> As far as I can tell, the trouble with Itanium is that it had very, very
> poor performance. This is not much incentive to switch.
>
> (Which is surprising really, because on paper it looks like a really
> good design...)

Surprising?

The concept relied heavily on compile-time optimization, which may still 
have had room for optimization back then.

The CPU was designed to work with RAMbus, which turned out to have 
serious initial performance problems on the RAM chip side, and AFAIK 
never managed to catch up with improvements on the DDR protocol.

The CPU was a fairly fresh start, so there may have been significantly 
more room for improvement in the chip design than in contemporary x86 
designs.

I'm also not sure whether it was "very, very" poor performance.


Post a reply to this message

From: clipka
Subject: Re: Complicated
Date: 6 Jun 2011 15:28:15
Message: <4ded2a4f$1@news.povray.org>
Am 06.06.2011 20:39, schrieb Orchid XP v8:
>>> If this line of logic is correct... um... we may have a problem here.
>>
>> Fortunately it isn't.
>>
>> Humans suck at /any/ calculations requiring higher degree of precision
>> than rule-of-thumb estimates. The human brain is "designed" to work
>> /despite/ uncertainties rather than avoid or eliminate them.
>>
>> However, humans also suck at understanding systems, and are much better
>> at understanding single entities working on a problem sequentially. At
>> least that's typically true for men - maybe the next generation of
>> computers needs women as software developers.
>
> I don't think I agree with any of this.
>
> Pick any two locations in London. Ask a London cabbie how to get from
> one to the other. I guarantee they can do it faster than any satnav
> computer.
>
> Pick up a picture of Harrison Ford. Show it to a bunch of people. Almost
> all of them will instantly be able to tell you who it's a picture of.
> Now try getting a computer to figure that out. Good luck with that.

Not a contradiction to my point; note that /those/ types of 
"calculations" require almost exactly the /opposite/ of precision. Which 
is the domain /computers/ suck at.

For instance, the answers from the people to whom you show the Harrison 
Ford photograph will probably often contain phrases such as "I /think/ 
that's Harrison Ford": They fail at identifying him beyond any doubt 
(i.e. /exactly/), and instead identify him with a certain "error margin".

Likewise, the London cabbie will /not/ pick /the/ fastest route. He'll 
just pick a "sufficiently fast" route. Based not on parameters that can 
be exactly quantified, but on experience and intuition. And not because 
he /knows/ the route to be fast, but because he's /sufficiently 
convinced/ it is.

> The human brain is really very, very good at certain tasks. Quite
> astonishingly good, when you actually think about it. But it's very bad
> at certain other tasks.

Exactly. And among those "certain other tasks" is virtually anything 
involving precise computations.

> There are people in the Guinness Book of Records who can do crazy things
> like compute the 72nd root of a 15-digit number in their head in under
> 10 seconds. It's just that most people can't do that.

Yes, you /can/ train a human to do high-precision calculations. But 
you'd need a huge number of such people (and a REALLY HUGE supply of 
coffee :-)) to perform even the simplest multi-step calculations that way.


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 04:37:14
Message: <4dede33a$1@news.povray.org>
>> I don't think I agree with any of this.
>>
>> Pick any two locations in London. Ask a London cabbie how to get from
>> one to the other. I guarantee they can do it faster than any satnav
>> computer.
>>
>> Pick up a picture of Harrison Ford. Show it to a bunch of people. Almost
>> all of them will instantly be able to tell you who it's a picture of.
>> Now try getting a computer to figure that out. Good luck with that.
>
> Not a contradiction to my point; note that /those/ types of
> "calculations" require almost exactly the /opposite/ of precision. Which
> is the domain /computers/ suck at.

>> The human brain is really very, very good at certain tasks. Quite
>> astonishingly good, when you actually think about it. But it's very bad
>> at certain other tasks.
>
> Exactly. And among those "certain other tasks" is virtually anything
> involving precise computations.

To quote myself again: I don't agree with any of this.

Try walking across the room. Trust me, this requires some pretty damned 
precise computations. Don't believe me? Drink some alcohol, and try the 
same task. Hard, isn't it? You know robotics engineers have struggled 
for years to make a bipedal robot that can perform the same apparently 
trivial task?

Balance is hard. A few grams one side or the other and you fall over. 
That sounds pretty precise to me. And yet people ride bicycles. How many 
robots have you seen ride a bicycle?

You say people can't recognise a familiar face with /certainty/, but I 
reject that. A computer might look at a face and rate the probability of 
it belonging to various people, but when I see a person I know, I *know* 
exactly who I'm looking at. Instantly. What's more, when I see a 
computer-generated image of Davy Jones, I recognise it as resembling 
Bill Nighy. How many computer facial recognition programs can do that? 
Again, sounds pretty damned accurate to me.

There are computer programs that compute a "fingerprint" of a piece of 
music, and can supposedly recognise the same recording that has been 
altered slightly. But a human listener can recognise the same piece of 
music performed by a completely different group, and a totally unrelated 
style. No computer can do that. And it's not just that humans use more 
"fuzzy" and less "precise" matching to do their recognition; if that 
were the case, the matching would just be really unreliable. But 
actually, humans are REALLY FRIGGING GOOD at this stuff.


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 09:37:03
Message: <4dee297f$1@news.povray.org>
On 6/7/2011 1:37, Invisible wrote:
> But a human listener can recognise the same piece of music
> performed by a completely different group, and a totally unrelated style. No
> computer can do that.

This is incorrect. I watched our server listen to someone singing 
"Yesterday" on American Idol and our computer correctly recognizing it as a 
Beatles song.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 7 Jun 2011 11:30:01
Message: <web.4dee408c8dd72f563771cd8e0@news.povray.org>
Invisible <voi### [at] devnull> wrote:
> Try walking across the room. Trust me, this requires some pretty damned
> precise computations. Don't believe me? Drink some alcohol, and try the
> same task. Hard, isn't it? You know robotics engineers have struggled
> for years to make a bipedal robot that can perform the same apparently
> trivial task?
>
> Balance is hard. A few grams one side or the other and you fall over.
> That sounds pretty precise to me. And yet people ride bicycles. How many
> robots have you seen ride a bicycle?
>
> You say people can't recognise a familiar face with /certainty/, but I
> reject that. A computer might look at a face and rate the probability of
> it belonging to various people, but when I see a person I know, I *know*
> exactly who I'm looking at. Instantly. What's more, when I see a
> computer-generated image of Davy Jones, I recognise it as resembling
> Bill Nighy. How many computer facial recognition programs can do that?
> Again, sounds pretty damned accurate to me.
>
> There are computer programs that compute a "fingerprint" of a piece of
> music, and can supposedly recognise the same recording that has been
> altered slightly. But a human listener can recognise the same piece of
> music performed by a completely different group, and a totally unrelated
> style. No computer can do that. And it's not just that humans use more
> "fuzzy" and less "precise" matching to do their recognition; if that
> were the case, the matching would just be really unreliable. But
> actually, humans are REALLY FRIGGING GOOD at this stuff.

You have a grave misconception here:
As has been said before, the human brain is anything but precise. It actually is
very very good at correcting errors and adapting to them. Walking
across a room is not a precalculated series of movements like it would be for
most robots. The brain is constantly regulating all your movements dependent on
the millions of information it receives from your body.
Whenever anything happens that's not quite as it was "planned" it will just
change the movement slightly without your conciousness even noticing.

Facial recognition is much the same. The human brain has dedicated structures
for exactly that purpose. If they are damaged, the person suddenly can't
recognize faces anymore. I once saw a report about someone having a stroke and
losing this ability. He was unable to relearn this ability, because the
"dedicated hardware" could not be "emulated in software", so to speak. Those
dedicated structures have evolved over millenia for this one single purpose. You
cannot expect a computer to perform with the same efficiency on a general
purpose processor.

And about accuracy of facial recognition:
How sure you are about recognizing someone depends largely on how well you know
that person and if there's other persons you know that look alike. If someone
has a distinct face than your confidence of recognition is high. But if you look
at identical twins you'll be less sure of recognizing them correctly.
So how can you say you are 100% sure you recognized someone? It's just that your
confidence is high enough for you to think you are 100% sure.

Regards
Aydan


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 11:38:13
Message: <4dee45e5$1@news.povray.org>
On 07/06/2011 04:28 PM, Aydan wrote:

> Walking
> across a room is not a precalculated series of movements like it would be for
> most robots.

...which is why the robot is wrong. The *correct* way to navigate 
unknown terrain is to constantly monitor and adapt to your surroundings.

> Whenever anything happens that's not quite as it was "planned" it will just
> change the movement slightly without your conciousness even noticing.

Yes. And these changes are very, very precise. If they weren't, you'd 
fall over. The fact that it does this in a feedback loop doesn't negate 
the need for very exact, very fine controls.

> Facial recognition is much the same. The human brain has dedicated structures
> for exactly that purpose. If they are damaged, the person suddenly can't
> recognize faces anymore.

Like I said: The human brain is an elaborate special-purpose 
computational device which is ridiculously good at the things it's 
designed for, and drastically less good at the things it isn't designed for.

> And about accuracy of facial recognition:
> How sure you are about recognizing someone depends largely on how well you know
> that person and if there's other persons you know that look alike.

People have actually done research on this. The vast majority of people 
recognise other people with stunning accuracy. Not that they /think/ 
they do, but that you can actually /measure/ this.

That said, it's also been found that people from a different ethnic 
group tend to look more uniform to you than they do to people belonging 
to that ethnic group. Whether this is a genetic or environmental thing 
is a subject of some debate. (Although it seems quite reasonable to me 
that it's simply a calibration issue.)


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 11:39:23
Message: <4dee462b@news.povray.org>
>> But a human listener can recognise the same piece of music
>> performed by a completely different group, and a totally unrelated
>> style. No computer can do that.
>
> This is incorrect. I watched our server listen to someone singing
> "Yesterday" on American Idol and our computer correctly recognizing it
> as a Beatles song.

This would be a rather stunning result for AI. Last time I checked, AI 
is poor to the point of being utterly useless for most if not all 
recognition tasks. Even something trivial like OCR doesn't work very 
well yet.


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 11:40:27
Message: <4dee466b$1@news.povray.org>
On 6/7/2011 8:28, Aydan wrote:
> confidence is high enough for you to think you are 100% sure.

Or, more precisely, you can be 100% sure and still be wrong. :-)

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 11:41:55
Message: <4dee46c3@news.povray.org>
On 6/7/2011 8:39, Invisible wrote:
> This would be a rather stunning result for AI.

It wasn't even what you'd call AI nowadays. It was just pattern matching.

Why are you using the subjunctive, as if this is a fictional story?

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 11:42:34
Message: <4dee46ea$1@news.povray.org>
On 07/06/2011 04:40 PM, Darren New wrote:
> On 6/7/2011 8:28, Aydan wrote:
>> confidence is high enough for you to think you are 100% sure.
>
> Or, more precisely, you can be 100% sure and still be wrong. :-)

If you want to split hairs, even events with probability 1 can fail to 
happen. (Contrary to what your introductory statistics book probably 
told you...)


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 11:45:01
Message: <4dee477d$1@news.povray.org>
On 07/06/2011 04:41 PM, Darren New wrote:
> On 6/7/2011 8:39, Invisible wrote:
>> This would be a rather stunning result for AI.
>
> It wasn't even what you'd call AI nowadays. It was just pattern matching.

Given that two different, unrelated recordings of the same piece of 
music have entirely unrelated waveforms, I'm not sure how you can claim 
that simple pattern matching would find such a complex similarity.

> Why are you using the subjunctive, as if this is a fictional story?

Damnit, now I have to go look up what a "subjunctive" is...


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 7 Jun 2011 11:50:12
Message: <4dee48b4$1@news.povray.org>
On 07/06/2011 04:45 PM, Invisible wrote:

> Damnit, now I have to go look up what a "subjunctive" is...

NAAAARGH! IT BURNS! >_<


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 11:58:54
Message: <4dee4abe$1@news.povray.org>
On 6/7/2011 8:45, Invisible wrote:
> I'm not sure how you can claim that
> simple pattern matching would find such a complex similarity.

I'm not saying it would. I'm saying it *did*.

>> Why are you using the subjunctive, as if this is a fictional story?
> Damnit, now I have to go look up what a "subjunctive" is...

Yep.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 7 Jun 2011 12:00:00
Message: <web.4dee49cb8dd72f563771cd8e0@news.povray.org>
Invisible <voi### [at] devnull> wrote:
> On 07/06/2011 04:28 PM, Aydan wrote:
>
> > Walking
> > across a room is not a precalculated series of movements like it would be for
> > most robots.
>
> ...which is why the robot is wrong. The *correct* way to navigate
> unknown terrain is to constantly monitor and adapt to your surroundings.
>
> > Whenever anything happens that's not quite as it was "planned" it will just
> > change the movement slightly without your conciousness even noticing.
>
> Yes. And these changes are very, very precise. If they weren't, you'd
> fall over. The fact that it does this in a feedback loop doesn't negate
> the need for very exact, very fine controls.

I'd say the changes are NOT precise but they are minute and the update rate is
fast. So fast that an error in an update will be negated with the next update
and the control loop is adapted constantly to minimize errors. It's still not
what I would call precise.

If the human body would be capable of precice movement then you should be able
to repeat movements exactly every time you do them. But that's not how it turns
out.
Try throwing a ball at something. You won't be able to hit the same spot twice
in a row. If you practice very very hard, you might get close but you still
won't hit the same spot every time.


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 7 Jun 2011 12:00:01
Message: <web.4dee4a548dd72f563771cd8e0@news.povray.org>
Invisible <voi### [at] devnull> wrote:
> On 07/06/2011 04:41 PM, Darren New wrote:
> > On 6/7/2011 8:39, Invisible wrote:
> >> This would be a rather stunning result for AI.
> >
> > It wasn't even what you'd call AI nowadays. It was just pattern matching.
>
> Given that two different, unrelated recordings of the same piece of
> music have entirely unrelated waveforms, I'm not sure how you can claim
> that simple pattern matching would find such a complex similarity.
>
> > Why are you using the subjunctive, as if this is a fictional story?
>
> Damnit, now I have to go look up what a "subjunctive" is...

You're not matching the waveform but the spectrum.


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 12:18:21
Message: <4dee4f4d$1@news.povray.org>
On 6/7/2011 8:57, Aydan wrote:
> Invisible<voi### [at] devnull>  wrote:
>> On 07/06/2011 04:41 PM, Darren New wrote:
>>> On 6/7/2011 8:39, Invisible wrote:
>>>> This would be a rather stunning result for AI.
>>>
>>> It wasn't even what you'd call AI nowadays. It was just pattern matching.
>>
>> Given that two different, unrelated recordings of the same piece of
>> music have entirely unrelated waveforms, I'm not sure how you can claim
>> that simple pattern matching would find such a complex similarity.
>>
>>> Why are you using the subjunctive, as if this is a fictional story?
>>
>> Damnit, now I have to go look up what a "subjunctive" is...
>
> You're not matching the waveform but the spectrum.

Or, in this case, "I went to the store yesterday" followed by "that would be 
cool if it were possible."

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 7 Jun 2011 13:22:19
Message: <4dee5e4b$1@news.povray.org>
>> Yes. And these changes are very, very precise. If they weren't, you'd
>> fall over. The fact that it does this in a feedback loop doesn't negate
>> the need for very exact, very fine controls.
>
> I'd say the changes are NOT precise but they are minute and the update rate is
> fast.

That's one valid way to control error, yes. But I still don't think 
that's how the human brain achieves precision, for the most part.

> If the human body would be capable of precice movement then you should be able
> to repeat movements exactly every time you do them.

Yes.

> But that's not how it turns out.

Really?

> Try throwing a ball at something. You won't be able to hit the same spot twice
> in a row. If you practice very very hard, you might get close but you still
> won't hit the same spot every time.

Or how about this: Try pressing the same keys on a keyboard in the same 
complex sequence, with your eyes closed.

Oh, wait... I can actually do that. And I frequently do. On a daily 
basis, in fact. Obviously my brain lacks the "precision" necessary to 
position my fingers to exactly align with the notes even though there's 
no tactile feedback until I actually touch the key...

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Orchid XP v8
Subject: Re: Complicated
Date: 7 Jun 2011 13:44:35
Message: <4dee6383$1@news.povray.org>
On 07/06/2011 04:58 PM, Darren New wrote:
> On 6/7/2011 8:45, Invisible wrote:
>> I'm not sure how you can claim that
>> simple pattern matching would find such a complex similarity.
>
> I'm not saying it would. I'm saying it *did*.

And if I told you that scientists have come up with a computer program 
that can accurately estimate a person's intelligence from an analysis of 
their DNA, you'd call BS. Even though you don't have a shred of proof 
that it's not true, and there's no logical reason why it's impossible. 
You wouldn't believe it.

And that's why when somebody says "one time I did <insert very unlikely 
thing here>", people tend not to believe it.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 7 Jun 2011 14:34:23
Message: <4dee6f2f$1@news.povray.org>
On 6/7/2011 10:44, Orchid XP v8 wrote:
> And that's why when somebody says "one time I did <insert very unlikely
> thing here>", people tend not to believe it.

So, you're saying I'm lying?

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 7 Jun 2011 14:35:00
Message: <web.4dee6e6c8dd72f563771cd8e0@news.povray.org>
Orchid XP v8 <voi### [at] devnull> wrote:
> Or how about this: Try pressing the same keys on a keyboard in the same
> complex sequence, with your eyes closed.
>
> Oh, wait... I can actually do that. And I frequently do. On a daily
> basis, in fact. Obviously my brain lacks the "precision" necessary to
> position my fingers to exactly align with the notes even though there's
> no tactile feedback until I actually touch the key...

Every time you touch a key you get the feedback you need to compensate for
drift, because you feel if you were to the right or to the left of the key
center or you hit the wrong key entirely.
The same for touch typing on a computer keyboard. You wouldn't be able to do
that on a touchscreen without tactile feedback where the keys actually are.


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 7 Jun 2011 14:50:00
Message: <web.4dee72ba8dd72f563771cd8e0@news.povray.org>
Orchid XP v8 <voi### [at] devnull> wrote:
> Or how about this: Try pressing the same keys on a keyboard in the same
> complex sequence, with your eyes closed.
>
> Oh, wait... I can actually do that. And I frequently do. On a daily
> basis, in fact. Obviously my brain lacks the "precision" necessary to
> position my fingers to exactly align with the notes even though there's
> no tactile feedback until I actually touch the key...

As for precision, try the following experiment:
1. Sit in front of your computer and put your finger on a key.
2. Close your eyes
3. wave aroud wildly with your arms
4. put the finger back on the key from step one.
5. open your eyes
Did you hit the same key? I doubt it.
If you can do that than that's what I'd call precice.
Moving youf finger a few centimeters without watching and hitting a key that is
more than a finger wide is not precise.


Post a reply to this message

From: Patrick Elliott
Subject: Re: Complicated
Date: 7 Jun 2011 18:18:15
Message: <4deea3a7$1@news.povray.org>
On 6/7/2011 10:22 AM, Orchid XP v8 wrote:
> Or how about this: Try pressing the same keys on a keyboard in the same
> complex sequence, with your eyes closed.
>
> Oh, wait... I can actually do that. And I frequently do. On a daily
> basis, in fact. Obviously my brain lacks the "precision" necessary to
> position my fingers to exactly align with the notes even though there's
> no tactile feedback until I actually touch the key...
>
Betting that, sans mechanical failure, or vibration, a robot would wear 
down a very "tiny" spot on each keyboard, following such a complex 
pattern, while humans would have a wider area of wearing. That said, the 
hands, being a high use part, with specific adaptations *may* include 
additional feedback, or more precise control, specifically due to the 
fact that using them *requires* it. Throwing a ball is a bit different, 
it requires larger muscles, more motion, usually doesn't imply/require 
as much precision, and is more dependent on anomalies in the position of 
other limbs, this means a much *larger* number of inputs, more variance, 
and probably less precise control, since you would have to be processing 
feedback for nearly every muscle in the body, to get anything close to 
the same level of precision as your hands, which can remain in a fixed 
position, or resting against something, which minimizes secondary movements.


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 8 Jun 2011 04:03:07
Message: <4def2cbb@news.povray.org>
On 07/06/2011 07:49 PM, Aydan wrote:

> As for precision, try the following experiment:
> 1. Sit in front of your computer and put your finger on a key.
> 2. Close your eyes
> 3. wave aroud wildly with your arms
> 4. put the finger back on the key from step one.
> 5. open your eyes
> Did you hit the same key? I doubt it.

News flash: Robots can't do this either.

For example, a hard drive has a "servo track" recorded on one platter, 
so that the read/write heads can sense where they are, since the voice 
coils that steer the heads can't reliably return to the same location 
with the necessary precision.

This, even though those voice coils are controlled by a normal computer, 
which is capable of doing perfectly "precise" calculations.

This has nothing to do with the precision of the calculations that the 
controller performs, be it a computer or a brain. It's just an inherent 
result of mechanical devices being imprecise.

> If you can do that than that's what I'd call precice.
> Moving your finger a few centimeters without watching and hitting a key that is
> more than a finger wide is not precise.

You don't play a musical instrument, do you?

Let me tell you, the black keys are *narrower* than a human finger. And 
if you're not careful, your fingers slip off the side. Doesn't sound 
very nice...

Anyway, if that fails to convince you, try throwing a ball through a 
hoop. By the time you get any feedback about whether you hit or not, 
it's far too late to do anything about it; you've already let go of the 
ball! And yet, many people manage to throw precisely enough to do this 
reliably.

Similar story for anyone who plays darts, snooker, tennis, ...


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 8 Jun 2011 04:10:33
Message: <4def2e79$1@news.povray.org>
On 07/06/2011 07:34 PM, Darren New wrote:
> On 6/7/2011 10:44, Orchid XP v8 wrote:
>> And that's why when somebody says "one time I did <insert very unlikely
>> thing here>", people tend not to believe it.
>
> So, you're saying I'm lying?

I'm saying that if you casually claim to have solved a problem which has 
stumped AI researchers for decades, I'm going to be /slightly sceptical/ 
about it. Which seems quite rational to me...


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 8 Jun 2011 13:48:54
Message: <4defb606$1@news.povray.org>
On 6/8/2011 1:10, Invisible wrote:
> On 07/06/2011 07:34 PM, Darren New wrote:
>> On 6/7/2011 10:44, Orchid XP v8 wrote:
>>> And that's why when somebody says "one time I did <insert very unlikely
>>> thing here>", people tend not to believe it.
>>
>> So, you're saying I'm lying?
>
> I'm saying that if you casually claim to have solved a problem which has
> stumped AI researchers for decades, I'm going to be /slightly sceptical/
> about it. Which seems quite rational to me...

Recognising a tune has stumped researches for decades?

I didn't solve it. The guys who invented MP3 solved it. I just used it to 
build a bigger system, then watched it work.

What's unlikely about a computer figuring out the primary pitches of a 
recorded piece of music, comparing it to the primary pitches of other music, 
and deciding they're the same?  Is that more amazing than tineye?

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Aydan
Subject: Re: Complicated
Date: 8 Jun 2011 14:30:00
Message: <web.4defbf6e8dd72f563771cd8e0@news.povray.org>
Invisible <voi### [at] devnull> wrote:
> On 07/06/2011 07:49 PM, Aydan wrote:
>
> > As for precision, try the following experiment:
> > 1. Sit in front of your computer and put your finger on a key.
> > 2. Close your eyes
> > 3. wave aroud wildly with your arms
> > 4. put the finger back on the key from step one.
> > 5. open your eyes
> > Did you hit the same key? I doubt it.
>
> News flash: Robots can't do this either.

They absolutely can. Have a look at industrial robots

> For example, a hard drive has a "servo track" recorded on one platter,
> so that the read/write heads can sense where they are, since the voice
> coils that steer the heads can't reliably return to the same location
> with the necessary precision.

That's not a robot

> This, even though those voice coils are controlled by a normal computer,
> which is capable of doing perfectly "precise" calculations.
>
> This has nothing to do with the precision of the calculations that the
> controller performs, be it a computer or a brain. It's just an inherent
> result of mechanical devices being imprecise.

You should not conclude the precision of all possible drive mechanisms from the
precision if a single one.
HDD head positioning is done gearless. This is inherently imprecise.
They did it like that to be fast, reliable (no worn gears), and they knew they
can get the feedbak they need for accuracy.
Industrial robots for example have geared drives and you can have them move from
one positio to another and back to the exact same position without needing
external calibration. This is because they use stepper motors and geared drives
with very little play for exact reproducability of positions.
You can have one of those move for hours and it won't drift.
And it doesn't get feedback if it's still on track either.

> > If you can do that than that's what I'd call precice.
> > Moving your finger a few centimeters without watching and hitting a key that is
> > more than a finger wide is not precise.
>
> You don't play a musical instrument, do you?

No, but in this case it doesn't matter.

> Let me tell you, the black keys are *narrower* than a human finger. And
> if you're not careful, your fingers slip off the side. Doesn't sound
> very nice...

That may be, but does it really matter if you are a  millimeter off?
And let's say you move your hand about 10 cm and can hit a key within a
millimeter. Sounds realistic? That's still only 1% accuracy.
Your printer head for example can do much better. It can position to a fraction
of a millimeter over 20cm. Multiple times. Without recalibrating.
CNC machines can position to less than a tenth of a millimeter over several
meters. They don't get feedback either. They calibrate onec before starting a
process and run through the process without the need to recalibrate.

> Anyway, if that fails to convince you, try throwing a ball through a
> hoop. By the time you get any feedback about whether you hit or not,
> it's far too late to do anything about it; you've already let go of the
> ball! And yet, many people manage to throw precisely enough to do this
> reliably.

Precisely enough? Right.

Even the absolute pros won't be able to hit the hoop all the time exactly in the
center without touching the rim.
Sinking the ball has a much higher probability, because , up to a point it
doesn't matter if you hit the rim, it will still go in.
A basketball has a diameter of about 24cm the hoop has a diameter of about 45cm.
That makes 10 cm of error margin right there.
Let's say you need to hit the hoop within a radius of 15cm from a distance of
say 5 meters.
That's a whopping 3% of accuracy.
Even if you go out to 15m distance youl only be at 1% accuracy.
Not what I'd call accurate in robot terms.
Program a robot to throw the ball and you'll get better precision once you have
it calibrated properly.
That's the big difference: A human can quite confidently throw a ballinto a hoop
from a multitude of positions without much "setup" time.
But once a robot is calibrated to it's position it can hit the target forever.
The human usually can't.

> Similar story for anyone who plays darts, snooker, tennis, ...

OK, next time you are in a Pub with a darts board, have a look at the
"professionals" and how often they actually hit the triple 20 if they want to.


Post a reply to this message

From: Le Forgeron
Subject: Re: Complicated
Date: 8 Jun 2011 16:05:51
Message: <4defd61f$1@news.povray.org>
Le 08/06/2011 20:29, Aydan nous fit lire :
>> > News flash: Robots can't do this either.
> They absolutely can. Have a look at industrial robots
> 

Well, in fact, industrial robots have sequences of fixed positions on
end of run for each axis (be it a translation or rotation) to regularly
reassign the reading of their sensors. Usually perform at start-up and
during the production cycle.

(kind of: push motor to maximum right (against physical stop), store
sensor value. push motor to maximum left... store value. Update sensor's
dataset (for interpolating curve of sensor))
For advanced systems, the physical stop can be replaced by video capture
with pattern matching.

Even the coding wheels (alternative binary on strips with different
frequencies) can only be assumed to have an accurate relative value.

And if you know a bit about using a graduated wheel connected to a
screw, you know that you must always measure by moving from the same
direction, as the screw does not fit the bold exactly in both directions.


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 9 Jun 2011 04:12:26
Message: <4df0806a$1@news.povray.org>
On 07/06/2011 04:57 PM, Aydan wrote:

> You're not matching the waveform but the spectrum.

And computing the "spectrum" of a time-varying signal is still an open 
research problem.


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 9 Jun 2011 04:19:57
Message: <4df0822d$1@news.povray.org>
>> News flash: Robots can't do this either.
>
> They absolutely can. Have a look at industrial robots

We have several robots in our lab. Every single one of them has sensors 
to detect where the various moving parts are. Every single one runs a 
calibration routine of varying degrees of slowness when you turn it on 
and/or reset it.

>> For example, a hard drive has
>
> That's not a robot

Yes it is. So is a washing machine, or a printer, or any other 
electromechanical device of similar complexity.

> You should not conclude the precision of all possible drive mechanisms from the
> precision if a single one.

My point still stands: The fact that a given mechanism isn't very 
precise doesn't mean that the thing controlling it is inherently imprecise.


Post a reply to this message

From: Invisible
Subject: Re: Complicated
Date: 9 Jun 2011 04:34:56
Message: <4df085b0$1@news.povray.org>
> What's unlikely about a computer figuring out the primary pitches of a
> recorded piece of music, comparing it to the primary pitches of other
> music, and deciding they're the same?

Here's one for you: Given a recording of a single pure tone, can you 
determine what pitch that is?

Unfortunately, nobody has yet found a way to do this reliably. I've yet 
to find a guitar tuner that can perform this apparently trivial task.

Now, you're telling me that you have something that can take a 
/non-stationary/ wave containing an arbitrarily complex mixture of tones 
that vary over time and actually deduce something meaningful from it?

Further, you're telling me that it can actually do this with such 
reliability that it can even recognise completely different renditions 
of the same piece of music, without false-positives or false-negatives?

That would be a pretty insane result if it were true.

> Is that more amazing than tineye?

I don't know. Does tineye actually /work/?

More to the point, if I draw a rendition of The Wet Bird in pencil, 
would tineye recognise it as the same image? /That/ would be a problem 
of comparable difficulty. I don't doubt that you can probably determine 
whether two slightly different versions of the same image match, or 
whether two slightly different versions of the same sound recording 
match. But completely different versions? That would require some insane AI.


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 9 Jun 2011 11:22:56
Message: <4df0e550$1@news.povray.org>
On 6/9/2011 1:12, Invisible wrote:
> On 07/06/2011 04:57 PM, Aydan wrote:
>
>> You're not matching the waveform but the spectrum.
>
> And computing the "spectrum" of a time-varying signal is still an open
> research problem.

Apparently not.

http://en.wikipedia.org/wiki/Spectrogram

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Complicated
Date: 9 Jun 2011 11:28:17
Message: <4df0e691$1@news.povray.org>
On 6/9/2011 1:34, Invisible wrote:
> Now, you're telling me that you have something that can take a
> /non-stationary/ wave containing an arbitrarily complex mixture of tones
> that vary over time and actually deduce something meaningful from it?

You mean, like Verizon VCast Song ID?
Music Brainz Picard?
Shazam (http://www.shazam.com/)

> Further, you're telling me that it can actually do this with such
> reliability that it can even recognise completely different renditions of
> the same piece of music, without false-positives or false-negatives?

No, I didn't say that.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

Goto Latest 50 Messages Next 2 Messages >>>

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.