Tôi có một chương trình chia tỷ lệ thành nhiều luồng, mặc dù - về mặt lý thuyết - nó phải mở rộng tuyến tính: đó là phép tính chia thành các đoạn nhỏ hơn và không cần gọi hệ thống, gọi thư viện, khóa, vv Chạy với bốn chủ đề chỉ nhanh hơn gấp đôi khi chạy với một luồng đơn (trên hệ thống lõi tứ), trong khi tôi mong đợi một con số gần gấp bốn lần nhanh.Hiệu suất đa luồng và lược tả
Thời gian chạy của các triển khai với pthread, chủ đề C++ 0x và OpenMP đồng ý.
Để xác định nguyên nhân, tôi đã thử gprof (vô ích) và valgrind (tôi không thấy bất kỳ điều gì rõ ràng). Làm thế nào tôi có thể đánh giá hiệu quả những gì gây ra sự chậm lại? Bất kỳ ý tưởng chung nào về nguyên nhân có thể của nó?
- Cập nhật -
Việc tính toán liên quan đến Monte Carlo hội nhập và tôi nhận thấy rằng một số lượng hợp lý của thời gian được dành tạo số ngẫu nhiên. Trong khi tôi không biết tại sao điều này xảy ra với bốn chủ đề, tôi nhận thấy rằng các máy phát điện số ngẫu nhiên không phải là reentrant. Khi sử dụng mutexes, thời gian chạy sẽ phát nổ. Tôi sẽ reimplement phần này trước khi kiểm tra các vấn đề khác.
Tôi đã thực hiện lại các lớp lấy mẫu đã cải thiện hiệu suất đáng kể. Vấn đề còn lại là, trên thực tế, ganh đua của bộ đệm CPU (nó đã được tiết lộ bởi cachegrind như Evgeny nghi ngờ.)