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