Ho una funzione dispositivo/host che utilizza la memoria costante. Funziona correttamente sul dispositivo, ma su host sembra che questa memoria non sia inizializzata.CUDA host e dispositivo che utilizza la stessa memoria __constant__
#include <iostream>
#include <stdio.h>
const __constant__ double vals[2] = { 0.0, 1000.0 };
__device__ __host__ double f(size_t i)
{
return vals[i];
}
__global__ void kern()
{
printf("vals[%d] = %lf\n", threadIdx.x, vals[threadIdx.x]);
}
int main() {
std::cerr << f(0) << " " << f(1) << std::endl;
kern<<<1, 2>>>();
cudaThreadSynchronize();
}
Questo stampa (richiede CC 2.0 o superiore)
0 0
vals[0] = 0.000000
vals[1] = 1000.000000
Qual è il problema e come posso ottenere entrambe le costanti di memoria del dispositivo e di accoglienza inizializzato allo stesso tempo?
Ho trovato la soluzione da solo e corrisponde perfettamente alla tua. Grazie! – davinchi
Sì, questo è più robusto, sono d'accordo. Ma è anche più da digitare;) – CygnusX1