Dalam sebagian besar kasus, peningkatan dalam algoritma membuat perbedaan yang lebih besar daripada peningkatan dalam optimasi. Algoritma juga lebih portabel daripada optimasi tingkat rendah. Saran saya adalah untuk mengikuti praktik terbaik umum sehubungan dengan tata letak memori untuk penggunaan kembali cache, menghindari salinan atau komunikasi yang berlebihan, memperlakukan sistem file dengan cara yang waras, dan membuat kernel floating point memiliki granularity yang cukup untuk vektorisasi. Kadang-kadang ini cukup untuk mencapai fraksi "puncak" yang cukup tinggi (untuk operasi ini).
Buat sketsa model kinerja untuk operasi yang menurut Anda penting (atau yang menurut Anda penting dengan membuat profil). Kemudian Anda dapat menggunakan model kinerja untuk memperkirakan apa yang bisa dilakukan oleh implementasi yang sangat disetel. Jika Anda memutuskan bahwa speedup sepadan (relatif terhadap hal-hal lain yang bisa Anda lakukan), maka lakukan optimasi.
Mungkin tantangan terberat adalah merancang antarmuka tingkat tinggi, penting (dalam arti bahwa banyak kode akan tergantung pada pilihan ini) dan struktur data sehingga Anda dapat mengoptimalkan nanti tanpa perlu mengubah API. Berbeda dengan optimisasi spesifik dan pedoman umum, saya tidak tahu bagaimana mengajar ini kecuali melalui pengalaman. Bekerja dengan perangkat lunak sumber terbuka yang peka terhadap kinerja membantu. Seperti halnya keputusan API, penting untuk memahami ruang masalah.