Kısa bir süre önce C++ ile çalışmaya başladım ve bir tamsayı değerleri matrisi ile en iyi yolu bulan basit bir test uygulaması yazdım. Bu uygulamanın performansını artırmak için C++ 11 std :: thread kullanarak çoklu iş parçacığı uyguladık.Tüm mevcut konuları kullanma kötü bir uygulama?
unsigned int threadCount = std::thread::hardware_concurrency();
std::vector<std::thread> threads;
for (unsigned int threadIndex = 0; threadIndex < threadCount; threadIndex++) {
threads.push_back(std::thread(&AltitudeMapPath::bestPath, this, threadCount, threadIndex));
}
for (auto& thread : threads) {
thread.join();
}
Şu an itibariyle ben sadece mevcut iş parçacığı sayısını belirlemek ve her iş parçacığı için testimi yürütün. Bu fantastik çalıştı ama beni düşünmeye başladı ...
Belirli bir sistem için mevcut tüm konuları denemek ve kullanmak kötü bir uygulamadır? Bu basit örneğin ötesinde, çok iş parçacıklı olan üretim düzeyi uygulamaları, olabildiğince fazla iş parçacığı almayı dener (veya problemin izin vereceği gibi) veya bu kadar açgözlü olmamam gerekir mi?
Teşekkürler, ben kullanması gereken bir uygulama, kullanıcının tercihine bağlıdır kaç çekirdek tek doğru en iyi uygulama vardır sanmıyorum
Bu sorunun oldukça geniş olduğunu düşünüyorum: Bazen bir sürecin açgözlü olmasını istersiniz, ancak programın performansını gerçekten umursamayabilirsiniz. Belki de programa, kullanıcıların iş parçacığı sayısını kendilerinin belirleyebileceği bir parametre ekleyin. –
'std :: async''e bir göz atmayı unutmayın. Ham ipliklerden biraz daha soyutlama sağlar. Gerçek üretim kodu için, görev tabanlı bir kütüphane kullanıyorum, ör. Intel TBB, Microsoft PPL veya Apple GCD. – Jens
@Jens Bilmekte fayda var! Evet, şimdi bu beni C++ 'ya geri döndüren küçük bir proje ... ... çok iş parçacığı ve CUDA programlamasıyla uğraşıyor. Ancak, büyük resmi düşünmek her zaman iyidir! – ductiletoaster