How do I turn this code into cuda code
// parallel processing test 1.cpp : main project file.
#include “stdafx.h”
#include “omp.h”
using namespace System;
TimeSpan SerialTest(TimeSpan SerialAvg)
{
DateTime dtStart = DateTime::Now;
//Console::WriteLine(“SerialTest Start”);
int iThreads = 1;
omp_set_num_threads(iThreads);
int y = 20;
int xMin = -1000000000;
int xMax = 1000000000;
int xy = 0;
for(int i = xMin; i < xMax; i++)
{
if((i*i) == y)
{
xy++;
}
}
DateTime dtEnd = DateTime::Now;
TimeSpan tsElapased = dtEnd - dtStart;
//Console::WriteLine("SerialTest End");
Console::WriteLine("Threads({0}): {1}", iThreads, tsElapased);
SerialAvg += tsElapased;
return SerialAvg;
}
TimeSpan ParallelTest1(TimeSpan ParallelAvg1)
{
int iThreads = 2;
omp_set_num_threads(iThreads);
DateTime dtStart = DateTime::Now;
//Console::WriteLine("ParallelTest Start");
int y = 20;
int xMin = -1000000000;
int xMax = 1000000000;
int xy = 0;
#pragma omp parallel for
for(int i = xMin; i < xMax; i++)
{
if((i*i) == y)
{
xy++;
}
}
DateTime dtEnd = DateTime::Now;
TimeSpan tsElapased = dtEnd - dtStart;
//Console::WriteLine("ParallelTest End");
Console::WriteLine("Threads({0}): {1}", iThreads, tsElapased);
ParallelAvg1 += tsElapased;
return ParallelAvg1;
}
TimeSpan ParallelTest2(TimeSpan ParallelAvg2)
{
int iThreads = 4;
omp_set_num_threads(iThreads);
DateTime dtStart = DateTime::Now;
//Console::WriteLine("ParallelTest2 Start");
int y = 20;
int xMin = -1000000000;
int xMax = 1000000000;
int xy = 0;
#pragma omp parallel for
for(int i = xMin; i < xMax; i++)
{
if((i*i) == y)
{
xy++;
}
}
DateTime dtEnd = DateTime::Now;
TimeSpan tsElapased = dtEnd - dtStart;
//Console::WriteLine("ParallelTest2 End");
Console::WriteLine("Threads({0}): {1}", iThreads, tsElapased);
ParallelAvg2 += tsElapased;
return ParallelAvg2;
}
TimeSpan ParallelTest3(TimeSpan ParallelAvg3)
{
int iThreads = 8;
omp_set_num_threads(iThreads);
DateTime dtStart = DateTime::Now;
//Console::WriteLine("ParallelTest3 Start");
int y = 20;
int xMin = -1000000000;
int xMax = 1000000000;
int xy = 0;
#pragma omp parallel for
for(int i = xMin; i < xMax; i++)
{
if((i*i) == y)
{
xy++;
}
}
DateTime dtEnd = DateTime::Now;
TimeSpan tsElapased = dtEnd - dtStart;
//Console::WriteLine("ParallelTest3 End");
Console::WriteLine("Threads({0}): {1}", iThreads, tsElapased);
ParallelAvg3 += tsElapased;
return ParallelAvg3;
}
TimeSpan ParallelTest4(TimeSpan ParallelAvg4)
{
int iThreads = 64;
omp_set_num_threads(iThreads);
DateTime dtStart = DateTime::Now;
//Console::WriteLine("ParallelTest3 Start");
int y = 20;
int xMin = -1000000000;
int xMax = 1000000000;
int xy = 0;
#pragma omp parallel for
for(int i = xMin; i < xMax; i++)
{
if((i*i) == y)
{
xy++;
}
}
DateTime dtEnd = DateTime::Now;
TimeSpan tsElapased = dtEnd - dtStart;
//Console::WriteLine("ParallelTest3 End");
Console::WriteLine("Threads({0}): {1}", iThreads, tsElapased);
ParallelAvg4 += tsElapased;
return ParallelAvg4;
}
int main()
{
Console::WriteLine(“Press enter to start”);
Console::ReadLine();
double iterations = 10;
DateTime dtStart = DateTime::Now;
TimeSpan SerialAvg;
TimeSpan ParallelAvg1;
TimeSpan ParallelAvg2;
TimeSpan ParallelAvg3;
TimeSpan ParallelAvg4;
for(int i = 0; i < iterations; i++)
{
Console::WriteLine("Iterations = " + (i+1));
SerialAvg = SerialTest(SerialAvg);
//Console::ReadLine();
ParallelAvg1 = ParallelTest1(ParallelAvg1);
//Console::ReadLine();
ParallelAvg2 = ParallelTest2(ParallelAvg2);
//Console::ReadLine();
ParallelAvg3 = ParallelTest3(ParallelAvg3);
//Console::ReadLine();
ParallelAvg4 = ParallelTest4(ParallelAvg4);
//Console::ReadLine();
}
DateTime dtEnd = DateTime::Now;
TimeSpan spElapsed = dtEnd - dtStart;
Console::WriteLine("Total time: " + spElapsed);
float SerialAvgd = SerialAvg.TotalMilliseconds::get() / iterations;
SerialAvgd = SerialAvgd / 1000;
Console::WriteLine("Serial average time: " + SerialAvgd);
float ParallelAvgd1 = ParallelAvg1.TotalMilliseconds::get() / iterations;
ParallelAvgd1 = ParallelAvgd1 / 1000;
Console::WriteLine("2 threads average time: " + ParallelAvgd1);
float ParallelAvgd2 = ParallelAvg2.TotalMilliseconds::get() / iterations;
ParallelAvgd2 = ParallelAvgd2 / 1000;
Console::WriteLine("4 threads average time: " + ParallelAvgd2);
float ParallelAvgd3 = ParallelAvg3.TotalMilliseconds::get() / iterations;
ParallelAvgd3 = ParallelAvgd3 / 1000;
Console::WriteLine("8 theads average time: " + ParallelAvgd3);
float ParallelAvgd4 = ParallelAvg4.TotalMilliseconds::get() / iterations;
ParallelAvgd4 = ParallelAvgd4 / 1000;
Console::WriteLine("64 threads average time: " + ParallelAvgd4);
Console::ReadLine();
return 0;
}