Mi disposición para CUDAerror: identificador "blockIdx" no está definido
Visual Studio 2010 y 2008 SP1 (requerido por CUDA). Parallel Nsight 1,51 CUDA 4.0 RC o 3.2 y de empuje
Básicamente, i siguieron la guía en: http://www.ademiller.com/blogs/tech/2011/03/using-cuda-and-thrust-with-visual-studio-2010/
entonces procedió a compilar correctamente sin mensajes de error.
Así que probé con más ejemplos de código CUDA de la web. Estos errores surgieron en Visual Studios. Todavía puedo compilar correctamente sin mensajes de error, pero estos errores solamente se destacan visualmente
- "Error: identificador 'blockIdx' se undfined."
- "Error: identifer" blockDim "no está definido."
- "Error: identifer" threadIdx "no está definido."
Aquí está la captura de pantalla.
¿Debo preocuparme? ¿Es un error de Visual Studios o es incorrecta la configuración de mi configuración? Cualquier ayuda es apreciada. ¡Gracias chicos!
P.S Soy muy nuevo en Visual Studios y CUDA.
// incrementArray.cu
#include "Hello.h"
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
void incrementArrayOnHost(float *a, int N)
{
int i;
for (i=0; i < N; i++) a[i] = a[i]+1.f;
}
__global__ void incrementArrayOnDevice(float *a, int N)
{
int idx = blockIdx.x*blockDim.x + threadIdx.x;
if (idx<N) a[idx] = a[idx]+1.f;
}
int main(void)
{
float *a_h, *b_h; // pointers to host memory
float *a_d; // pointer to device memory
int i, N = 10;
size_t size = N*sizeof(float);
// allocate arrays on host
a_h = (float *)malloc(size);
b_h = (float *)malloc(size);
// allocate array on device
cudaMalloc((void **) &a_d, size);
// initialization of host data
for (i=0; i<N; i++) a_h[i] = (float)i;
// copy data from host to device
cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
// do calculation on host
incrementArrayOnHost(a_h, N);
// do calculation on device:
// Part 1 of 2. Compute execution configuration
int blockSize = 4;
int nBlocks = N/blockSize + (N%blockSize == 0?0:1);
// Part 2 of 2. Call incrementArrayOnDevice kernel
incrementArrayOnDevice <<< nBlocks, blockSize >>> (a_d, N);
// Retrieve result from device and store in b_h
cudaMemcpy(b_h, a_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
// check results
for (i=0; i<N; i++) assert(a_h[i] == b_h[i]);
// cleanup
free(a_h); free(b_h); cudaFree(a_d);
return 0;
}
Es necesario para sangrar cada línea de codifique por 4 espacios, y escríbalo en un párrafo separado. Además, usa un título descriptivo. Actualmente, transmite * no * información significativa. – ArjunShankar
@el título de Arjun cambiado, espero que ayude. Código agregado también. :) – f0rfun
Esto es casi siempre un síntoma de intentar compilar el código del dispositivo con un compilador C++ estándar. Asegúrese de que el código tenga una extensión .cu y sus reglas compiladas estén configuradas correctamente. – talonmies