Bardzo niewielu twórców oprogramowania naukowego rozumie dobre zasady projektowania, więc przepraszam, jeśli ta odpowiedź jest nieco długa. Z punktu widzenia inżynierii oprogramowania celem naukowego twórcy oprogramowania jest zaprojektowanie rozwiązania, które spełnia zestaw ograniczeń, które często są ze sobą sprzeczne .
Oto kilka typowych przykładów tych ograniczeń, które można zastosować do projektu biblioteki rzadkich macierzy:
- Ukończone w jeden miesiąc
- Działa poprawnie na twoim laptopie i kilku stacjach roboczych
- Działa wydajnie
Naukowcy stopniowo zwracają większą uwagę na inne wspólne wymagania inżynierii oprogramowania:
- Dokumentacja (instrukcja obsługi, samouczek, komentowanie kodu)
- Konserwowalność (kontrola wersji, testowanie, konstrukcja modułowa)
- Wielokrotnego użytku (budowa modułowa, „elastyczność”)
Możesz potrzebować mniej więcej jednego z tych wymagań. Jeśli próbujesz wygrać nagrodę Gordona Bella za wydajność, nawet ułamki procent są istotne, a niewielu sędziów ocenia jakość twojego kodu (o ile tylko możesz przekonać ich, że ma rację). Jeśli próbujesz uzasadnić uruchomienie tego kodu na współdzielonym zasobie, takim jak klaster lub superkomputer, często musisz bronić twierdzeń dotyczących wydajności kodu, ale rzadko są one bardzo rygorystyczne. Jeśli próbujesz opublikować artykuł w czasopiśmie opisujący wzrost wydajności swojego podejścia, musisz być prawowitym szybszy niż konkurenci, a 20% wydajności to kompromis, który z przyjemnością zapewniłbym lepszą konserwację i możliwość ponownego użycia.
Wracając do pytania: „dobry projekt”, który ma wystarczająco dużo czasu na opracowanie, nigdy nie powinien poświęcać wydajności. Jeśli celem jest, aby kod działał tak szybko, jak to możliwe, kod powinien być zaprojektowany w oparciu o te ograniczenia. Możesz skorzystać z takich technik, jak generowanie kodu, asembler lub skorzystaj z dobrze dostrojonych bibliotek, które pomogą Ci rozwiązać problem.
Ale co, jeśli nie masz wystarczająco dużo czasu na rozwój? Co jest wystarczająco dobre? Cóż, to zależy i nikt nie będzie w stanie udzielić ci dobrej odpowiedzi na to pytanie bez większego kontekstu.
FWIW: Jeśli naprawdę interesuje Cię pisanie wysokowydajnych rzadkich jąder matrycowych, powinieneś porównać się ze zoptymalizowaną instalacją PETSc i współpracować z ich zespołem, jeśli ich pokonujesz, chętnie wprowadzą dostrojone jądra do biblioteki.