2013-07-25 37 views
7

XML dosyalarını ayrıştıran ve içeriklerini geniş bir SQL Veritabanına ekleyen bir yazılım parçasının performansını geliştirmem gerekiyor. Bunu bir GPU üzerinde gerçekleştirmenin mümkün olup olmadığı hakkında bilgi bulmaya çalışıyorum. Hem CUDA hem de OpenCL ile ilgili yaptığım araştırmalar, C/C++, FORTRAN ve diğer birçok dilde yazılımın, GPU işlemeyi mümkün kılmak için derleyici direktifleri kullanılarak geliştirilebileceği gerçeğinin ötesinde, net bir cevap vermemi sağladı. Bu bana şu soruyu sormamı sağlar: GPU hızlandırması için yazılmış bir API veya kütüphaneye ihtiyacım var mı yoksa CUDA/OpenCL için derleyici direktifleriyle derlenen ve C++ XML Ayrıştırma kütüphanesi kullanılarak C/C++ ile yazılmış bir programın XML'i otomatik olarak çalıştırması gerekir mi? GPU'da kütüphane işlevleri var mı?GPU Hızlandırılmış XML Ayrıştırma

+1

* "bir program C ile yazılmış olur /C++ standart bir XML Ayrıştırma kitaplığı kullanarak ve CUDA/OpenCL için derleyici yönergeleriyle derlenen GPU'da XML kitaplığı işlevlerini otomatik olarak çalıştırırsınız. * * - Kesinlikle eski ve muhtemelen olası algoritmaları yeniden yapılandırmanız gerekir. XML-ayrıştırma gibi GPU hesaplama için hiyerarşik ve uygun olmayan bir görev ile yararlı (ben XML ayrıştırma konusunda uzman değilim, ben itiraf ediyorum). –

cevap

2

Aslında, GPU'da XML ayrıştırmayla ilgili bir anlam göremiyorum. GPU mimarisi, büyük kayan noktalı sayı hesaplamalarına odaklanır ve metin işleme gibi işlemlere odaklanmaz. Birden fazla çekirdek kullanmak için CPU ve bölünmüş XML ayrıştırma kullanmak için çok daha iyi olduğunu düşünüyorum. Böyle bir uygulamada GPU kullanmak benim görüşüme göre aşırı.

+1

bilgisi olmayan çok kötü insanlar, itibar puanlarıyla ilgili bir soruyu yanıtlamaya çalışır. Tam olarak aynı problem var, GPU'da ayrıştırmak için en iyi algoritmaya ihtiyacım var ve bulamıyorum. Bunun için -1 – Nulik

2

Genelde, GPU XML işleme hızlandırması için uygun değildir ... GPU, yalnızca, istenen görev çok sayıda GPU işlem biriminden yararlanmak için büyük ölçüde paralellik gösterirse harikadır. Diğer yandan XML işlemleri büyük ölçüde tekdir iş parçacığı iş makinesi geçiş türü.

0

Önce xml'nizin yapısına bakın. Bu bağlantıyı takiben, paralel işlem için uygun XML yapısı için kriterler bulabilirsiniz. Sonra Parallel XML Parsing in Java

xml yapısı paralel olarak işlenebilir ise birkaç fikirleri: i bildiği gibi

, XML ayrıştırma ihtiyaçları ağacında mevcut konumu hatırlamak ve uygun açılma ve düğümlerin kapanmasını doğrulamak için yapıyı yığını.

Yığın yapısı, yığın işaretçisi olan 1 boyutlu bir dizi olarak gösterilebilir. Yığın işaretçisi dizide yığın üst öğesinin konumunu içerir

Dizileri 1D dokularında depolayabileceğinizi söylüyorlar (en fazla 4,096 eleman). Eğer her benzersiz eleman adının ayrı kayan noktalı sayı atarsanız Ya 2D dokular (maks. 16777216 = 4,096x4,096 elementler) ... o zaman gibi öğeleri saklayabilir, daha https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter33.html

için aşağıdaki bağlantıyı bak sayıları ascii/utf-8 kodlarının bir dizisi olarak alırsanız, neden bunları bir dizi kayan nokta sayısı olarak saklamıyorsunuz?

GPU'yu kullanmayı düşünmeniz gereken en önemli şey çıktı yapısının ne olduğu.

Örneğe ihtiyacınız varsa; Sabit uzunluklu sütunların tablo satırı, daha sonra 1D veya 2D diziliminde bu tür yapıların nasıl gösterileceği ile ilgilidir.

Önceki noktalardan emin olduğunuzda ve GPU sizin için uygunsa,

Ben hiç GPU ile programlama denedik, ama bir şey olduğunu söylemek bana çok yakında görünüyor asla geri ... verilerinizin

ve tabii bütün xml ayrıştırıcı için dokular ve dokular için verilerinizi dönüştürmek imkansız ...

Birisi bütün algoritma oluşturmak ve GPU kullanımı verimli olup olmadığını denemek veya ilk olmalıdır değil

Aslında GPU hızlandırma için yazılmış bir API ya kitaplık gerekir, yoksa Do