Bạn đang chỉ ra một câu hỏi đúng, đồng thời rất khó đưa ra câu trả lời đơn giản cho câu hỏi đó. Có một số khía cạnh liên quan.
- Overhead bắt đầu chủ đề mới (hoặc chọn chúng từ một số bộ nhớ cache);
- Căng thẳng trên bus bộ nhớ.
- Các khía cạnh trên khác nhau và có chi phí rất khác nhau cho các nền tảng khác nhau.
Máy tính lớn hơn có nhiều bus bộ nhớ. Những người nhỏ hơn chỉ có một. Trên một hệ thống xe buýt bộ nhớ, điều này không có ý nghĩa gì cả. Nếu hệ thống của bạn có nhiều kênh nhớ (kênh), thì mảng dữ liệu của bạn có thể có sự phân chia tùy ý giữa các ngân hàng bộ nhớ. Nếu nó xảy ra thì toàn bộ mảng nằm trong cùng một ngân hàng bộ nhớ, sự phân chia sẽ là vô ích. Tìm ra cách bố trí của mảng của bạn là một chi phí một lần nữa. Nói cách khác trước khi tách hoạt động giữa các lõi, cần phải tìm hiểu xem điều này có đáng làm hay không.
Câu trả lời đơn giản là những khó khăn để dự đoán chi phí đầu tư nhiều khả năng sẽ tiêu thụ lợi ích và làm cho kết quả tổng thể tồi tệ hơn.
Đồng thời cho một khu vực bộ nhớ thực sự lớn trên một số kiến trúc có ý nghĩa.
Nguồn
2012-10-12 05:55:28
hoạt động như vậy có thể sẽ chỉ bị chậm hơn nếu bạn song song nó - bạn có nhiều lõi/cpus chiến đấu để truy cập vào bus bộ nhớ. –
Có thể sử dụng hướng dẫn cụ thể để di chuyển nhiều byte hơn một lần sẽ giúp bạn. sử dụng song song sẽ có lợi thế chỉ khi dữ liệu được phân phối trong phần bộ nhớ khác nhau. – wbao
Trường hợp duy nhất trong đó một 'memset' song song có thể nhanh hơn là với các khối bộ nhớ rất lớn trên kiến trúc NUMA trong đó mỗi lõi đang làm việc trên bộ nhớ gắn với bộ xử lý của nó. –