aslında ne geliştirdiğinize bağlı. cevap, ne geliştirdiğinize bağlı olarak, "önemsiz" den "kesinlikle kritiktir" ve takımdaki herkesin paralel uygulamaları iyi anlamasını ve kullanmasını bekleriz ".
çoğu durumda, kilitlenme, iş parçacığı, görev ve görev havuzlarının sağlam bir şekilde anlaşılması ve kullanılması, paralellik ihtiyacı gerektiğinde iyi bir başlangıç olacaktır. (dil / lib'e göre değişir)
Buna ek olarak, tasarımlar arasındaki farkları da yapmalısınız - önemsiz olmayan çoklu işlem için, çoğu zaman birkaç yeni programlama modeli veya paralelleştirme stratejileri öğrenilmelidir. bu durumda, öğrenme, sağlam bir anlayışa sahip olmak için yeterli zamanın başarısız olması ve mevcut programların güncellenmesi için bir yıl (veya daha fazla) bir ekip gerekebilir. o noktaya ulaştıktan sonra, (umarım!) bugün yaptığınız gibi sorunları / uygulamaları algılamayacak veya yaklaşmayacaksınız (bu geçişi henüz yapmadıysanız).
bir başka engel de, bir programı belirli bir yürütme için etkin bir şekilde optimize etmenizdir. programları optimize etmek için çok fazla zamanınız yoksa, gerçekten gerektiği kadar faydalanamazsınız. yüksek seviyeli (veya belirgin) paralelleştirme, programınızın algılanan hızını oldukça az çaba ile artırabilir ve bu, bugün birçok takımın gideceği kadarıyla: "Uygulamanın gerçekten belirgin kısımlarını paralelleştirdik" - bazı durumlarda bu iyi. asılı meyveyi almanın ve basit paralellik kullanmanın faydaları çekirdek sayısı ile orantılı olacak mı? Çoğu zaman, iki ila dört mantıksal çekirdek olduğunda, ancak bunun ötesinde çok sık değil. çoğu durumda, zaman yatırımı göz önüne alındığında, bu kabul edilebilir bir getiri. bu paralel model birçok insanın paralelliğin iyi kullanımlarını uygulamaya girişidir.
bu önemsiz paralel modelleri kullanarak öğrendikleriniz tüm karmaşık paralel senaryolarda ideal olmayacaktır; karmaşık paralel tasarımları etkin bir şekilde uygulamak çok farklı bir anlayış ve yaklaşım gerektirir. bu basit modeller genellikle ayrılır veya sistemin diğer bileşenleri ile önemsiz bir etkileşime sahiptir. Ayrıca, bu önemsiz modellerin birçok uygulaması etkili bir şekilde karmaşık paralel sistemlere iyi ölçeklenmemektedir - kötü karmaşık bir paralel tasarım basit model kadar uzun sürebilir. ill: yürütme sırasında 8 mantıksal çekirdeği kullanırken tek dişli modelin iki katı kadar hızlı çalışır. en yaygın örnekler çok fazla iş parçacığı ve yüksek düzeyde senkronizasyon paraziti kullanmak / oluşturmaktır. genel olarak buna paralel yavaşlama denir. tüm paralel problemlere basit problemler olarak yaklaşırsanız karşılaşmak oldukça kolaydır.
bu nedenle, programlarınızda gerçekten etkili çoklu kullanım yöntemini (bugünün ikliminde azınlık) kullanmanız gerektiğini varsayalım: karmaşık modeli öğrenmek ve daha sonra program akışına ve etkileşime nasıl yaklaştığınızı yeniden öğrenmek için basit modeli etkili bir şekilde kullanmanız gerekecektir. karmaşık model, donanımın bugün olduğu ve en baskın iyileştirmelerin yapılacağı yer olduğu için programınızın en sonunda olması gereken yerdir.
basit modellerin yürütülmesi çatal gibi düşünülebilir ve karmaşık modeller karmaşık, ah, ekosistem gibi çalışır. Genel kilitleme ve iş parçacığı dahil olmak üzere basit modellerin anlaşılması, etki alanı (içinde geliştirdiğiniz) kullandığında ara geliştiricilerin olması gerektiğini veya yakında bekleneceğini düşünüyorum. karmaşık modelleri anlamak bugün hala (çoğu alanda) biraz olağandışı, ancak bence talep oldukça hızlı bir şekilde artacak. geliştiriciler olarak, programlarımızın çok daha fazlası bu modelleri desteklemelidir ve kullanımının çoğu bu kavramları anlama ve uygulamada oldukça geride kalmaktadır. mantıksal işlemci sayıları donanım geliştirmenin en önemli alanlarından biri olduğundan, karmaşık sistemleri anlayan ve uygulayabilen insanlara olan talep kesinlikle artacaktır.
Son olarak, çözümün sadece "paralellik eklemek" olduğunu düşünen birçok insan var. Çoğu zaman, mevcut uygulamayı daha hızlı hale getirmek daha iyidir. birçok durumda çok daha kolay ve çok daha basittir. vahşi ortamdaki birçok program hiçbir zaman optimize edilmemiştir; bazı insanlar henüz optimize edilmemiş versiyonun bir gün donanım tarafından gölgede bırakılacağı izlenimine kapıldılar. Performans önemliyse, mevcut programların tasarımını veya algosunu geliştirmek de önemli bir beceridir - sorunlara daha fazla çekirdek atmak her zaman en iyi veya en basit çözüm değildir.
modern PC'leri hedeflerken, iyi paralel sistemler uygulamak zorunda olan çoğumuzun çoklu kullanım, kilitleme, paralel kütüphaneler, bir kitap okuma değerinin ve birçok deneyim yazma ve test programlarının ötesine geçmesi gerekmeyecektir (temel olarak, yaklaşım yazma programları).