2016-03-22 11 views
1

İki çalışma CUDA SM_2.x aygıtını barındıran bir bilgisayarda, hata ayıklayıcıda cudaSetDevice (1) çağrısının CUDA hatası 10'u (geçersiz aygıt) attığını fark ettim. Bununla birlikte, hata ayıklayıcı dışında yürütüldüğünde iyi çalışır. Ayrıca, normalde ID 1'e sahip olan cihazın, hata ayıklayıcısının içinde cihaz ID 0'a sahip olduğunu da not etmekteyim.Hata ayıklama yaparken CUDA cihaz kimlikleri değişiyor mu?

Aygıt kimliğimin yalnızca ilk PCIe yuvasında yüklü aygıt yerine ilk kullanılabilir aygıtına atanmış olduğundan şüphelerim onaylandı mı? Böyle bir durumda, örn. cudaSetDevice (1), CUDA'nın cihaz kimliklerini nasıl tayin ettiğinden bağımsız olarak her zaman aynı cihazı seçer?

+0

Hangi işletim sistemi/platform? Hangi hata ayıklayıcı? –

+0

Fedora 23 Linux, cuda-gdb. Farklı hata ayıklayıcılar ve işletim sistemi farklı davranışları var mı? –

cevap

1

Gerçekten kısa cevap, hayır, bunu yapmanın bir yolu yok. Bunu söyledikten sonra, sabit bir cihaz kimliğini kodlamak asla doğru bir şey değildir.

  1. (istediğiniz cihazı izin vermek ve çok yararlı bir API vardır) sizin için API döner mevcut cihazlar listesinden bir kimliği seçin veya
  2. : Sen ya istiyorum herhangi bir açık aygıt seçimini, kodunuzda hiç kullanmazsınız ve sürücünün sizin için uygun bir geçerli aygıt kimliğini otomatik olarak seçmesini sağlamak üzere uygun sürücü hesaplama modu ayarlarına ve/veya CUDA_VISIBLE_DEVICES ortam ayarına güvenmeyin.

Seçeceğiniz, büyük olasılıkla kodunuzun dağıtıldığı ortam tarafından belirlenir.

+0

Bu, bir sorun, çünkü seçilen cihazları düzeltmek ve bir kuru çalışma derlemesinden sonra boyutları engellemek için kod oluşturma ve kendi doluluk optimizasyon kodumuzu kullanıyoruz. Orijinal soruma geri dönersek, seçilen cihazın her zaman kullanılmasını garanti etmenin bir yolu var mı? –

+0

@JamesTurner: Evet, cevabımda her iki yöntemi de kullanın. Cihazları seçtiğinizde, çalışma zamanı cihaz numaralandırma işlemlerini iradenizle denemediğinizde daha karmaşık olmanız gerekir. Cihaz numaralandırmanın sabit olduğu garanti edilmez ve keşfettiğiniz gibi kırık bir yaklaşım olduğu varsayılmaya çalışılır. – talonmies

+0

Bunu sormamın nedeni, yazılımımızın belirli heterojen bilgi işlem kümesi yapılandırmalarında (yani aynı aygıtta karma aygıt mimarisi) - kendi * yük dengeleme algoritmalarımıza göre - biri tarafından değil, kodlar üretmesidir. Model grafik bölümleme kod oluşturmadan önce gerçekleştirilir, bu nedenle maalesef tüm bu çok yararlı API'lere çalışma zamanında dayanamayız. Çalışma zamanının bana "İhtiyaçımı iradem kırmak" için bana ihtiyacım olan cihazı vermesini istemem. Belki de bu zaten eklenmemişse eklenecek bir özelliktir. –