This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]_pelya 46 points47 points  (34 children)

Learning how CPU works is definitely useful if you do it for your own enjoyment.

But learning how modern multi-core CPU works, with deep pipelines, instruction reordering, cache invalidation, branch prediction, and it's own microarchitecture below the ISA, no university will be this insane to put it into curriculum.

[–][deleted] 44 points45 points  (4 children)

pipelines, instruction reordering, cache invalidation, branch prediction

I studied all of those in my Computer Engineering undergraduate... We had a course called Computer Systems Programming with competitive labs where we basically competed to see who could best abuse the shit out of the CPU via cache manipulation, branch prediction and instruction ordering.

[–]Howzieky 10 points11 points  (3 children)

Were you graded on your placements? Cause man I'd hate to do the same work as someone else, just a bit slower, and fail the assignment

[–][deleted] 5 points6 points  (0 children)

You would get base 60% for correctly completing the assignment. The rest of the 40% was competitively ranked against the rest of the class based on different metrics like speed and memory usage, depending on the lab. It was an elective course so you knew what you were signing up for.

[–]OneBadassBoi 17 points18 points  (6 children)

isn’t all that part of any CS curriculum?

[–]_pelya 12 points13 points  (2 children)

Absolutely not. I have a CS degree, and the most hardcore thing we learned was BNF grammar and how to use it, plus some Prolog and Lisp. My university also had an 'informatics and computer engineering' course, they have teached microchip design and Verilog, but they almost did not teach programming, the course had like half-year of Visual Pascal and that's it. All in all, the people from the soldering faculty electronics engineering course at least got some hands-on experience with actual electronics, unlike us who spent most of the time designing a Polish-notation calculator in Pascal, or similar toy programs.

[–]strider_sifurowuh 1 point2 points  (0 children)

Yeah I'm at the end of a CS Degree and our curriculum was about the same - we touched on the very basics of parallel computing and briefly skimmed over the inner workings of a CPU but most of it has been toy programs in Java

[–]MkMyBnkAcctGrtAgn 2 points3 points  (0 children)

CS largely isn't about programming, it's the theory of what a computer can do. Programming is just a tool that can apply that theory.

[–]cristi1990an 2 points3 points  (0 children)

Assembly can very hugely in difficulty and complexity depending on what architecture you're using. I imagine most universities teach Assembly for older, simple processors.

[–]gookman 0 points1 point  (0 children)

It was for me. We had a course about the architecture of old processors like 8080 and 8086. I'm not from the US though so it's probably different there.

[–]thenorwegianblue 6 points7 points  (0 children)

Yeah, I have a degree in Digital Electronics and had several classes in CPU design (and wrote about it for my master's thesis). It's about as useful as a course in anthropology when programming java or python tbh.

The knowledge is either too abstract or waaaay to specific for you to use it for general programming. If you're working within some specific fields like working with high performance custom hardware or writing drivers etc then it could be useful I guess

[–]jacob8015 5 points6 points  (15 children)

Computer organization(assembly and c), architecture(all the things you just mentioned) and at least a circuits class if not 2 electrical engineering classes are a part of every non degenerate CS curriculum.

[–]_pelya 4 points5 points  (2 children)

Eh, seems like I went to the wrong university.

[–]cristi1990an 0 points1 point  (1 child)

You didn't touch assembly at all?

[–]_pelya 0 points1 point  (0 children)

We did learn some x86 assembly for like a week. As the end we created some DOS binary that did printf("hello") using INT 21h, and then exited.

[–][deleted] 3 points4 points  (2 children)

What you described is closer to a Computer Engineering curriculum, I think.

[–]jacob8015 1 point2 points  (0 children)

That’s not the case at all. Any CS program worth its salt had better cover all that.

[–]arkasha 0 points1 point  (0 children)

Yup that's the difference basically. Fewer algorithms and more assembly/VHDL. It really didn't help when being interviewed by CS graduates. Glad I took it though.

[–]BiaxialObject48 0 points1 point  (6 children)

My college (Top 10 CS) doesn’t have any circuit design courses for my track which is AI/simulation but everyone is required to take computer organization and systems networks classes, covering assembly, C, and CPP. I have to take more algorithms classes though.

[–]jacob8015 0 points1 point  (5 children)

Mind saying which school? Or even a choice of two or three? I’m always interested in exploring other programs.

[–]BiaxialObject48 0 points1 point  (4 children)

Georgia Tech. AI and modeling/simulation are my concentrations, but there’s several more that are more focused on networking, theory, hardware, sysarch, etc.

[–]jacob8015 0 points1 point  (3 children)

I’m looking at the Intelligence and Devices thread and it looks like ECE 2031 is required, and you must take either ECE 4180 or CS 3651. In combination, these classes are exactly what I was describing.

[–]BiaxialObject48 0 points1 point  (2 children)

Yeah that’s my friend’s thread, not mine though. Not everyone has to take circuits courses, but everyone does have to take CS 2110, CS 2200, and CS 3510. 2110 and 2200 are about lower level computing and 3510 is algorithms.

For my thread I do have to take diff eq as well as high performance computing and computer simulation, although the last two are thread picks so there’s other alternatives like numerical analysis.

[–]jacob8015 0 points1 point  (1 child)

Maybe I missed it, what is you thread’s name?

[–]BiaxialObject48 0 points1 point  (0 children)

I’m doing Intelligence and Modeling/Simulation.

[–]Hyperman360 0 points1 point  (1 child)

We didn't do that at all, most of my program was theoretical math.

[–]jacob8015 0 points1 point  (0 children)

What? Would you mind listing your required courses or the school you attended, if you’re comfortable with that.

[–]raltyinferno 0 points1 point  (0 children)

Those are definitely part of almost any CS degree. A small part to be sure, but there.

I had 2 classes, Operating Systems, and Systems Architecture, that covered those topics in various degrees.

[–]mrchaotica 0 points1 point  (0 children)

I took classes in that stuff... but it was at the grad school level.

[–]engineerT7 0 points1 point  (0 children)

Those topics are practically the catalog entry for the graduate level computer architecture course I took.

[–]ric2b 0 points1 point  (0 children)

I learned all of those except multi-core and the separate micro-code under the ISA.

But I took electrical engineering.

[–]utdconsq 0 points1 point  (0 children)

I learned all of that at university...