2016-03-31 15 views
0

ArrayFire'da yeni bir ışın yayılımı algoritmasına sahibim. GTX Titan kartımla OpenCL arka ucunu kullanıyordum. OpenCL ile dakikada yaklaşık 25.000 adım koşuyordu. Daha sonra bunu CUDA arka ucuna geçirdim ve performans dakikada yaklaşık 50.000 adım oldu. Bu biraz şaşırtıcıydı, ancak OpenCL'de bulunmayan bazı gelişmiş özellikleri kullanabileceğini düşündüm. Daha sonra aynı testi GTX 960 kartımı kullanarak çalıştırdım. OpenCL ve 23.000 CUDA ile dakikada yaklaşık 22.000 adım koştu. Bu, Titan ile aynı modeli takip etmesini beklediğimden beri şaşırtıcı. Ayrıca dizüstü bilgisayarımda GT 730M kullanarak 2x performans değişikliğini gördüm. Nvidia'nın bazı kartlarda OpenCL'yi yavaşlattığını duydum. Bunu 700 serisi için mi yapıyorlar?OpenCL, GTX Titan'da CUDA kadar yavaş iki kat daha az

+5

NVIDIA bazı kartlarda OpenCL'yi yavaşlatmıyor. –

+1

Bu denklemde çok fazla değişken var. Burada bazı kodların gösterilmesi gerekiyor. Kullanılmakta olan arrayfire ve cuda versiyonu verilmelidir. –

+2

Ayrıca, sorunuzun sonundan spekülatif soruyu kaldırın. Tecrübemizden her şey eşit, nvidia GPU'larda (bizim tarafımızdan uygulanan çekirdekler için) opencl ve cuda'nın performansı oldukça benzer. Farklılıklar, cuBLAS ve cuFFT'den farklı olarak NVIDIA GPUS için optimize edilmemiş clBLAS ve clFFT gibi çekirdek kütüphanelerden gelmektedir. –

cevap

3

Hiçbir kod göstermediğiniz için, yalnızca bir profil oluşturucu sunabilirim. Örneğin amd kodeksini kullanıyorum ve tüm resimler bir 768x768 matrisi üzerinde 50x50 bilgisayarlı bir fırça alanı kullanarak aşırı senkronize bir evrişim algoritmasından alınmıştır. Çok sayıda tamsayıya ve yerel tamsayı dizilerine ve tamsayı işlemlerine ve sonuçta birçok fp işlemine sahip olmak bazı sorunlara yol açar (iş 3 aygıtta dengelenir).

Eminim nvidia uygulamanızda delikler tespit etmek için benzer bir yazılım var.

  • İşlev başına CPU zamanı profili, ana bilgisayar tarafında sıcak noktaları bilmenizi sağlar. Burada listelenen ilk 5 en çok kullanılan işlevler. Yani konak fonksiyonlarını optimize edebilirsiniz. (Işlevlerden birini tıklayarak çekirdek başına cpu talimat ayrıntılı performans sayaçlarını getirir)

cpu time

  • Çekirdek vektör birimleri tarafından herhangi darboğazları, sayıl birimler varsa gösterileri analiz , bellek işlemleri ve daha birçok seçenek. Çekirdek doluluk ve dalga sayıları görülebilir, ancak sağ tarafta onlarca başka şey vardır.

kernel analyzer

Eğer kerneloccupancy hücreyi tıkladığınızda, aşağıdaki resimde olduğu gibi ayrıntılı olarak darboğaz kaynağını görebilirsiniz:

enter image description here

  • Uygulama zaman çizelgesi iz profilleme arasındaki boşlukları ortaya ndRangeKernel, okuma-yazma işlemi, clFinish ve diğer API metotları, böylece çok sayıda sycnhronizations, çok dişli operasyonlarda ve memelerde darboğazlar olup olmadığını görebilirsiniz.

enter image description here

  • Ayrıca gtx 960 titan beat olamaz ory sızıntı. (Bu örnekte cihaz başına hiçbir zaman uyumsuz çalışır ve yedek senkronizasyon olduğundan, aşağıda da hem dikey hem de yatay yönlerde deliklerini gösterir) iş yükü 960 için yeterince büyük ve titan için yeterince küçük olmadıkça (belki de farklı aygıt kullanımından kaynaklanan sadece api yükü). Birim başına 192 çekirdek (her grupta 384 - 768 iplik için daha iyi) ve birim başına 128 çekirdek olan gtx960 (grup başına 256 - 512 - 1024 iplik için daha iyi paralellik) titan olabilir.
  • Dakikada 25000 yineleme 416 ikincisi adım başına yaklaşık 2.5 milisaniyedir. 2.5 milisaniye, bu zaman diliminde yalnızca 10-40 MB için aktarım yapabileceğiniz anlamına gelir. Gönderilen arabelleklerin boyutu nedir?Aşırı clFinish işlevleri, çekirdek zaman karşılaştırılabilir olduğunda (1-2 milisaniye gibi) gözlemlenebilir gecikmeye sahip en az yüzlerce mikrosaniye neden olur. Bu değerler, en iyi performansı elde etmek için (tepe noktası değil) titan yeterince yüklenecek şekilde yürütme ölçeğini artırır.

  • İş yükü çok küçük olduğunda, R7-240 (320 çekirdek) HD7870'imi (1280 çekirdek) geride bırakıyor çünkü çekirdek işletim oranı r7'de daha yüksektir, çünkü hesaplama birimleri başına daha fazla dalga cephesi vardır ve ALU'lar% 100 beslenir (doluluk oranı) Ayrıca, hesaplama (ek yük) ve donanımda (ek yük) daha az senkronizasyona hazırlanmak için daha az hesaplama birimi vardır. Bu nedenle "performans" ve "aşırı" gibi kriterler için farklı kategoriler vardır. Ayrıca daha yeni mimariler, zirve performanslarına daha yakın çalışırlar.

  • Muhtemelen, bir gtx 960 aynı anda (15000/m) çalışan dizi yangın uygulamanızın 3 x boyutunu yönetmeyebilirken titan 8-10 x uygulamaları aynı anda yönetebilir (örneğin @ 15000/m) (Eğer adım başına çalışma boyutunu arttırmak yerine uygulama düzeyinde paralellik seçerseniz).

Düzenleme: Örnek kodu aslında difüzyon gibi etkileşim işlem olup. daire şeklinde bir kaynak malzemenin etrafındaki alanın denge durumu:

enter image description here

Renk bantlama tüm renk kanalları (RGBA-her biri 1 byte için tamsayının 0-255 aralığında fp yuvarlama gelir, yüzen kullanılmış olmalıdır, ancak Yeterli sayıda pci-e yok)

+0

Verileri adımlar arasında gpu üzerinde bırakıyorum. Hafıza aktarım yükünü en aza indirmek için sadece 20 ila 50 adımı oluşturuyorum. Ayrıca benim ızgaram 1024x1024 boyutlarında. Nvidia X-Server'a göre% 99 oranında titian kullanıyorum. – chasep255

+3

Onun başvurusuna nereden eriştin? Amd's sitesinden –

+0

. geliştirici sayfası. Transfer oranının hesaplanması da önemlidir. –