Skip to content

miguelzambrana/cudagolabs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cuda Sample

Go Sample program (to check Cuda bindings)

package main
import(
	"github.com/barnex/cuda5/cu"
	_ "github.com/mumax/3/cuda"
	"fmt"
	"C"
	"strconv"
)

func main(){
	cu.Init(0);
	fmt.Println("Hello, I am you GPU:", cu.Device(0).Name())
	fmt.Println("Number of devices: " + strconv.Itoa(cu.DeviceGetCount()))
	fmt.Println("Free memory: " + strconv.FormatInt(cu.DeviceGet(0).TotalMem(),10))
}

Response message:

/usr/local/go/bin/go run (...)/src/github.com/miguelzambrana/cudagolabs/cudaHello.go
Hello, I am you GPU: GeForce GTX 960
Number of devices: 1
Free memory: 4227072000

Go Bindings from Mumax Cu

Go Dependencies

  • go get github.com/barnex/cuda5/cu
  • go get githun.com/mumax/3

Server preinstall

Install C++ And Nvidia dependencies

$ sudo apt-get update
$ sudo apt-get install \
    freeglut3-dev \
    g++-4.9 \
    gcc-4.9 \
    libglu1-mesa-dev \
    libx11-dev \
    libxi-dev \
    libxmu-dev \
    nvidia-modprobe \
    bison \
    flex

Install Nvidia latest drivers

$ sudo apt-get purge nvidia-*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-367

Force GCC 4.9 (Optional)

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 10
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20

$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 10
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20

Install last CUDA Platform for Ubuntu

$ curl -O https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda

Prepare CUDA environment

$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc

Check the CUDA version

$ nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Sun_Sep__4_22:14:01_CDT_2016
Cuda compilation tools, release 8.0, V8.0.44

(Optional) ModernGPU Repository [in order to check CUDA lib]

$ git clone https://github.com/moderngpu/moderngpu.git
$ cd moderngpu
$ make

Some Cuda program sample

$ vi hello.cu
#include <moderngpu/transform.hxx>

using namespace mgpu;

int main(int argc, char** argv) {
  // The context encapsulates things like an allocator and a stream.
  // By default it prints device info to the console.
  standard_context_t context;

  // Launch five threads to greet us.
  transform([]MGPU_DEVICE(int index) {
    printf("Hello GPU from thread %d\n", index);
  }, 5, context);

  // Synchronize on the context's stream to send the output to the console.
  context.synchronize();

  return 0;
}
$ nvcc \
      -std=c++11 \
      --expt-extended-lambda \
      -gencode arch=compute_61,code=compute_61 \
      -I ./src/ \
      -o hello \
      hello.cu
$ ./hello

GeForce GTX 1080 : 1835.000 Mhz   (Ordinal 0)
20 SMs enabled. Compute Capability sm_61
FreeMem:   6678MB   TotalMem:   8110MB   64-bit pointers.
Mem Clock: 5005.000 Mhz x 256 bits   (320.3 GB/s)
ECC Disabled


Hello GPU from thread 0
Hello GPU from thread 1
Hello GPU from thread 2
Hello GPU from thread 3
Hello GPU from thread 4

About

Golang and Cuda experiments

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages