Akhirnya, setelah berhari-hari membaca dokumen atau men-debug indeks utas, saya dapat mengimplementasikan perhatian flash dari awal di DSC di MI300X! Versi pertama (oranye) adalah versi skalar dasar dari kertas flash-attention asli. Versi kedua (hijau) adalah algoritma yang sama tetapi menggunakan inti matriks (inti tensor AMD) dan seperti yang Anda lihat ini *secara signifikan* lebih cepat daripada yang skalar. Saya menggunakan inti matriks untuk menghitung Sij = Qi @ Kj^T dan Pij @ Vj. Beberapa 'gotcha' inti matriks AMD: - Mereka bekerja berdasarkan per gelombang dan front gelombang adalah 64 utas pada AMD, ini berarti Anda harus melacak ID gelombang saat ini dan juga ID utas dalam gelombang itu. - Tata letak keluaran akan dikocok dalam register karena fakta bahwa operasi inti inti matriks adalah produk luar 4x1 sehingga diperlukan langkah penyusunan ulang. - (Sejauh yang saya tahu) intrinsik hipcc untuk inti matriks tidak didokumentasikan di mana pun. Ada repo dengan banyak contoh dari AMD tetapi selain itu Anda harus grep basis kode LLVM. Saya akan memoles kode saya sekarang dan kemudian mungkin akan menulis posting yang lebih mendalam tentang perhatian kilat di AMD. Oh dan btw, teriakan kepada @HotAisle karena memungkinkan ini!