top of page

Memory Access Patterns And Performance

  • Writer: Sevdanur GENC
    Sevdanur GENC
  • Apr 25, 2013
  • 2 min read

Paralel programlama ile calismalarimizda bellege nasil erisecek olmamiz onemlidir. Bellegin nasil calistigini bilirsek yazacagimiz kod'un performansinida ayni sekilde hesaplayabilmis oluruz. Bunun oncelikle, cache line size'dan bahsetmemiz gerekiyor. Ardindan, row wise ve column wise kavramlarinin onemini birer ornekle aciklayalim.

Cache bellekte cache line boyutu onemlidir. Cache Line, Cache'deki her bir gozun dizildigi satir anlamina gelmektedir. Cache'imiz icin 64 satir dusunecek olursak, bu kapasite uzerinde her bir satiri 32 byte'lik veri almaktadir. Her bir satirda 8 goz bulundugunu ve her bir gozun de en fazla 4 byte'lik veri aldigini dusunelim. Bu demektir ki, bir satira 8 elemanli oldugu halde toplamda 32 byte'lik bir ifadeyi atayabiliriz. Genel olarak dusunursek, 64 satir X 32 byte'lik bir alanimiz bulunmaktadir. Tum bu hesaplamalardan sonra anlasilmasi gereken tek sey su olmalidir; bizim memory/cache ' in kapasitelerini en etkili sekilde kullanmamiz gerekmektedir. Bunun icin kodlamalarimizda genellikle satir sutunlarla calisirken dongu optimizasyonlarina dikkat etmemiz gerekmektedir. Caching yaparken, hiz ve memory etkin bir rol oynamaktadir. En hizli memory, cache'dir. Cache'in dizayni cok onemli oldugu icin dongu optimizasyonlarinda her iterasyonda cache'in etkin sekilde kullanilmasi ilerisi icin sorun teskil etmeyecektir. Bunun icinde dikkat etmemiz gereken iki yontem vardir; Satir ve Sutun temelli carpim yontemleri.

Satir Yontemi; Row Wise

      Kesinlikle daha etkili bir kullanim yontemidir cunku cache'e verileri doldururken tamamen satir satir islem yapiyor olacaktir. Donguye bakacak olursak i degeri ile komple satiri blogluyarak oncelikle satira veriler tasinacaktir. Kisacasi direkt bloglanmis bir satir uzerinde calisiyoruz. J ise surekli olarak N'ye kadar birer birer artacaktir. Boylelikle bekleme suresi bir iterasyondur. a<0>

<0>

dan sonra cache line'da ki takip eden goz a<0>

<1>

olacaktir ama bir iterasyon sonra gececektir.

Sutun Yontemi; Column Wise

      Bu donguyu inceledigimizde oncelikle i'nin surekli arttigini sonrasinda ise j'nin degerlerini alacagini goruyoruz. Aslinda calisan satiri yine burada blokluyoruz. Sebebi, cache line ozelliginden dolayi her bir iterasyonda bir sonraki line'a atliyoruz. Line'in birinden digerine gecereken arada gecen N degerlik bir sure bulunmaktadir. N bittikten sonra diger goze gecilecektir. Komple bir line'i bir goz'de icin isgal etmis oluyoruz. Bu yuzden her bir satirda ciddi farkliliklar meydana gelecektir. Kisacasi yapacagimiz islemlerde satiri degilde sutunlari bloklamis oluyoruz. Bu da malesef kotu bir kullanimdir ki cache missed olarakta ismi bilinmektedir.

            Sekilde inceleyecek olursak ilk dongumuz row wise icin bir ornektir. Ikinci dongumuz ise column wise icin bir ornektir. 1024 satirlik, 100 sutunluk bir veriyi row wise kullanarak yaptigimizda cache misses degerimiz; 100 * 1024 olucaktir bu gozler arasinda dolasma suresi olarak dusunebiliriz. Column wise icin bunu dusunecek olursak, satir degilde sutun bazli dolasarak verileri yerlestirecegini dusundugumuzde 100 * 1024 kez dolasmanin yani sira bunu sutun sutun yapacagindan dolayi 8'e boleriz. Her bir satirimizi 8 goze bolerek sutunlarimizi olusturdugumuz icin sutun sutun dolasirken (100 * 1024) / 8 'lik bir sure gecmis olacaktir. Keyifli Calismalar Dilerim.

Recent Posts

See All
Loop Optimization - Loop Optimizasyonu

Var olan dongulerin acilmis yada sikistirilmis hallerini optimize ettikten sonra cache'imizde nasil bir performans saglayacigini gorebiliriz. Bunun icin uc adet dogu optimizasyon yontemi bulunmaktadir

 
 
 
Nested Parallel Loops

Matrix Multiplication / Matrix Carpma islemlerini OpenMP araciligi ile paralel alanda nasil yapilabilecegini incelerken ayni zamanda for construct'larin nested parallel loops alaninda nasil calistigin

 
 
 
OpenMP Synchronization Constructs

Synchronization Constructs konu basligi altinda Critical Constructs, Atomic Constructs ve Barrier Constructs yapilarini birer ornekle aciklamaya calisacagim. Ayni zamanda Reduction Clause yapisi hakki

 
 
 

Comments


©2035 by Sevdanur Genc. Powered and secured by Wix

bottom of page