CUDA Academy · Ders

Döşeme Aşamaları Üzerinde Döngü

Döşemeler boyunca kısmi toplamları biriktirin.

3. ders / 413 adım

Döşeme Aşamaları Üzerinde Döngü, CoddyKit'te ücretsiz bir CUDA Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, CUDA Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. CUDA Academy kursu toplamda 4 dersten oluşur.

Skaler Çarpım Bölünür

Tam bir satırla tam bir sütunun çarpımı tek bir döşeme için fazla büyüktür. Bu nedenle uzun toplamı, her biri TILE genişliğinde bir aşama olacak şekilde parçalara ayırırsınız.

Aşamaları Sayma

Matrisler N genişliğinde ve döşemeler TILE genişliğindeyse, iç boyutun tamamını kapsamak için N / TILE aşamaya ihtiyacınız vardır.

int numPhases = (N + TILE - 1) / TILE;

Dış Aşama Döngüsü

Yükleme-eşzamanlama-hesaplama adımlarınızı aşama üzerinde bir döngünün içine alın. Her geçiş, döşeme penceresini A'nın satırı ve B'nin sütunu boyunca biraz daha ilerletir.

for (int phase = 0; phase < numPhases; ++phase) {
  // load, sync, compute, sync
}

Aşamalar Boyunca Biriktirme

Yerel sum değişkeni döngünün dışında tutulduğundan büyümeye devam eder. Her aşama, skaler çarpımın kendi bölümünü çalışan toplama ekler.

float sum = 0.0f;
for (int phase = 0; phase < numPhases; ++phase) { ... }

Aşamaya Göre Döşeme Ofseti

Her aşama, A'dan okuduğunuz sütunu ve B'den okuduğunuz satırı phase * TILE kadar kaydırır. Pencerenin ilerlemesini sağlayan mekanizma budur.

As[ty][tx] = A[row*N + phase*TILE + tx];
Bs[ty][tx] = B[(phase*TILE + ty)*N + col];

Yüklemeden Sonra Eşzamanlama

Daha önce olduğu gibi, herhangi biri döşeme üzerinde hesaplama yapmadan önce döşemenin tamamlanması için yüklemelerden sonra __syncthreads() çağrısını yapın.

__syncthreads();

Bu Aşamanın Bölümünü Hesaplama

İç döngü, yalnızca yeni yüklenen tile değerini kullanarak TILE çarpımını toplama ekler. Nihai skaler çarpımın bir parçasını oluşturur.

for (int k = 0; k < TILE; ++k)
  sum += As[ty][k] * Bs[k][tx];

İkinci Bariyer

Daha yavaş bir iş parçacığı onu hâlâ okurken hiçbir iş parçacığının tile değerinin üzerine yazmaması için her aşamayı başka bir __syncthreads() çağrısıyla sonlandırın. 🚧

__syncthreads(); // before the next phase loads

İki Senkronizasyon Neden Önemli

Bariyerlerden biri yükleme sonrası okumaları, diğeri okuma sonrası yüklemeleri korur. Birlikte, her aşamada tüm iş parçacıklarını aynı adımda tutarlar.

Nihai Toplamı Yazma

Tüm aşamalar tamamlandıktan sonra biriken toplam, eksiksiz skaler çarpımdır. Sınır denetimiyle koruyarak bunu C'ye bir kez yazın.

if (row < N && col < N)
  C[row*N + col] = sum;

Düzensiz Boyutları Ele Alma

N, TILE'ın tam katı olmadığında, aralık dışındaki öğeler için sıfır yükleyin; böylece fazladan çarpımlar toplama hiçbir şey eklemez.

Kısa Kontrol

Aşamalar döngüsü sırasında biriken toplamın nerede tutulduğunu düşünün.

Özet

Aşamalar üzerinde döngü kurdunuz, tile değerlerini kaydırdınız, iki kez senkronize oldunuz ve kısmi toplamları tek bir toplamda biriktirdiniz. Şimdi ne kadar hızlandığını ölçelim. 📈

Başlamak ücretsiz

Yapay zeka eğitmeniyle C++ öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Döşeme Aşamaları Üzerinde Döngü” dersi ücretsiz mi?

Evet — “Döşeme Aşamaları Üzerinde Döngü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve CUDA Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. CUDA Academy kursu toplamda 4 dersten oluşur.

“Döşeme Aşamaları Üzerinde Döngü” dersinde ne öğreneceğim?

Döşemeler boyunca kısmi toplamları biriktirin. CUDA Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

CUDA Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te CUDA Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Döşeme Aşamaları Üzerinde Döngü” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu CUDA Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her CUDA Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Saf Matris Çarpımı Çekirdeği
  2. İç Çarpımı Döşeyin
  3. Döşeme Aşamaları Üzerinde Döngü
  4. Hızlanmayı Ölçün
← CUDA Academy Sayfasına Dön