2011-09-04 1 views
5

Durante la compilazione di questo campione ciao mondo in Ubuntu 10.10Problemi compilazione helloworld.cu

Questo è da CUDA by Example, capitolo 3 (Non ci sono istruzioni di compilazione fornite>: @)

#include <iostream> 

__global__ void kernel (void){ 


} 

int main(void){ 

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

} 

ho ottenuto questo:

$ 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".

Perché? Come dovrebbe essere compilato questo codice?

+0

@awoodland: Hmmmm, la seconda risposta dice che fa, e in effetti la sezione B14 ha "printf (“Ciao filo% d, f = f% \ n ", threadIdx.x, f);" – Kheldar

+0

come deve essere compilato questo? – andandandand

+0

le cose di codice da quel libro sono semplici frammenti se ricordo male, e non sempre esempi completi. Per non parlare del fatto che usano un alto di cattiva pratica in questi esempi .... –

risposta

10

è necessario includere stdio.h non iostream (che è per std::cout roba) per printf (vedi man 3 printf). Ho trovato il codice sorgente per il libro here.

chapter03/hello_world.cu è in realtà:

 

/* 
* 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; 
} 
 

Dove ../common/book.h include stdio.h.

I README.txt dettagli del file come compilare gli esempi:

 

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

Ho postato il secondo campione dal capitolo testuale, Sezione 3.2.2, e include andandandand

+0

@omgzor: Questo è un errore. Controlla la [errata] (http://developer.nvidia.com/cuda-example-errata-page-0) per il libro (dalla pagina a cui mi sono collegato nella mia risposta). '' p.23,25 - I #inclusi per questo esempio sono erroneamente mostrati come: #include e #include "book.h." Questo è stato corretto nel pacchetto di codice scaricabile, ma dovrebbe contenere: #include e #include "../common/book.h" ''. (Inoltre probabilmente stai guardando il codice per 'chapter03/simple_kernel.cu' piuttosto che' chapter03/hello_world.cu') – user786653

+0

Grazie, non ho controllato il codice per il libro, come il pdf che ho non menzionarlo come disponibile. – andandandand