# CUDA PI Calcuation (Monte Carlo)

## Team Pi CUDA

Welcome to GPU610AA Fall 2013 Team Pi CUDA Page.

My name is Peter Huang and I'm a student in the GPU610 class for the Fall Semester of 2013. Having no background whatsoever in parallel programming, I've decided to choose something that is out of my scope of understanding and interest (video game programming) to challenge myself. Thus, I've decided to investigate the benefits of parallel programming applied to the Monte Carlo statistical method to approximating the value of pi.

N/A

1. Peter Huang

## Progress

### Assignment 1

#### Introduction

For the initial profiling, I've decided to investigate the Monte Carlo Statistics Methodology of approximating the value of Pi. A brief explanation of Monte Carlo Pi calculation can be found here: https://www.youtube.com/watch?v=VJTFfIqO4TU

#### Code Snippet

```   Serial Pi Calculation Algorithm

// loops through user amount of rounds of sets of points
for(i = 0; i < points; i++)
{
x = randNum();
y = randNum();

// check if point resides within the circle
if (((x*x) + (y*y)) <= 1.0)
{
score++;
}
}
// calculate pi
pi = 4.0 * (float)score/(float)points;
```

### Assignment 2

#### Introduction

In Phase 2, I've parallelized the serial program to run on a custom kernel on a CUDA-enabled device.

#### Code Snippet

```    Working Kernel Parallel CUDA Pi Calculation
__global__ void findPi(float *estimatedPi, curandState *states, unsigned int taskElements, float seed)
{
int score = 0;
float xCoord;
float yCoord;

// 'random' generated value using curand, initialize curand using task_id, and seed parameter

// tally number of task elements
for(int i = 0; i < taskElements; i++)
{

// assigned each point coordinate values

// determine if coordinate is within the circle
if((xCoord*xCoord + yCoord*yCoord) <= 1.0f)
{
score++;
}
}

// estimated value of pi for this particular task
}
}
```

N/A

N/A

N/A

N/A