2015-07-03 8 views
5

Belirli bir bellek ayırma yoğunluğu olan iş yüklerinde, bir üstbilgi dosyasının dahil edilmesinin% 5-10 oranında bir performans cezasıyla sonuçlandığı tuhaf bir fenomen yaşıyoruz.İş parçacığı yapılarının performans maliyeti: gözden geçirilmiş optimizasyonlar ve bellek ayırma

Bu başlık dosyası, bir global değişken olarak bir konu havuzunu bildirir. Bu iş parçacığı havuzu uygulamada hiç bir kapasitede (henüz) kullanılmamaktadır. Bu, program başlangıcındaki bu statik iş parçacığı havuzunun oluşturulmasının dışında, uygulama tamamen tek iş parçacıklıdır. Başlık kaldırıldığında performans cezası kaybolur.

Bazı araştırmalardan, bazı derleyici optimizasyonlarının artık mümkün olmaması nedeniyle, çok iş parçacıklı bir uygulamanın bazı performans cezalarında bulunabileceği görülüyor. Herhangi bir biçim veya kapasitede iş parçacığıyla ilgili bir yapı ortaya çıktığında bu tür optimizasyonların kapatılması mümkün mü? Ya da sayısız bellek ayırma işlemi gerçekleştirilirken, performans cezası en belirgin olduğu için, derleme/bağlama aşamasında, derleyicinin iş parçacığı oluşturma işlemlerinin gerçekleştirildiğini ve böylece bir iş parçacığı güvenli bellek ayırıcısına geçtiğini fark edebiliriz. ?

Bu, GCC ve clang ile birlikte bir Linux 64 bit iş istasyonunda gerçekleşir. C++ 11 standart iplik ilkelleri kullanılıyor.

EDIT EDIT Ayrıca, testlerimize göre, tcmalloc allocator yerine varsayılan değer kullanıldığında, performans farkının ortadan kalktığı anlaşılmaktadır.

+3

Bu aslında büyüleyici. fenomeni göstermek için en az bir örnek oluşturabilecek bir konumda mısınız? –

+0

Nesne dosyaları, eklenen değişkenlerin dışında mı değişir? – user2864740

+0

Bu "program başlangıcında statik iş parçacığı havuzu oluşturma", ana ve/veya çalışan iş parçacıklarında herhangi bir bellek ayırımı içeriyor mu? –

cevap

0

Çok iş parçacıklı malloc ve bazı diğer denetlenen işlevler, gördüğünüzle tutarlı bir kilit maliyete neden olur. Malloc uygulamasının iş parçacığı başlık dosyasındaki bazı yönergelerle dişli (ve kilitli) sürüme geçmesini beklerim.

Bu, makul bir maliyettir ve tek iş parçacıklı örnekler için garip performans değişiklikleri pahasına programdan daha anlaşılır bir çıktı sağlar.

İlgili konular