# How to run CUDA and OpenMP code on Google Colaboratory

As a Computer Science student, I was excited to learn about the possibilities of using Google Colab's free cloud platform to run my CUDA and OpenMP code. However, when I tried to use Colab to run my CUDA and OpenMP-accelerated code, I encountered a number of challenges and obstacles. After spending countless hours searching through online forums and documentation, I was determined to find a solution. Through persistence and experimentation, I was able to successfully run my CUDA and OpenMP code on Colab and take advantage of its powerful computational capabilities. In this article, I will share the steps I took to implement this solution 👇

## 1\. Setup Google Colab

### 1.1. Create a new notebook on Google Colab

To create a new notebook on Google Colab, follow these steps:

1.  Go to [colab.research.google.com](http://colab.research.google.com) in your web browser.
    
2.  Sign in to your Google account if you are not already signed in.
    
3.  In the top-left corner of the page, click on File and then select the "New Notebook" button.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670132687398/Z-PsJWr0x.png align="left")
    
4.  This will open a new notebook in a new tab in your web browser.
    
5.  In the top-left corner of the notebook, you will see the name "Untitled0" - you can click on this to give your notebook a new, more descriptive name.
    
6.  You are now ready to start using your new notebook on Google Colab.
    

### 1.2. Change the Runtime

To change the runtime in Google Colab, follow these steps:

1.  Open the notebook that you want to change the runtime for in Google Colab.
    
2.  In the top-left corner of the notebook, click on the "Runtime" dropdown menu.
    
3.  From the dropdown menu, select the "Change runtime type" option.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670132805764/_A_38hCPN.png align="left")
    
4.  This will open the "Runtime type" pop-up window.
    
5.  In the "Hardware accelerator" dropdown menu, select GPU.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670132848102/Y-vQdDezs.png align="left")
    
6.  Click on the "Save" button to save your changes and apply the new runtime.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670132888952/24F_44KfV.png align="left")
    
7.  The runtime for your notebook will now be changed to the selected option.
    

## 2\. Setup Cuda

### 2.1 Clean the instance

In a code cell, run the following command to remove all CUDA-related packages and files from the Google Colab instance:

```apache
!apt-get --purge remove cuda nvidia* libnvidia-*
!dpkg -l | grep cuda- | awk '{print $2}' | xargs -n1 dpkg --purge
!apt-get remove cuda-*
!apt autoremove
!apt-get update
```

### 2.2 Install Cuda

To install CUDA on Google Colab, in a code cell, run the following command:

```apache
!wget  --no-clobber https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
!dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
!sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
!apt-get update
!apt-get install cuda-10-0
```

### 2.3 Check Installation

After the installation is complete, run the following command to verify that CUDA has been installed correctly:

```apache
!nvcc --version
```

This should print the version of CUDA that has been installed on your Google Colab instance.

**Output:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670134096769/j62xr_M5k.png align="left")

## 3\. Install the NVCC plugin

### 3.1 What is the NVCC plugin?

*   The NVCC plugin is an extension that allows you to compile and run CUDA C/C++ code directly in your Google Colab notebook.
    
*   The NVCC plugin uses the NVCC (NVIDIA CUDA Compiler) command-line tool to compile and run CUDA code, providing a convenient and easy-to-use interface for writing, testing, and debugging CUDA code within the notebook environment.
    
*   Once the NVCC plugin is installed and loaded, you can use it to write and run CUDA C/C++ code in the code cells of your notebook.
    
*   The plugin will automatically compile your code using NVCC and run it on the available CUDA-capable GPU, allowing you to take advantage of the GPU's parallel processing capabilities to speed up your code.
    

### 3.2 Install the nvcc plugin

To load the NVCC plugin on Google Colab, in a code cell, run the following command to install the NVCC plugin:

```apache
!pip install git+https://github.com/andreinechaev/nvcc4jupyter.git
```

### 3.3 Load the plugin

After the installation is complete, to load the extension run the following command:

```apache
%load_ext nvcc_plugin
```

## 4\. Run the CUDA program

To start a CUDA code block in Google Colab, you can use the `%%cu` cell magic. To use this cell magic, follow these steps:

1.  In a code cell, type `%%cu` at the beginning of the first line to indicate that the code in the cell is CUDA C/C++ code.
    
2.  After the `%%cu` cell magic, you can write your CUDA C/C++ code as usual.
    
3.  When the code is executed, the `%%cu` cell magic will automatically compile the code using NVCC and run it on the available CUDA-capable GPU. The results of the code execution will be displayed in the output of the code cell.
    

**Example:**

```apache
%%cu
#include <stdio.h>
#include <stdlib.h>
int main() {
    printf("Hello world");
    return 0;
}
```

**Output:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670134516912/CDhE11mAv.png align="left")

## 5\. Run the OpenMP program

### 5.1. Write code using the %%cuda cell magic

To start an OpenMP code block in Google Colab, you can use the `%%cuda` cell magic followed by the `--name` option and the name of the CUDA file that will contain your OpenMP code. To use this cell magic, follow these steps:

1.  Open the notebook that you want to use the `%%cuda` cell magic in Google Colab.
    
2.  In a code cell, type `%%cuda --name omp_cuda.cu` at the beginning of the first line to indicate that the code in the cell is CUDA C/C++ code that will be saved in a file named "omp\_cuda.cu".
    
3.  After the `%%cuda` cell magic, you can write your OpenMP code as usual.
    

```apache
%%cuda --name omp_cuda.cu
```

**Example:**

```apache
%%cuda --name omp_cuda.cu
#include <stdio.h>
#include <omp.h>
int main() {
    printf("Hello world");
    return 0;
}
```

**Output:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670134621898/0AnH6b9Jo.png align="left")

### 5.2. Run the OpenMP code

To run an OpenMP code on Google Colab, in a code cell, run the following command to compile the OpenMP code using NVCC and generate an executable file:

```apache
!nvcc -Xcompiler="-fopenmp" -arch=sm_75 -o /content/src/omp_cuda /content/src/omp_cuda.cu
!/content/src/omp_cuda
```

*   The command in the first line will compile OpenMP code in the file "omp\_cuda.cu" using NVCC and generate an executable file named "omp\_cuda" in the content/src directory.
    
*   The `f-openmp` option indicates the code uses the OpenMP library.
    
*   The `-arch=sm_75` option specifies the compute capability of the GPU the code will run on.
    
*   The command in the second line will run the "omp\_cuda" executable file, which will in turn execute the OpenMP code on the available CUDA-capable GPU. The output of the code execution will be displayed in the output of the code cell.
    

**Output:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670134644858/ZjqWIxf5l.png align="left")

## That's all folks 👋

I hope this article helps you to run your CUDA and OpenMP program on Google Collab! Let's connect:

*   [**Twitter**](https://twitter.com/SiddhiGate)
    
*   [**GitHub**](https://github.com/siddhigate)
    
*   [**LinkedIn**](https://www.linkedin.com/in/siddhigate/)
