Nano f-1 GPU
Nano-GPU-F-1 / src /f1_kernel_core.cpp
Clemylia's picture
Create src/f1_kernel_core.cpp
347d77e verified
// Fichier : f1_kernel_core.cpp
#include <immintrin.h> // Accès aux instructions vectorielles (le "moteur" du F-1)
extern "C" {
// Le Kernel F-1 : Multiplication de matrices ultra-optimisée
void launch_f1_kernel(float* A, float* B, float* C, int size) {
// On traite les données par blocs de 8 nombres à la fois (Vectorisation)
for (int i = 0; i < size; ++i) {
for (int k = 0; k < size; ++k) {
// Chargement d'une valeur de A en mode "Broadcast"
__m256 a_vec = _mm256_set1_ps(A[i * size + k]);
for (int j = 0; j < size; j += 8) {
// Chargement de 8 valeurs de B
__m256 b_vec = _mm256_loadu_ps(&B[k * size + j]);
// Chargement des résultats actuels dans C
__m256 c_vec = _mm256_loadu_ps(&C[i * size + j]);
// L'opération FMA (Fused Multiply-Add) : C = A * B + C
// C'est le cœur de la puissance du GPU-NANO F-1
c_vec = _mm256_fmadd_ps(a_vec, b_vec, c_vec);
// Stockage du résultat
_mm256_storeu_ps(&C[i * size + j], c_vec);
}
}
}
}
}