Çok az bilimsel yazılım geliştiricisi iyi tasarım ilkelerini anlıyor, bu yüzden bu cevabın biraz uzun soluklu olması durumunda özür dilerim. Bir yazılım mühendisliği perspektifinden, bilimsel yazılım geliştiricisinin amacı, genellikle çelişkili bir dizi kısıtlamayı karşılayan bir çözüm tasarlamaktır .
Seyrek matris kitaplığınızın tasarımına uygulanabileceği gibi, bu kısıtlamaların bazı tipik örnekleri şunlardır:
- Bir ay içinde tamamlandı
- Dizüstü bilgisayarınızda ve çeşitli iş istasyonlarında doğru çalışır
- Verimli çalışır
Bilim adamları, yazılım mühendisliğinin diğer bazı ortak gereksinimlerine giderek daha fazla dikkat ediyorlar:
- Belgeler (Kullanıcı kılavuzu, eğitim, kod yorumlama)
- Sürdürülebilirlik (sürüm kontrolü, test, modüler tasarım)
- Yeniden kullanılabilirlik (modüler tasarım, "esneklik")
Bu gereksinimlerden bir veya daha fazlasına ihtiyacınız olabilir. Performans için bir Gordon Bell ödülü kazanmaya çalışıyorsanız, yüzde bir kısmının kesirleri bile geçerlidir ve hakimlerin birkaçı kodunuzun kalitesini değerlendirecektir (doğru olduğuna ikna edebildiğiniz sürece). Bu kodu küme veya süper bilgisayar gibi paylaşılan bir kaynakta çalıştırmayı haklı çıkarmaya çalışıyorsanız, kodunuzun performansı ile ilgili iddiaları sık sık savunmanız gerekir, ancak bunlar nadiren çok katıdır. Bir dergide, yaklaşımınızın performans kazanımlarını açıklayan bir makale yayınlamaya çalışıyorsanız, o zaman rakiplerinizden daha hızlı olmanız gerekir ve% 20 performans daha iyi bakım ve tekrar kullanılabilirlik için memnuniyetle yapacağım bir değiş tokuş.
Sorunuza geri dönersek, yeterli geliştirme süresi tanıyan "iyi tasarım" asla performanstan ödün vermemelidir. Amaç olabildiğince hızlı çalışan kod yapmaksa, kod bu kısıtlamalar etrafında tasarlanmalıdır. Kod oluşturma, satır içi montaj gibi teknikler kullanabilir veya sorununuzu çözmenize yardımcı olması için yüksek düzeyde ayarlanmış kitaplıklardan yararlanabilirsiniz.
Peki ya yeterli geliştirme zamanınız yoksa? Yeterince iyi olan ne? Bu duruma bağlıdır ve kimse bu soruya daha fazla bağlam olmadan iyi bir cevap veremeyecektir.
FWIW: Gerçekten yüksek performanslı seyrek matris çekirdekleri yazmakla ilgileniyorsanız, optimize edilmiş bir PETSc kurulumuyla karşılaştırmalı ve onları yeniyorsanız ekibiyle çalışmalısınız, ayarlanmış çekirdekleri kütüphaneye dahil etmekten mutluluk duyarlar.