5

3D engine programmers have to care a little about execution speed, but what about the programmers at ATI and nVidia ? How much do they need to optimize their driver applications ?

Are there jobs out there who only purpose is execution speed and optimisation, or jobs for people to program only in assembly ?

Please, no flame war about "premature optimisation is the root of all evil", I just want to know if such jobs exists, maybe in security ? In kernel programming ? Where ? Not at all ?

6 Answers 6

4

One sector that I would've never thought of before I read about it (and it was years ago, so I don't have the link unfortunately) is the Defense sector. Military contractors are used to help with the nations cyber-defense and also launch cyber attacks. Now, I know one of the big contractors wanted people who knew assembly, although I'm not sure how much they would have you use it.

Another field is the embedded electronics. While some of those architectures are programmed for in C, you would still be able to use assembly for them and that would probably be where most of the jobs would be in assembly.

1
  • I started out in this this field in military embedded systems. That is where assembly language is likely to be used. Commented Mar 14, 2011 at 14:53
5

Finance - specifically in high-frequency trading/market making activities where speed is king.

I'm not aware of anyone going down to assembly in this area (at least no yet), but certainly hardware acceleration is employed - the main problem is that this area is very secretive, so you rarely know how far folks are going (after all, that's what makes money)...

1
  • I know in my area there are a lot of proprietary trading firms looking for senior developers with C# or C++ experience to build their trading platform. So I doubt that they will ever get down to assembly
    – Jetti
    Commented Mar 14, 2011 at 11:52
4

Yes, there are plenty of areas (mostly embedded systems) where optimisation is very important. In particular for systems where a large amount of CPU hardware might otherwise be needed, improving performance can reduce hardware costs/size/power consumption by an order of magnitude. This is commonly achieved with techniques such as SIMD, GPGPU, dedicated FPGA coprocessors etc, and the application domains tend to be e.g. military, medical (imaging systems etc), finance (derivates trading etc), oil exploration (processing survey data), etc, i.e. large amounts of 2D or 3D data to crunch as quickly as possible (and/or with as little hardware as possible).

It's rare to use actual assembly code though, except perhaps for a small number of well-defined core "black box" routines - these days it tends to be programming with intrinsics in C/C++ (e.g. for SIMD), or using third party libraries (e.g. IPL), or things like CUDA and OpenCL for GPGPU.

3

I used to do a lot of it 10-25 years ago (math functions for computer vendors mainly). In main stream processors (not embedded) the greatest number of people doing assembler were OS people (OS needs to save/restore exact programmer visible machine register state on context switches for example ), and also for folks that verify the HW designs, (do all the instructions work as advertised? what about if I have two or three instructions try to use the same data path at the same time, will the CPU still produce correct behavior?). But these folks are much less interested in performance than correctness. A few people still write low level libraries (for instance the trig functions) in assembler, but they are few and very far in between.

1

Assembler code is not nearly as useful for optimization as it once was. You'd want to learn it, but if there's a good C compiler for an architecture you'd only program in it sometimes. Modern compilers are pretty darn good. I doubt there's that many assembler-only jobs around, but many more where it's sometimes used.

Jobs requiring optimization are likely to be more common. It's not really necessary for most desktop and laptop software, but there are places where it's useful. Embedded programming is usually about getting the unit cost low, so optimization is good. Server software can benefit from it, since the goal is reducing the number of servers for a given load. Operating-system internals should be efficient, because if they aren't nothing can be efficient on that OS. Databases need to be efficient. Some scientific applications need to be efficient.

1
  • There are tons of assembly language jobs still available. These jobs almost always involve the development of code that runs on resource-constrained microcontrollers like the smaller PICs. Commented Mar 14, 2011 at 14:56
1

Organizations that do a lot of cloud computing often use their own custom kernels, requiring folks who can do Assembly and low-level C programming. This is because of a simple economy of numbers. A really small increase on one machine ends up costing big bucks when scaled.

Also, companies that build Avionics systems (or missile guidance/defense infrastructure) do a lot of custom Assembly. When you're trying to intercept a moving target, optimizations matter.

1
  • ah thanks, so that really means optimisation jobs have a future !
    – jokoon
    Commented Mar 14, 2011 at 15:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.