C ++ 'da paralel dinamik grafik kütüphanesi arıyorum


11

Merhaba scicomp topluluğu,

Böyle olarak çerçeveler kullanılarak grafik algoritmaları alanında çalışmış NetworkX (Python), JUNG ve YFiles (Java). Şimdi paralel ve yüksek performanslı bilgisayar alanına giriyorum. Yeni bir proje için, aşağıdaki özelliklere sahip bir C ++ grafik kütüphanesi arıyorum:

  • algoritma geliştirmeyi sağlayan sezgisel bir arayüze sahiptir
  • dinamik işlemleri destekler: örneğin, rastgele düğüm / kenar eklemeleri ve silme işlemleri
  • paralelleştirmeyi destekler: örneğin programcıyı çoklu iş parçacığından kaynaklanan sorunlardan korur
  • düşük bellek yüküne sahiptir ve yüksek performanslı bilgi işlem için uygundur

Lütfen bazı kütüphaneleri önerin ve bu kriterleri, artıları ve eksileri tartışın.

Yanıtlar:


11

Grafik Kütüphanesini ve LEMON'u Artırın

Daniel'in kapsamlı cevabından bahsettiği gibi , en tam özellikli genel C ++ kütüphanesi Boost Graph Kütüphanesi'dir . Genişlik ilk ve derinlik ilk arama, minimum yayılan ağaçlar ve bağlı bileşenler arama gibi bazı temel algoritmalar yapabilen yeni bir dağıtılmış bellek uzantısı var, ancak yeni projeye çok aşina değilim. Boost Grafik Kütüphanesi, dünyaca ünlü birçok projede tanınmış ve kullanılmaktadır.

Temel HPC grafik çalışması yapıyorsanız, Boost Grafik Kütüphanesi ile başlamak isteyebilirsiniz, ancak birçok HPC C ++ derleyicisinin Boost ile ilgili zorluk yaşadığını (C ++ standartlarına oldukça sıkı bağlı kalmasına rağmen) unutmayın ve bir Boost'un eski sürümü veya HPC sistemlerinde çalışmasını sağlamak için GCC gibi satıcı olmayan bir derleyici.

LEMON depolarına hızlı bir şekilde göz atmak, IBM BlueGene süper hesaplama ekibinin katılımı olduğunu gösterir, ancak MPI için herhangi bir bağımlılık veya yapılandırma görmüyorum, bu yüzden şu anda sadece seri bir grafik kütüphanesi olması muhtemeldir.

Yük dengeleme ve Dinamik grafik (yeniden) bölümleme

Yük dengeleme ve dinamik grafik bölümlendirme ile ilgileniyorsanız, birkaç seçeneğiniz daha var. Belki de en tanınmış kütüphane, geçen yıl sürüm 4'e güncellenen ParMETIS'dir . ParMETIS, çoklu fizik simülasyonları için önemli olan köşe bazlı ağırlıklandırmaya sahiptir.

ParMETIS'in Avrupalı ​​rakibi, belirli sorun türleri için daha iyi performans gösteren PT- Scotch'dur, ancak ParMETIS'e benzer şekilde sık güncellenmez.

Ayrıca ilginizi çekebilir C ++ bilimsel hesaplama için Sandia Ulusal Laboratuarları Trilinos meta-paketinin bir parçası olan Zoltan . Zoltan kendi hiyerarşik bölümleyicilerine ve hem ParMETIS hem de PT-Scotch arayüzlerine sahiptir.

Graph500

Eşzamanlı arama, optimizasyon (tek kaynaklı en kısa yol) ve kenar odaklı (maksimum bağımsız set) üzerinde çalışıyorsa, serbestçe bulunan Graph500 karşılaştırmasıyla da ilgileneceksiniz .


1
Soru: Paralel Boost Grafiği Kitaplığı dağıtılmış bellek paralelliğine yöneliktir. Normal Boost Grafik Kütüphanesi, OpenMP ile paylaşılan bellek paralelleştirmesi için uygun mu?
clstaudt

@clstaudt - Bu probleme özgü olacak. Daha iyi bir yanıt için algoritmanızın ayrıntılarını daha derinlemesine incelemeniz gerekecek (ve muhtemelen yeni bir soru olurdu).
Aron Ahmadia

5

Belki de, Artırın Grafik Kütüphanesi aradığınız şeydir. GraphViz'in DOT formatında belirtilen grafikleri okumak için bir ayrıştırıcı vardır. Bellek yükü hakkında gerçekten bir bilgim olmasa da, paralelleştirme için bir değişken sağlıyor .

Başka bir grafik kütüphanesi LEMON ama gerçekten bilmiyorum ve paralelleştirme desteği varsa, reklamı yapılmaz. Web sitesi olsa da iyi bir izlenim bırakıyor;)


LEMON benim için de iyi görünüyor, ancak paylaşılan bellek paralel kodu (OpenMP) için kullanıp kullanamayacağım konusunda hiçbir fikrim yok.
clstaudt

Ben de dürüst olmak gerekirse. Ama belki probleminiz için paylaşılan veri yapılarını bildirmek ve algoritmalarını farklı evrelerde çalıştırmak için kullanabilirsiniz. Belki probleminizi uygun alt problemlere ayırabilirsiniz.
Daniel Eberts

5

Paralellik için tasarlanmış dinamik bir grafik veri yapısı olan STINGER'den de bahsetmek istiyorum . Web sitesine göre, aşağıdaki hedefler için tasarlanmıştır:

Taşınabilirlik: STINGER için yazılan algoritmalar birden çok dil ve çerçeve arasında kolayca çevrilebilir / taşınabilir

Verimlilik: STINGER, büyük grafik topluluğunun birbirlerinin araştırma gelişmelerinden hızla yararlanabilmesi için ortak bir soyut veri yapısı sağlamalıdır. Bu, felsefede toplumun seyrek ve yoğun matrislerin örtük kullanımı nümerik algoritmalarına benzer.

Performans: Her grafik algoritması için hiçbir veri yapısının optimal olmadığı kabul edilmektedir. STINGER'ın amacı, çoğu algoritmayı iyi çalıştırabilecek hassas bir veri yapısı yapılandırmaktır. Geniş bir tipik grafik algoritmaları setinde başka bir genel veri yapısı ile karşılaştırıldığında STINGER kullanımında önemli bir performans düşüşü olmamalıdır. STINGER, paylaşılan bir bellek adres alanı üstlenmeli ve hem ardışık hem de paralel algoritmalara izin vermelidir. Veri yapısı, paralel algoritmaların mümkün olan yerlerde eşzamanlılığı kullanmasına izin vermelidir.

LEMON veya Boost Grafik Kütüphanesi kadar genel değildir ve daha erken bir gelişim aşamasındadır. Eğer bakarsan, ben senin yorumlarınla ​​ilgilenirim.


STINGER, Georgia Tech'teki David Bader'in laboratuvarından çıkar. HPC topluluğunda Graph500'deki çalışmaları ile tanınmaktadır, bundan bahsettiğiniz için teşekkürler!
Aron Ahmadia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.