• Computer architecture (was: Concertina II Progress)

    From Anton Ertl@21:1/5 to Paul A. Clayton on Sun Dec 3 15:01:48 2023
    "Paul A. Clayton" <paaronclayton@gmail.com> writes:
    A uniquely difficult architecture like x86 increases the barrier
    to competition both from patents and organizational knowledge and
    tools. While MIPS managed to suppress clones with its patent on
    unaligned loads (please correct any historical inaccuracy), Intel
    was better positioned to discourage software-compatible
    competition — and not just financially.

    Really? There is software-compatible competition to Intel. Not so
    much for MIPS (maybe Loongson).

    I suspect that the bad reputation of x86 among computer architects
    — especially with the biases from Computer Architecture: A
    Quantitative Approach which substantially informs computer
    architecture education

    If you have looked at recent editions of this book, you would not
    write that. They apparently have lost interest in discussing
    instruction sets. The fifth edition from 2012 moves that discussion
    to an appendix and I am not sure if a later edition has not removed it
    from the printed book completely.

    The discussion about OoO that I have looked at in some recent edition
    seems to miss important points for latency-dominated computing. It
    seems to me that the authors are mainly interested in supercomputing
    these days, certainly the fifth edition looks that way.

    If that's the book that biases computer architects, there is more to
    worry about than just ISA. The supercomputer attitude is a mistake
    that has been the bane of many architectures, even very well-funded
    ones like IA-64.

    The binary lock-in advantage of x86 makes architectural changes
    more challenging. While something like the 8080 to 8086 "assembly
    compatible" transition might have been practical and long-term
    beneficial from an engineering perspective, from a business
    perspective such would validate binary translation, reducing the
    competitive barriers.

    Actually while people who know nothing about instruction sets write
    "x86", there are three different instruction sets on any recent Intel
    or AMD CPU: 8086/286, IA-32, and AMD64. You cannot run IA-32 programs
    in the same mode as AMD64 programs, just like ARM A32/T32 and ARM A64.

    And while AFAIK you can switch between IA-32 and 8086 with two
    user-mode bits (or prefixes), that usually does not happen. And the
    addressing modes are actually very different; I bought a book that
    claimed to cover CPUs up to the Pentium, but it actually did not cover
    IA-32 addressing modes and instructions and therefore was totally
    useless for me.

    (Itanium showed that mediocre hardware translation between x86 and
    a rather incompatible architecture (and microarchitecture) would
    have been problematic even if native Itanium code had competitive >performance.

    It seems to me that both hardware and software binary translation
    would have fared much better on an OoO target CPU.

    On the other hand, ARM designed a 64-bit
    architecture that is only moderately compatible with the 32-bit
    architecture — flags being one example of compatibility

    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    MIPS (even with its delayed branches, lack of variable length
    encoding, etc.) would probably be a better architecture in 2023
    than x86 was around 2010.

    As far as Gforth is concerned, MIPS is worse than every other
    architecture that has architecture-specific support. Admittedly,
    Gforth's requirements may not be that important to most, but all other architectures satisfy them:

    * Each instruction block between two branch targets stands on its own
    and can be concatenated with any other such block, and perform the
    effect of the first block followed by the effect of the second.
    MIPS does not satisfy that because of load delay slots (and probably
    also the scheduling limitations involving the multiply/division
    unit).

    * Direct branches are relative or absolute. MIPS has
    not-quite-absolute branches that combine the top bits of the branch
    address with the bottom bits coming from the instruction.

    As a result, Gforth unconditionally disables dynamic native code
    generation on MIPS; disabling dynamic native code generation costs a
    factor 1.58-4.36 on Rocket Lake (numbers are times in seconds)

    sieve bubble matrix fib fft
    0.043 0.042 0.014 0.032 0.014 dynamic native code generation
    0.068 0.077 0.061 0.082 0.032 --no-dynamic

    There is too much supercomputer attitude in MIPS. Fortunately, its
    successors Alpha and RISC-V have fixed both problems. And
    interestingly, even a very supercomputer-attitude architecture like
    IA-64 satisfies Gforth's requirements just fine.

    - anton
    --
    'Anyone trying for "industrial quality" ISA should avoid undefined behavior.'
    Mitch Alsup, <c17fcd89-f024-40e7-a594-88a85ac10d20o@googlegroups.com>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From EricP@21:1/5 to Anton Ertl on Sun Dec 3 11:30:08 2023
    Anton Ertl wrote:
    "Paul A. Clayton" <paaronclayton@gmail.com> writes:

    On the other hand, ARM designed a 64-bit
    architecture that is only moderately compatible with the 32-bit
    architecture — flags being one example of compatibility

    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    I would say its compatibility because it allows A64 to emulate
    A32 functional behavior with minimal overhead.
    That could keep you customers from fleeing to other architectures.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to EricP on Sun Dec 3 21:10:25 2023
    EricP <ThatWouldBeTelling@thevillage.com> writes:
    Anton Ertl wrote:
    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    I would say its compatibility because it allows A64 to emulate
    A32 functional behavior with minimal overhead.

    Emulation of A32 has not been relevant for quite a number of years,
    because all cores that understood A64 also understood A32/T32. Of
    course, implementing those cores was simplified by having the same
    flags in the same order, but if there had been good reason, they could
    just as well have built a data path hat produces both kinds of flags
    (or, if they had decided to forego flags on A64, that implemented
    flags just for A32/T32).

    That could keep you customers from fleeing to other architectures.

    They kept customers by providing cores with both A64 and A32/T32.
    Only now, many years later, are they removing A32/T32 from some of the
    cores (but for now, not all of them); I guess the reason is that
    customers are no longer asking for A32/T32 on all cores, and prefer
    smaller (cheaper) and possibly more energy-efficient cores.

    I think that this has also to do with the main target markets of ARM's
    A64 implementations: Mobile phones running Android have are programmed
    in high-level languages and can be easily recompiled; applications
    written in Java are actually delivered in an architecture-neutral
    distribution format, so switching to A64 is even easier. And software
    running on ARM servers is often available in source form, so
    recompiling it for A64 (if it was not delivered as A64 in the first
    place) is easy.

    - anton
    --
    'Anyone trying for "industrial quality" ISA should avoid undefined behavior.'
    Mitch Alsup, <c17fcd89-f024-40e7-a594-88a85ac10d20o@googlegroups.com>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to Anton Ertl on Mon Dec 4 00:09:14 2023
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    EricP <ThatWouldBeTelling@thevillage.com> writes:
    Anton Ertl wrote:
    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    I would say its compatibility because it allows A64 to emulate
    A32 functional behavior with minimal overhead.

    Emulation of A32 has not been relevant for quite a number of years,
    because all cores that understood A64 also understood A32/T32.

    All cores from ARM did. Cavium's cores were A64 only. The
    latest Neoverse cores are A64 only. V9.x deprecates A32/T32
    completely.


    Of
    course, implementing those cores was simplified by having the same
    flags in the same order, but if there had been good reason, they could
    just as well have built a data path hat produces both kinds of flags
    (or, if they had decided to forego flags on A64, that implemented
    flags just for A32/T32).

    The Processor status word on Armv7 is split across three registers.
    The processor status word on Armv8 has two different interpretations
    depending on the current register width (nRW = 0 A32/T32, nRw = 1 A64).

    The only flags in common are NCVZ - Armv7/A32 add Q (indicating saturation)
    and the state bits for the IT instruction and the GE flags for the
    parallel instructions.

    There's really not much in common between A64 and A32/T32, other than
    the first 16 registers of the register file.



    That could keep you customers from fleeing to other architectures.

    They kept customers by providing cores with both A64 and A32/T32.

    But nobody really used A32/T32 on ArmV8 cores. It wasn't
    customer demand that lead to implementation on early ARM designs,
    but rather the expectation of customer demand (ultimately, non-existent).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From John Dallman@21:1/5 to Lurndal on Mon Dec 4 09:44:00 2023
    In article <KM8bN.200461$BbXa.82211@fx16.iad>, scott@slp53.sl.home (Scott Lurndal) wrote:

    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    Emulation of A32 has not been relevant for quite a number of years,
    because all cores that understood A64 also understood A32/T32.

    All cores from ARM did. Cavium's cores were A64 only. The
    latest Neoverse cores are A64 only. V9.x deprecates A32/T32
    completely.

    The most recent v9.x cores from ARM leave out A32 and T32 entirely.

    But nobody really used A32/T32 on ArmV8 cores. It wasn't
    customer demand that lead to implementation on early ARM designs,
    but rather the expectation of customer demand (ultimately,
    non-existent).

    iOS was willing to run 32-bit apps on ARMv8 cores, until it dropped
    32-bit support entirely a few years ago. Android is still willing to run
    apps that include 32-bit native code if the device has 32-bit capable
    cores and the OS has been built with 32-bit libraries as well as 64-bit
    ones.

    On both those platforms, running A32/T32 code on ARMv8 cores was useful
    during the transition to 64-bit. That's complete on iOS, and moving into
    its endgame on Android.

    John

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to Stefan Monnier on Mon Dec 4 17:51:50 2023
    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    But nobody really used A32/T32 on ArmV8 cores. It wasn't
    customer demand that lead to implementation on early ARM designs,
    but rather the expectation of customer demand (ultimately, non-existent).

    FWIW, I'm running Debian's armhf port (tho on top of an AArch64 kernel)
    on my only ARMv8 machine. For machines with small enough RAM, A32/T32
    still makes sense.

    ARMv7 cores are suitable for those machines. And less expensive.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Monnier@21:1/5 to All on Mon Dec 4 12:40:50 2023
    But nobody really used A32/T32 on ArmV8 cores. It wasn't
    customer demand that lead to implementation on early ARM designs,
    but rather the expectation of customer demand (ultimately, non-existent).

    FWIW, I'm running Debian's armhf port (tho on top of an AArch64 kernel)
    on my only ARMv8 machine. For machines with small enough RAM, A32/T32
    still makes sense.


    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Monnier@21:1/5 to All on Mon Dec 4 12:58:40 2023
    ARMv7 cores are suitable for those machines. And less expensive.

    Maybe that's relevant for those designing the SoC, but for people like
    me, machines with ARMv7 cores tend to be significantly less powerful,
    typically in terms of number of CPUs, speed of each CPU, speed of
    available IOs, etc...

    Virtually all SBCs brought to market in the last 5 years use ARMv8 CPUs
    rather than ARMv7 ones. Yet the majority of them still has ≤4GB of RAM,


    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to Stefan Monnier on Mon Dec 4 18:36:39 2023
    Stefan Monnier <monnier@iro.umontreal.ca> writes:
    ARMv7 cores are suitable for those machines. And less expensive.

    Maybe that's relevant for those designing the SoC, but for people like
    me, machines with ARMv7 cores tend to be significantly less powerful, >typically in terms of number of CPUs, speed of each CPU, speed of
    available IOs, etc...

    Virtually all SBCs brought to market in the last 5 years use ARMv8 CPUs >rather than ARMv7 ones. Yet the majority of them still has ≤4GB of RAM,


    Given that A64, A32 and (for the most part) T32 have the same
    32-bit instruction footprint, I don't see RAM size as a determinent
    in this case.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Monnier@21:1/5 to All on Mon Dec 4 13:54:59 2023
    Given that A64, A32 and (for the most part) T32 have the same
    32-bit instruction footprint, I don't see RAM size as a determinent
    in this case.

    Code size is not the issue, pointer size is.

    In theory I could use AArch64 compiled to use 32bit pointers, but in
    practice it's not widely available/supported (https://wiki.debian.org/Arm64ilp32Port).

    If your workload does not involve many pointers, then the difference is probably not worth the trouble, admittedly.


    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to BGB on Mon Dec 4 20:23:51 2023
    BGB <cr88192@gmail.com> writes:
    On 12/4/2023 11:58 AM, Stefan Monnier wrote:
    ARMv7 cores are suitable for those machines. And less expensive.

    Maybe that's relevant for those designing the SoC, but for people like
    me, machines with ARMv7 cores tend to be significantly less powerful,
    typically in terms of number of CPUs, speed of each CPU, speed of
    available IOs, etc...

    Virtually all SBCs brought to market in the last 5 years use ARMv8 CPUs
    rather than ARMv7 ones. Yet the majority of them still has ≤4GB of RAM, >>

    Yeah, RAM isn't free...

    And, as with other things, the endless march of "bigger and faster"
    seems to have slowed down.


    As for 4GB, probably the majority of programs would be happy enough with
    a 4GB limit, so in this sense, 32-bit almost still makes sense.

    Though, possibly slightly more useful is to use a 64-bit ISA, but using
    a 32-bit virtual address space and pointers. Then one can potentially
    save some memory, while still having the advantages of being able to
    work efficiently with larger data.

    When we did our first A64 chip, we spent some time building an ILP32
    toolchain for it based on GCC. Nobody wanted it.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Monnier@21:1/5 to All on Mon Dec 4 17:02:58 2023
    This was small enough to be like, "meh whatever, will just go for 64-bit pointers even if they are probably unnecessary".

    In most cases, that's true.
    I wouldn't have bothered to use an armhf userland with an arm64 kernel
    if it weren't for the fact that the userland is a clone of the one
    I used on a previous machine.
    IOW, the "meh whatever" works in both directions.


    Stefan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Scott Lurndal on Tue Dec 5 17:21:22 2023
    scott@slp53.sl.home (Scott Lurndal) writes:
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    EricP <ThatWouldBeTelling@thevillage.com> writes:
    Anton Ertl wrote:
    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    I would say its compatibility because it allows A64 to emulate
    A32 functional behavior with minimal overhead.

    Emulation of A32 has not been relevant for quite a number of years,
    because all cores that understood A64 also understood A32/T32.

    All cores from ARM did. Cavium's cores were A64 only.

    Given that ARM designed A64 primarily for their own plans, and their
    plans were to deliver cores with A64 and A32/T32 (and their customers
    had the same option), there was no reason for them to design A64 for
    easy A32/T32 emulation.

    My guess is that Cavium expected their customers not to need A32/T32
    rather than running an emulator.

    The only flags in common are NCVZ - Armv7/A32 add Q (indicating saturation) >and the state bits for the IT instruction and the GE flags for the
    parallel instructions.

    That's interesting. NCVZ seem to be most relevant for binary
    translation, though. The IT instruction should not be hard to
    translate without reifying these state bits. I don't know anything
    about the parallel instructions.

    There's really not much in common between A64 and A32/T32, other than
    the first 16 registers of the register file.

    In what way are the first 16 registers common? AFAIK A32/T32 has the
    PC as one of those registers, A64 doesn't.

    They kept customers by providing cores with both A64 and A32/T32.

    But nobody really used A32/T32 on ArmV8 cores.

    The Raspi3 was originally only available with a 32-bit system. We
    bought an Odroid C2 instead, because we wanted a 64-bit system.

    I expect that there were a number of 32-bit applications for Android
    and iOS that were used on the ARMv8-A cores in the beginning.

    It wasn't
    customer demand that lead to implementation on early ARM designs,
    but rather the expectation of customer demand (ultimately, non-existent).

    ARM put A32/T32 in its A64-capable cores from Cortex-A53 in 2012 to
    Cortex-A710 and A510 in 2021. If demand was non-existent, I think
    they would have stopped earlier.

    - anton
    --
    'Anyone trying for "industrial quality" ISA should avoid undefined behavior.'
    Mitch Alsup, <c17fcd89-f024-40e7-a594-88a85ac10d20o@googlegroups.com>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to Anton Ertl on Tue Dec 5 18:11:47 2023
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    scott@slp53.sl.home (Scott Lurndal) writes:
    anton@mips.complang.tuwien.ac.at (Anton Ertl) writes:
    EricP <ThatWouldBeTelling@thevillage.com> writes:
    Anton Ertl wrote:
    There is no compatibility at the ISA level. Using flags is a
    similarity, not compatibility.

    I would say its compatibility because it allows A64 to emulate
    A32 functional behavior with minimal overhead.

    Emulation of A32 has not been relevant for quite a number of years, >>>because all cores that understood A64 also understood A32/T32.

    All cores from ARM did. Cavium's cores were A64 only.

    Given that ARM designed A64 primarily for their own plans, and their
    plans were to deliver cores with A64 and A32/T32 (and their customers
    had the same option), there was no reason for them to design A64 for
    easy A32/T32 emulation.

    My guess is that Cavium expected their customers not to need A32/T32
    rather than running an emulator.

    The only flags in common are NCVZ - Armv7/A32 add Q (indicating saturation) >>and the state bits for the IT instruction and the GE flags for the
    parallel instructions.

    That's interesting. NCVZ seem to be most relevant for binary
    translation, though. The IT instruction should not be hard to
    translate without reifying these state bits. I don't know anything
    about the parallel instructions.

    There's really not much in common between A64 and A32/T32, other than
    the first 16 registers of the register file.

    In what way are the first 16 registers common? AFAIK A32/T32 has the
    PC as one of those registers, A64 doesn't.\

    Common, in the sense that they use the same register file, with
    r15 as an alias for the PC register.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to Paul A. Clayton on Sun Dec 10 16:51:59 2023
    "Paul A. Clayton" <paaronclayton@gmail.com> writes:
    On 12/3/23 10:01 AM, Anton Ertl wrote:
    "Paul A. Clayton" <paaronclayton@gmail.com> writes:
    A uniquely difficult architecture like x86 increases the barrier
    to competition both from patents and organizational knowledge and
    tools. While MIPS managed to suppress clones with its patent on
    unaligned loads (please correct any historical inaccuracy), Intel
    was better positioned to discourage software-compatible
    competition — and not just financially.

    Really? There is software-compatible competition to Intel. Not so
    much for MIPS (maybe Loongson).

    There is also less economic incentive to seek binary compatibility
    with MIPS. Even when MIPS was used by multiple UNIX system
    vendors, binaries would not be compatible across UNIXes. Targeting >workstations also influenced the economics of cloning.

    That was noticed by Motorola when developing the 88100. They
    sponsered a binary compatability standard (BCS) and an object
    comptability standard (OCS) in conjunction with their customers
    to provide standard portable binaries across operating
    systems. There was a group called 88open (of which I was
    a member, via Convergent Technologies which had been
    purchased by Burroughs/Unisys) which created and managed the
    standards documents.

    https://en.wikipedia.org/wiki/88open

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From John Dallman@21:1/5 to Lurndal on Sun Dec 10 17:56:00 2023
    In article <P0mdN.7690$83n7.6186@fx18.iad>, scott@slp53.sl.home (Scott
    Lurndal) wrote:

    That was noticed by Motorola when developing the 88100. They
    sponsered a binary compatability standard (BCS) and an object
    comptability standard (OCS) in conjunction with their customers
    to provide standard portable binaries across operating
    systems.

    Doing that for the file formats and calling standard is eminently
    practical, but how was it managed for library APIs? Were there baseline standards for libc, libm, libpthread and so on, which vendors could
    extend, or were those things fully standardised?

    John

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to John Dallman on Sun Dec 10 19:53:01 2023
    jgd@cix.co.uk (John Dallman) writes:
    In article <P0mdN.7690$83n7.6186@fx18.iad>, scott@slp53.sl.home (Scott >Lurndal) wrote:

    That was noticed by Motorola when developing the 88100. They
    sponsered a binary compatability standard (BCS) and an object
    comptability standard (OCS) in conjunction with their customers
    to provide standard portable binaries across operating
    systems.

    Doing that for the file formats and calling standard is eminently
    practical, but how was it managed for library APIs? Were there baseline >standards for libc, libm, libpthread and so on, which vendors could
    extend, or were those things fully standardised?

    They deferred the source API standards to POSIX and X/Open portability guides.

    As to what went in which library, System V provided most
    of the inspiration.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to BGB on Sun Dec 10 19:57:09 2023
    BGB <cr88192@gmail.com> writes:
    On 12/10/2023 11:56 AM, John Dallman wrote:
    In article <P0mdN.7690$83n7.6186@fx18.iad>, scott@slp53.sl.home (Scott
    Lurndal) wrote:

    That was noticed by Motorola when developing the 88100. They
    sponsered a binary compatability standard (BCS) and an object
    comptability standard (OCS) in conjunction with their customers
    to provide standard portable binaries across operating
    systems.

    Doing that for the file formats and calling standard is eminently
    practical, but how was it managed for library APIs? Were there baseline
    standards for libc, libm, libpthread and so on, which vendors could
    extend, or were those things fully standardised?


    Seems like, yeah, to have any hope of binary compatibility, one also
    needs to standardize on either the libraries or the specific syscalls
    and syscall mechanism (like how it was in the MS-DOS era).

    Every architecture has an ABI (application binary interface) document
    which describes those in an operating system independent manner in a processor-specific ABI (psAB) document. Generally these applied,
    at the time, to various propriety unix implementations (System V,
    AIX, HP-Ux, et alia).



    But, hoping for cross-platform seems like a bit of an ask when modern
    OS's, like Linux, are hard-pressed to have binary compatibility between >different versions or different variants of the same OS on the same
    hardware.

    Source-level and binary level compatability are two discreet topics,
    which you seem to be conflating. Source level for all unix and unix-like systems was provided by POSIX and X/Open (today both are managed by
    The Open Group).


    Or, like the annoyance of the whole Linux software stack, where one
    seemingly can't really build or reuse any single part of it without >effectively bringing over the entire GNU ecosystem in the process.

    That's not an accurate assessment of the situation.

    Leaving aside such microsoft inspired crapfests like systemd.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From MitchAlsup@21:1/5 to BGB on Sun Dec 10 21:54:12 2023
    BGB wrote:

    On 12/10/2023 11:56 AM, John Dallman wrote:
    In article <P0mdN.7690$83n7.6186@fx18.iad>, scott@slp53.sl.home (Scott
    Lurndal) wrote:

    That was noticed by Motorola when developing the 88100. They
    sponsered a binary compatability standard (BCS) and an object
    comptability standard (OCS) in conjunction with their customers
    to provide standard portable binaries across operating
    systems.

    Doing that for the file formats and calling standard is eminently
    practical, but how was it managed for library APIs? Were there baseline
    standards for libc, libm, libpthread and so on, which vendors could
    extend, or were those things fully standardised?


    Seems like, yeah, to have any hope of binary compatibility, one also
    needs to standardize on either the libraries or the specific syscalls
    and syscall mechanism (like how it was in the MS-DOS era).


    But, hoping for cross-platform seems like a bit of an ask when modern
    OS's, like Linux, are hard-pressed to have binary compatibility between different versions or different variants of the same OS on the same
    hardware.

    Consider any architecture with a bit that flips from LE to BE !?!

    Also annoys me that most FOSS projects are solely focused on
    implementation, rather than on specifying things well enough to
    potentially allow for multiple implementations to exist.

    Those who cannot remember the past are condemned to repeat it: Santayana

    Say, people put all their effort trying to make "the one true whatever", rather than specifying things well enough to allow for re-implementation as-needed.

    This is why your fresh out of college ISA architect is ill equipped to
    create an ISA that stands the test of time.

    By the time an architect has been exposed to enough of the whole system
    to architect a small block with it, it is past time to retire. He needs
    {
    ISA,
    compilers,
    Linkers,
    Environments{
    elementary functions,
    dynamic linking,
    memory management,
    signals, }
    interrupts,
    exceptions,
    privilege,
    priority,
    supervisor,
    hypervisor,
    Atomicity,
    cache coherent protocols,
    cache units,
    function units,
    pipelineing,
    reservation stations,
    scoreboards,
    order{
    processor,
    memory,
    interconnect,
    interrupt, }
    memory {
    strong,
    sequential,
    total store order,
    causal,
    weak,
    relaxed} consistency,
    FP,
    FDIV&SQRT,

    PCIe{
    bridges,
    devices,
    timers,
    counters,
    IO/MMUs, }
    aliasing,
    disambiguation,
    logic design,
    Interconnect design,
    Block design,
    Verification {an entire realm in its own right.}
    a smattering of layout,
    a smattering of tapeout,
    a smaltering of testing
    more than a smattering of management,
    budgeting, ...
    } {{and other annoyances}}
    in order to properly design an ISA !! with a reasonable chance of long
    term success.

    Or, like the annoyance of the whole Linux software stack, where one
    seemingly can't really build or reuse any single part of it without effectively bringing over the entire GNU ecosystem in the process.

    This is a mung-ification::

    Mung is a left-recursive grammar--it means: mung until no good.

    Linux fits this because:: in order to have built Linux the first time,
    you had to download the entire stack, so that when you want to alter
    anything, you have already got everything you need loaded. {{It just
    takes disk space}}

    John

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From MitchAlsup@21:1/5 to BGB on Mon Dec 11 17:01:39 2023
    BGB wrote:

    On 12/10/2023 3:54 PM, MitchAlsup wrote:

    This is why your fresh out of college ISA architect is ill equipped to
    create an ISA that stands the test of time.


    By the time an architect has been exposed to enough of the whole system
    to architect a small block with it, it is past time to retire. He needs
    {
    ISA, compilers, Linkers,
    Environments{
        elementary functions,     dynamic linking,     memory management,
        signals, }
    interrupts, exceptions, privilege, priority, supervisor, hypervisor,
    Atomicity,
    cache coherent protocols,
    cache units,
    function units,
    pipelineing, reservation stations, scoreboards, order{
        processor,     memory,     interconnect,
        interrupt, }
    memory {
        strong,     sequential,     total store order,     causal,
        weak,     relaxed} consistency,
    FP, FDIV&SQRT,
    PCIe{     bridges,     devices,     timers,     counters,
        IO/MMUs, } aliasing, disambiguation, logic design, Interconnect
    design,
    Block design,
    Verification {an entire realm in its own right.}
    a smattering of layout,
    a smattering of tapeout,
    a smaltering of testing more than a smattering of management, budgeting,
    ...
    } {{and other annoyances}}
    in order to properly design an ISA !! with a reasonable chance of long
    term success.


    Yeah, dunno...

    I was mostly doing stuff for my own reasons.
    I don't think I have done too horribly for my first attempt.

    You are on your 4th or 5th attempt at this point. Every reconstruction of
    ISA is another attempt.

    But, my project isn't terribly useful if all it can do is run custom
    ports of Doom and similar.

    Useful: yes; marketable: no.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From MitchAlsup1@21:1/5 to Paul A. Clayton on Sun Jan 21 21:33:00 2024
    Paul A. Clayton wrote:

    On 12/10/23 4:54 PM, MitchAlsup wrote:
    BGB wrote:
    [snip]
    Say, people put all their effort trying to make "the one true
    whatever", rather than specifying things well enough to allow
    for re-implementation as-needed.

    This is why your fresh out of college ISA architect is ill
    equipped to create an ISA that stands the test of time.

    [Necromancy]
    I agree. Technical knowledge and intuition are also not the only
    factors. Being able to listen (not only to data but to others'
    intuitions) and being able to make decisions (not only self-
    confidence but also a willingness and ability to accept the
    consequences of mistaken judgments) — these abilities are
    important and seem to require time/experience to develop.

    By the time an architect has been exposed to enough of the whole
    system
    to architect a small block with it, it is past time to retire. He
    needs
    {
    ISA, compilers, Linkers,
    Environments{
        elementary functions,     dynamic linking,     memory
    management,
        signals, }
    interrupts, exceptions, privilege, priority, supervisor, hypervisor,
    Atomicity,
    cache coherent protocols,
    cache units,
    function units,
    pipelineing, reservation stations, scoreboards, order{
        processor,     memory,     interconnect,
        interrupt, }
    memory {
        strong,     sequential,     total store order,     causal,
        weak,     relaxed} consistency,
    FP, FDIV&SQRT,
    PCIe{     bridges,     devices,     timers,     counters,
        IO/MMUs, } aliasing, disambiguation, logic design,
    Interconnect design,
    Block design,
    Verification {an entire realm in its own right.}
    a smattering of layout,
    a smattering of tapeout,
    a smaltering of testing more than a smattering of management,
    budgeting, ...
    } {{and other annoyances}}
    in order to properly design an ISA !! with a reasonable chance of
    long term success.

    I disagree that all of this needs to be in a single head.

    Not in their head--but exposed to enough of it not to make some
    sort of serious mistake with respect to most of the items on the
    list.

    While intra-brain communication is much faster that *inter*-brain communication, I suspect a team of less broad experts could
    "properly design an ISA" perhaps taking only three times as long.

    Here you are equating ISA with architecture.

    In the distant past I suggested that prior to designing an ISA, one
    should have to write a code generator for an existing architecture.

    Now, I am expanding my recommendation that they also be exposed to
    the "rest of the disease" of computer architecture. {see list above}

    (The result might be a little less elegant as well. Even with
    trust, communication would be filtered by not wanting to bother
    another with "useless" information.)

    One advantage of a team over an individual is that other members
    of the team can make discordant statements (whereas data comes
    from what one chooses to test).

    Nor am I suggesting a single individual is better than a well
    oiled team...But that the totality of the team be exposed to
    "just about everything in the above list".

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From MitchAlsup1@21:1/5 to Paul A. Clayton on Sun Jan 21 23:26:07 2024
    Paul A. Clayton wrote:

    On 1/21/24 4:33 PM, MitchAlsup1 wrote:
    Paul A. Clayton wrote:

    On 12/10/23 4:54 PM, MitchAlsup wrote:
    [snip list of areas of familiarity needed for ISA design]
    I disagree that all of this needs to be in a single head.

    Not in their head--but exposed to enough of it not to make some
    sort of serious mistake with respect to most of the items on the
    list.

    I vaguely recall a general principle that an expert user of an
    interface should understand both sides of the interface, whereas
    an expert interface designer should understand at least one layer
    beyond on both sides. (A quick web search did not find any such
    reference, but I suspect something like that has been stated.)

    See below: {But I agree with the premise}

    I suspect "management" would surprise some, but understanding
    how people interact and how to get the best from people and
    understanding the time and money economics of a large project are
    important — even for a non-commercial effort. Economics as a
    study of how resource constraints impact systems and vice versa
    is presumably useful even in hardware design since such involves
    constrained resources.

    Understanding process or principles is also a distinction
    commonly made between engineering and science.

    While intra-brain communication is much faster that *inter*-brain
    communication, I suspect a team of less broad experts could
    "properly design an ISA" perhaps taking only three times as long.

    Here you are equating ISA with architecture.
    In the distant past I suggested that prior to designing an ISA, one
    should have to write a code generator for an existing architecture.

    Now, I am expanding my recommendation that they also be exposed to
    the "rest of the disease" of computer architecture. {see list above}

    Yet the list is so broad that I fear your other conclusion would
    apply: by the time one person has enough exposure to "the disease"
    the person is (considered) too old to work in the field.

    Or become to Jaundiced to continue ...

    Distributing the expertise might improve the odds.

    I think you, Mitch, are exceptional not just in the depth of
    your knowledge but the breadth. I suspect most people — even
    highly intellectual people, people who love ideas and learning —
    tend to focus on a single subject in their professional life.

    I, instead, believe in what you wrote above:: <repeated from above>

    I vaguely recall a general principle that an expert user of an
    interface should understand both sides of the interface, whereas
    an expert interface designer should understand at least one layer
    beyond on both sides.

    During the development and evolution of My 66000 architecture, I have
    had significant inputs from::compiler people, environment people,
    a kernel person, several device people; along with my 40 years of
    plying this as a trade. My 66000 could not have gotten to this point
    without ALL of their help. They, in particular, are responsible for
    the elegance it has acquired. I may have had a stab in the right
    direction, but they are primarily responsible for the refinement.
    {The people count is bigger than most architecture teams}

    If I ever end up making any money out of this, they will all get
    paid.

    (The result might be a little less elegant as well. Even with
    trust, communication would be filtered by not wanting to bother
    another with "useless" information.)

    One advantage of a team over an individual is that other members
    of the team can make discordant statements (whereas data comes
    from what one chooses to test).

    Nor am I suggesting a single individual is better than a well
    oiled team...But that the totality of the team be exposed to "just
    about everything in the above list".

    So not all hope is lost?☺ (Sadly good teams seem to be rare.)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)