Unter Verwendung von Float16 (halb-Präzisions-Float-Typ) [geschlossen]
Posted: 04 Mar 2025, 03:58
i codierte das Implementierung des Seils Float16 (halbprediger Float-Typ) (fusionierte Rotationspositionseinbettung), um die Genauigkeit von CPU und GPU (NVIDIA Geforce 3080) zu vergleichen. Und die Ergebnisgenauigkeit erfüllt nicht die 1E-5 absolute Fehler und 1E-3 relative Fehler. Ich habe nicht gewusst, warum dies geschah.
Code: Select all
Mismatch element size: 38176/262144(14.562988281%)
Max absolute error: 0.000976562 at [0,0,1,37] cpu = -1.119140625 gpu = -1.118164062
Max relative error: 1.000000000 at [9,0,4,58] cpu = 0.000000000 gpu = -0.000068426
< /code>
Wir können feststellen, dass der absolute Fehler> 1E-5 und der relative Fehler> 1E-3.#include
#include
#include
#include
#include
#include
#include
#define CUDA_CHECK(err) (check_cuda(err, __FILE__, __LINE__))
#ifndef float16
#define float16 half
#endif
void check_cuda(cudaError_t error, const char* file, int line) {
if (error != cudaSuccess) {
std::cout 1e-3) {
++count_relative_err;
if (rel_err > max_rel) {
max_rel = rel_err;
max_rel_s = s;
max_rel_b = b;
max_rel_h = h;
max_rel_d = d;
}
}
}
}
}
}
// std::cout output format
std::cout