Programowanie wielowątkowe pociąga za sobą problem synchronizacji i blokowania danych. Problem wczytywania plików definiujących obiekty 3D faktycznie możnaby rozwiązać przy użyciu konwersji na formaty binarne (odpada konieczność parsowania pliku). Z teksturami może być nieco gorzej. Wczytywanie tekstur można by zaimplementować przy użyciu mapowania pliku w pamięci (w POSIX: mmap(), w Win32 - niestety nie wiem, nie programuję pod tą platformę). Moje małe testy wykazały 4-krotne przyspieszenie przy wczytywaniu pliku o rozmiarze 1MB oraz ponad 30-krotne w przypadku pliku o rozmiarze 10MB.
Jeśli chodzi o wstawki asemblerowe i ogólnie przepisywaniu kodu do asemblera - faktycznie, użycie SSE(2) może tutaj pomóc, jednak samo używanie wstawek w kodzie nie zawsze jest zalecane. Wstawki burzą optymalizacje, wprowadzane przez kompilator, dlatego dobrze by było dokładnie rozważyć, czy wstawienie wstawki w danym miejscu kodu przyniesie więcej pożytku, czy szkody.
Odniosę się jeszcze do pisania symulatora w dwóch językach. Może lepiej przepisać wszystko .pas na .cpp lub .c? Kompilatory Pascala mają złą sławę jeśli chodzi o jakość generowanego kodu. Nie wspomnę już o tym, że sam Pascal ma w sobie pewne mechanizmy, które są przydatne do wyszukiwania błędów, ale niekorzystnie wpływają na wydajność.
Oprócz tego warto się też zapoznać z dwoma dokumentami firmy AMD, dokładnie omawiającymi problem optymalizacji programu:
1,
2