Nano f-1 GPU
File size: 1,305 Bytes
347d77e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 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);
                }
            }
        }
    }
}