Tôi đang phát triển một thư viện gốc cho Android, nơi tôi sử dụng tối ưu hóa lắp ráp ARM và đa luồng để có được hiệu suất tối đa trên chipset ARM lõi kép MSM8660. Trong khi thực hiện một số phép đo tôi nhận thấy như sau:Sự cố với mã ARM NEON lõi kép của Qualcomm Scorpion?
- Các đơn luồng thư viện với NEON tối ưu hóa là nhanh hơn đơn luồng thư viện với ARMv6 tối ưu hóa (như mong đợi).
- Các đa luồng thư viện với ARMv6 tối ưu hóa là nhanh hơn đơn luồng thư viện với ARMv6 tối ưu hóa (như mong đợi).
- Các đa luồng thư viện với NEON tối ưu hóa là chậm hơn thư viện với NEON tối ưu hóa đơn luồng (chắc chắn không mong đợi!).
Tôi đã thử tìm kiếm trên mạng để giải thích lý do tại sao điều này là nhưng cho đến nay không tìm thấy bất kỳ. Nó gần như có vẻ như tất cả các lõi chia sẻ cùng một đường ống NEON hoặc một cái gì đó như thế, nhưng tất cả các sơ đồ dường như chỉ ra rằng mỗi lõi nên có đơn vị NEON riêng của nó. Có ai biết tại sao điều này xảy ra?
Một cách khác để đặt vấn đề này là nút cổ chai có thể là băng thông bộ nhớ ngoài - trong trường hợp này thêm nhiều lõi không giúp ích gì. –
Có, nhưng nếu nó chỉ là băng thông bộ nhớ ngoài, hiệu suất nên ít nhất là bằng nhau. Tất nhiên thêm nhiều chủ đề sẽ giới thiệu nhiều bối cảnh chuyển đổi, tôi không chắc chắn bao nhiêu mà sẽ ảnh hưởng đến hiệu suất mặc dù. – onemasse