Why I am not a fan of hardware acceleration
I am generally not a fan of hardware accelerators of various sorts (the stereotypical example is hardware RAID cards). One of the reasons why is that historically (with one important exception), hardware accelerators generally just haven't been very good.
By not very good I mean that, well (generally):
- they haven't accelerated things very much.
- they haven't sped up actual important bottlenecks, except in rare circumstances.
- they almost invariably cost a significant amount of money.
- even when they manage to get past all of this, they rarely stay fast, compared to the state of the art in machines and software.
- they often stop accelerating anything useful after a while.
(Consider the current usefulness of a hypothetical world's fastest MD5 checksum offload engine, or just of a TCP offload engine that doesn't handle packets with the current set of options that everyone is using because they weren't common when it was designed.)
This litany of bad outcomes hasn't happened because everyone who's tried to make hardware accelerator has been incompetent; far from it. Instead there are a number of sound reasons for all of these, and they make this a hard problem. We can see how hard it is by seeing how little success the field has had, despite a great deal of effort poured into it over the years.
(By the way, the important exception that I'm thinking of is graphics cards. I happen to think that they have a lot of characteristics that makes them the exception that proves the rule.)