| // Fichier : f1_kernel_core.cpp | |
| 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); | |
| } | |
| } | |
| } | |
| } | |
| } | |