GPU Hesaplamadaki Yetersiz Bellek Hatasının Nedeni ve Çözümü

GPU hesaplama işleminde özellikle büyük boyutlu verilerle çalışırken verinin doğruluğunu kontrol etmemiz gerekmektedir. CPU hesaplamada büyük boyutlu veriler işletim sistemi tarafından belirlenen mevcut bellek boyutuna geldiği zaman otomatik olarak harddisk’te bir takas hafızası(swapping memory) oluşturarak veri doğrulama işini yapmış olur, bu yüzden de CPU’da işlemler daha yavaştır. GPU belleği ile harddist arasında böyle bir takas hafızası otomatik olarak OLUŞMAMAKTADIR. Bu yüzden kullanıcı GPU bellek limitini aşan verilen verifikasyonundan kendisi sorumludur.

Örneğin 10000×10000’lik double tipinde rastgele sayıları bellekte oluşturulalım ve GPU’ya aktaralım.
A = rand(10000);
Agpu = gpuArray(A);

Bu işlemden önce ekran kartımıza baktığımızda:
bos-bellek-1
İşlemin sonunda baktığımızda:
bos-bellek-2

Ekran kartı belleğimizde boş yer olduğu görülmektedir. Aynı şekilde yeniden bir rastgele sayı matrisi oluşturduğumuzda hata vermektedir çünkü bu yeni oluşturacağımız kısmı yerleştirecek alan bulunmamaktadır.

İlk başta boş alan: 973,668,352 byte’dır.
Rastgele 100 milyon sayı doldurulunca 173,604,864 byte alan kalmıştır.
1 double 8 byte olduğundan 800,000,000 byte alan dolmuştur.

Bellekte yeterli alan açmak için;
clear komutuyla GPU belleğindeki veriler silinebilir
veya
gpu = gpuDevice(1);
reset(gpu);

komutlarıyla ekran kartı resetlenebilir.

Yorum Yapın