2011-09-04 5 views
5

Durante la compilación de esta muestra hola mundo en Ubuntu 10.10problema compilar helloworld.cu

Esto es de CUDA by Example, capítulo 3 (No hay instrucciones de compilación siempre>: @)

#include <iostream> 

__global__ void kernel (void){ 


} 

int main(void){ 

    kernel <<<1,1>>>(); 
     printf("Hellow World!\n"); 
    return 0; 

} 

Tengo esto:

$ nvcc -lcudart hello.cu hello.cu(11): error: identifier "printf" is undefined

1 error detected in the compilation of "/tmp/tmpxft_00007812_00000000-4_hello.cpp1.ii".

¿Por qué? ¿Cómo debe compilarse este código?

+0

@awoodland: Hmmmm, la segunda respuesta dice que lo hace, y de hecho la sección B14 tiene "printf (“Hola hilo% d, f = f% \ n ", threadIdx.x, f);" – Kheldar

+0

¿cómo se supone que se compilará entonces? – andandandand

+0

las cosas del código de ese libro son simples fragmentos si recuerdo correctamente, y no siempre ejemplos completos. Sin mencionar que usan alto de mala práctica en esos ejemplos ... –

Respuesta

10

Es necesario incluir stdio.h no iostream (que es para std::cout cosas) para printf (ver man 3 printf). Encontré el código fuente para el libro here.

chapter03/hello_world.cu es en realidad:

 

/* 
* Copyright 1993-2010 NVIDIA Corporation. All rights reserved. 
* 
* NVIDIA Corporation and its licensors retain all intellectual property and 
* proprietary rights in and to this software and related documentation. 
* Any use, reproduction, disclosure, or distribution of this software 
* and related documentation without an express license agreement from 
* NVIDIA Corporation is strictly prohibited. 
* 
* Please refer to the applicable NVIDIA end user license agreement (EULA) 
* associated with this source code for terms and conditions that govern 
* your use of this NVIDIA software. 
* 
*/ 


#include "../common/book.h" 

int main(void) { 
    printf("Hello, World!\n"); 
    return 0; 
} 
 

Dónde ../common/book.h incluye stdio.h.

Los detalles de los archivos README.txt cómo compilar los ejemplos:

 

The vast majority of these code examples can be compiled quite easily by using 
NVIDIA's CUDA compiler driver, nvcc. To compile a typical example, say 
"example.cu," you will simply need to execute: 

> nvcc example.cu 
+1

He publicado la segunda muestra del capítulo al pie de la letra, Sección 3.2.2, e incluye andandandand

+0

@omgzor: Eso es un error. Compruebe la [errata] (http://developer.nvidia.com/cuda-example-errata-page-0) para el libro (de la página a la que he vinculado en mi respuesta). '' p.23,25 - Los #includes para este ejemplo se muestran incorrectamente como: #include y #include "book.h." Esto se corrigió en el paquete de código descargable, pero debería decir: #include y #include "../common/book.h" ''. (También es probable que esté buscando el código para 'chapter03/simple_kernel.cu' en lugar de' chapter03/hello_world.cu') – user786653

+0

Gracias, no revisé el código del libro, ya que el pdf que tengo no lo hace mencionarlo como disponible. – andandandand