コードをターゲットハードウェアアーキテクチャに合わせて調整することは非常に重要です。ただし、多くの時間とリソースがない限り、利用可能なさまざまなシステムでこれを行うことは不可能です。
最適化は80-20の法則に従います。20%の努力で80%の利益を得ることができます。それを超えると、収益は減少し始めます。
私が従うプロセスは次のとおりです。1)ターゲットアーキテクチャに最適なコンパイラを入手します。時々GNUは特定のプラットフォームに最適なコンパイラかもしれませんが、驚かないでください。2)コンパイラの「コード最適化」セクションを読み通します。3)ターゲットプラットフォームに最適なコードを生成するための適切なフラグを特定します。ただし、試行するすべてのレベルの最適化でコードの結果を検証するようにしてください。より高い最適化レベルは、コードの正確さに影響します。4)必要なライブラリがそのシステム用に最適化されていることを確認してください。たとえば、数学ライブラリ、BLASライブラリなど。5)SSE(SIMD)、コアの数、アクセラレータなど、プラットフォーム固有のハードウェア機能に特に注意してください。これらの機能のためにコードをより適切に最適化するために、コードを変更したり、コンパイラーにヒントを提供したりする必要がある場合があります。
すべてのターゲットプラットフォームに対してこれを行う必要があります。この時点で、最小限の労力で最大のメリットが得られるはずです。
より多くのパフォーマンスを引き出す必要がある場合は、ほとんどの場合、ハードウェア機能が十分に活用されていることを確認するためにコードを書き直す必要があります。
いいえ、このための本はありません。最も近いのは、ベンダー(IBMレッドブック、Intel、AMD、Cray)によって一般的に無料で提供される「最適化マニュアル」です。
例:support.amd.com/us/Processor_TechDocs/25112.PDF
http://www.intel.com/products/processor/manuals/
http://www.ibm.com/developerworks/wikis/download/attachments/137167333 /Power6_optimization.pdf?version=1
これらは、これらのプラットフォームにとって最も有効なリソースです。ターゲットプラットフォーム用のそのようなリソースを見つけることを目指す必要があります。