Can a language be inherently Pro-CISC or Pro-RISC? :thonk:

So I’m just sitting here with a thonk this morning in bed about java on ppc and how long it takes a minecraft server to start on a G5 quad. Obviously being risc there must be some instructions missing that 1.14.4 wants, so it has to crank on that stuff that much harder.

Well arlight, that makes sense I guess.

But then I had a thought. Even if java can run on risc, is it meant to? It really doesn’t perform that well. What about other languages? Is there an inherent base that they all like to operate under? If C could run on a processor that was so trimmed down to a set of optimized instructions, would it be faster or slower? Are there benchmarks and data that people have collected to demonstrate different behaviors of chips? What about ryzen and its sort of hybrid setup?

Dammit now I need to go download gravism and build it on everything to see how it acts.

Sun made SPARC and Java. See also https://en.wikipedia.org/wiki/Jazelle

2 Likes

Mell yeah but thats java on native hardware. Thats different. But I mean all sorts of lang’s, not just java.

Jazelle/TEE be fascinating tho.

As far as I know depends on how good the compiler is. We moved far away from the tight integration between architecture and programming language so everything lies in the hands of the compiler. That’s the only factor that decides if a language is “pro-cisc” or “pro-risc”. But it could be made the argument that the more you go up the ladder with a programming language, the less friendly it becomes for the hardware it’s running on because the compiler will most likely use more instructions to translate an higher level programming language. In general the less you let the compiler figure out, the better perfomance you’re going to have.

P.S.

Yes, absolutely it would if you leave a set of instructions that C can be translated into as efficiently as possible. But that would mean making a set of instructions that would be used by the compiler to translate C into machine language.

2 Likes

sounds like ass

I’m guessing thats why people don’t like if statements then.

Could you get an ASM/LISP level of efficiency out of something like python or ruby? I wouldn’t think anything that high up could be so fast.

If statements are not that bad, it’s just a penalty of a couple of RISC instructions if I’m not mistaken. Also, since they’re one of the oldest routines ever created, there’s a technique to speed up loops which is called “loop unrolling”. Doesen’t use much more memory but speeds up loops nicely.
When I was talking about “not letting the compiler figure things out” I was talking more about memory management for example.

2 Likes

Ahhhh, ok.

Editted in an additional on the last post btw

I’ve never heard of ASM/LISP programming languages but, after a quick googling, looks like they’re basically machine language. The answer is no, you can’t have that level of performance out of an high level programming language because you trade ease of use with performance. A language like Python doesen’t have embedded the idea of the processor pipeline, for example.

If you fancy the idea of uber fast programs you can start with basic RISC and a publicly available processor pipeline and write some bad ass code. I never tried with CISC neither my professor tought me lol

I recently came across this which I found interesting (and seems to be related to this topic pretty well):

C Is Not a Low-level Language

Your computer is not a fast PDP-11.
David Chisnall
https://queue.acm.org/detail.cfm?id=3212479

2 Likes

Theres a conversation I have wanted to have with the forum for a long time about how our processors can be so so so stupidly fast, yet programs are still so poorly done that most of that massive jump in performance is just eaten up by bad code. Buuuuuuuuuuuut I’m not sure ppl here are ready for that convo yet lol.

1 Like

It never wanted to be. C is “human readable assembly”, in a way.
Everything about C is high level. You don’t have to specify how to write to where, you just printf.
Don’t even have to specify line break & carriage return.

However, C beeing only one layer above assembly, it does not have the insane overhead of Java and the like. (I am up for killing Java, anyone with me?)



I highly doubt that.

1 Like

I’m with you comrade!

Well it surely requires much more knowledgeable people than me, but I’d be happy to take part in that conversation!

1 Like

PDP’s are rather snappy actually. But, often they are used for single tasks only.

XD if people could keep their “My processor is better than yours” dicks and “Do my homework” posts out of the thread, then sure.

Almost all modern processors are basically risc. Even if the instructions look like cisc, when they’re generated by a compiler and/or linker, they’ll be arranged such that multiple instructions run per clock cycle as often as possible.

Then there’s also loop unrolling and vectorization that was already mentioned.

You can try writing a simple c++ program that jus adds numbers from 1 to 10000 on godbolt.org and look at output of different compilers with -Os and compare to -O3.

Don’t get me started on microcode and dataflow architectures

3 Likes

No, please do.

1 Like

This is the dirty secret they don’t want to know about, kid.

Your Von Neumann ISA is a lie told to keep backwards software compatibility. Assembly language isn’t close to the metal at all, it’s a ball and chain we have to live with.

You want the truth? You can’t handle the truth. That’s what they think anyway.

Yes please?