Zajmuję się tworzeniem rodzimej biblioteki dla systemu Android, w której korzystam z optymalizacji montażu ARM i wielowątkowości, aby uzyskać maksymalną wydajność w dwurdzeniowym mikroukładzie ARM MSM8660. Robiąc pewne pomiary zauważyłem następujące:Problemy z dwurdzeniowym kodem ARM NEON Qualcomm Scorpion?
- jednowątkowy biblioteka z NEON optymalizacje jest szybciej niż jednowątkowy bibliotece ARMv6 optymalizacje (zgodnie z oczekiwaniami).
- wielowątkowy biblioteka z ARMv6 optymalizacji jest szybciej niż jednowątkowy bibliotece ARMv6 optymalizacje (prawidłowo).
- W wielowątkowych biblioteka z NEON optymalizacje jest wolniej niż jednowątkowych biblioteka z NEON optymalizacje (na pewno nie spodziewałem!).
Próbowałem przeszukiwać całą sieć, aby uzyskać wyjaśnienie, dlaczego tak jest, ale do tej pory nie znaleziono żadnych. Wygląda na to, że wszystkie rdzenie mają wspólny rurociąg NEON lub coś podobnego, ale wszystkie schematy zdają się wskazywać, że każdy rdzeń powinien mieć własną jednostkę NEON. Czy ktoś wie, dlaczego tak się dzieje?
Innym sposobem na to, że wąskim gardłem jest prawdopodobnie przepustowość pamięci zewnętrznej - w takim przypadku dodanie więcej rdzeni nie pomaga. –
Tak, ale jeśli była to tylko przepustowość pamięci zewnętrznej, wydajność powinna być co najmniej taka sama. Oczywiście dodanie kolejnych wątków wprowadzi więcej przełączania kontekstów, nie jestem pewien, ile to wpłynie na wydajność. – onemasse