Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble compiling helloworld.cu

Tags:

cuda

While compiling this hello world sample in Ubuntu 10.10

This is from CUDA by Example, chapter 3 (No compile instructions provided >:@)

#include <iostream>

__global__ void kernel (void){


}

int main(void){

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

}

I got this:

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

Why? How should this code be compiled?

like image 331
andandandand Avatar asked Sep 04 '11 18:09

andandandand


2 Answers

The issue is that the compiler does not know where to find printf function. It needs to know where to find it. The include directive is used to tell the compiler where to find it.

#include "stdio.h"

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

After the fix, it would work:

$ nvcc hello_world.cu
$ ls
a.out  hello_world.cu
$ a.out
Hello World!
like image 191
greenpau Avatar answered Oct 06 '22 00:10

greenpau


You need to include stdio.h or cstdionot iostream (which is for std::cout stuff) for printf (see man 3 printf). I found the source code for the book here.

chapter03/hello_world.cu is actually:


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

Where ../common/book.h includes stdio.h.

The README.txt file details how to compile the examples:


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
like image 35
user786653 Avatar answered Oct 06 '22 01:10

user786653