Skip to content

Commit 2119e71

Browse files
committed
Add project files.
1 parent b314782 commit 2119e71

File tree

3 files changed

+308
-0
lines changed

3 files changed

+308
-0
lines changed

CUDATest.sln

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.9.34728.123
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CUDATest", "CUDATest\CUDATest.vcxproj", "{462936D3-6C27-477D-82A0-56B3D2528822}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Win32 = Debug|Win32
11+
Debug|x64 = Debug|x64
12+
Debug|x86 = Debug|x86
13+
Release|Win32 = Release|Win32
14+
Release|x64 = Release|x64
15+
Release|x86 = Release|x86
16+
EndGlobalSection
17+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
18+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|Win32.ActiveCfg = Debug|Win32
19+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|Win32.Build.0 = Debug|Win32
20+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|x64.ActiveCfg = Debug|x64
21+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|x64.Build.0 = Debug|x64
22+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|x86.ActiveCfg = Debug|Win32
23+
{462936D3-6C27-477D-82A0-56B3D2528822}.Debug|x86.Build.0 = Debug|Win32
24+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|Win32.ActiveCfg = Release|Win32
25+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|Win32.Build.0 = Release|Win32
26+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|x64.ActiveCfg = Release|x64
27+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|x64.Build.0 = Release|x64
28+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|x86.ActiveCfg = Release|Win32
29+
{462936D3-6C27-477D-82A0-56B3D2528822}.Release|x86.Build.0 = Release|Win32
30+
EndGlobalSection
31+
GlobalSection(SolutionProperties) = preSolution
32+
HideSolutionNode = FALSE
33+
EndGlobalSection
34+
GlobalSection(ExtensibilityGlobals) = postSolution
35+
SolutionGuid = {DB3E5BC2-D3E0-45F0-A64A-C82D78A014E9}
36+
EndGlobalSection
37+
EndGlobal

CUDATest/CUDATest.vcxproj

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Debug|x64">
9+
<Configuration>Debug</Configuration>
10+
<Platform>x64</Platform>
11+
</ProjectConfiguration>
12+
<ProjectConfiguration Include="Release|Win32">
13+
<Configuration>Release</Configuration>
14+
<Platform>Win32</Platform>
15+
</ProjectConfiguration>
16+
<ProjectConfiguration Include="Release|x64">
17+
<Configuration>Release</Configuration>
18+
<Platform>x64</Platform>
19+
</ProjectConfiguration>
20+
</ItemGroup>
21+
<PropertyGroup Label="Globals">
22+
<ProjectGuid>{462936D3-6C27-477D-82A0-56B3D2528822}</ProjectGuid>
23+
<RootNamespace>CUDATest</RootNamespace>
24+
</PropertyGroup>
25+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
26+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
27+
<ConfigurationType>Application</ConfigurationType>
28+
<UseDebugLibraries>true</UseDebugLibraries>
29+
<CharacterSet>MultiByte</CharacterSet>
30+
<PlatformToolset>v143</PlatformToolset>
31+
</PropertyGroup>
32+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
33+
<ConfigurationType>Application</ConfigurationType>
34+
<UseDebugLibraries>true</UseDebugLibraries>
35+
<CharacterSet>MultiByte</CharacterSet>
36+
<PlatformToolset>v143</PlatformToolset>
37+
</PropertyGroup>
38+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
39+
<ConfigurationType>Application</ConfigurationType>
40+
<UseDebugLibraries>false</UseDebugLibraries>
41+
<WholeProgramOptimization>true</WholeProgramOptimization>
42+
<CharacterSet>MultiByte</CharacterSet>
43+
<PlatformToolset>v143</PlatformToolset>
44+
</PropertyGroup>
45+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
46+
<ConfigurationType>Application</ConfigurationType>
47+
<UseDebugLibraries>false</UseDebugLibraries>
48+
<WholeProgramOptimization>true</WholeProgramOptimization>
49+
<CharacterSet>MultiByte</CharacterSet>
50+
<PlatformToolset>v143</PlatformToolset>
51+
</PropertyGroup>
52+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
53+
<ImportGroup Label="ExtensionSettings">
54+
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 12.4.props" />
55+
</ImportGroup>
56+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
57+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
58+
</ImportGroup>
59+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
60+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
61+
</ImportGroup>
62+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
63+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
64+
</ImportGroup>
65+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
66+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
67+
</ImportGroup>
68+
<PropertyGroup Label="UserMacros" />
69+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
70+
<LinkIncremental>true</LinkIncremental>
71+
</PropertyGroup>
72+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
73+
<LinkIncremental>true</LinkIncremental>
74+
</PropertyGroup>
75+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
76+
<ClCompile>
77+
<WarningLevel>Level3</WarningLevel>
78+
<Optimization>Disabled</Optimization>
79+
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
80+
</ClCompile>
81+
<Link>
82+
<GenerateDebugInformation>true</GenerateDebugInformation>
83+
<SubSystem>Console</SubSystem>
84+
<AdditionalDependencies>cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
85+
</Link>
86+
<CudaCompile>
87+
<TargetMachinePlatform>64</TargetMachinePlatform>
88+
</CudaCompile>
89+
</ItemDefinitionGroup>
90+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
91+
<ClCompile>
92+
<WarningLevel>Level3</WarningLevel>
93+
<Optimization>Disabled</Optimization>
94+
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
95+
</ClCompile>
96+
<Link>
97+
<GenerateDebugInformation>true</GenerateDebugInformation>
98+
<SubSystem>Console</SubSystem>
99+
<AdditionalDependencies>cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
100+
</Link>
101+
<CudaCompile>
102+
<TargetMachinePlatform>64</TargetMachinePlatform>
103+
</CudaCompile>
104+
</ItemDefinitionGroup>
105+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
106+
<ClCompile>
107+
<WarningLevel>Level3</WarningLevel>
108+
<Optimization>MaxSpeed</Optimization>
109+
<FunctionLevelLinking>true</FunctionLevelLinking>
110+
<IntrinsicFunctions>true</IntrinsicFunctions>
111+
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
112+
</ClCompile>
113+
<Link>
114+
<GenerateDebugInformation>true</GenerateDebugInformation>
115+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
116+
<OptimizeReferences>true</OptimizeReferences>
117+
<SubSystem>Console</SubSystem>
118+
<AdditionalDependencies>cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
119+
</Link>
120+
<CudaCompile>
121+
<TargetMachinePlatform>64</TargetMachinePlatform>
122+
</CudaCompile>
123+
</ItemDefinitionGroup>
124+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
125+
<ClCompile>
126+
<WarningLevel>Level3</WarningLevel>
127+
<Optimization>MaxSpeed</Optimization>
128+
<FunctionLevelLinking>true</FunctionLevelLinking>
129+
<IntrinsicFunctions>true</IntrinsicFunctions>
130+
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
131+
</ClCompile>
132+
<Link>
133+
<GenerateDebugInformation>true</GenerateDebugInformation>
134+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
135+
<OptimizeReferences>true</OptimizeReferences>
136+
<SubSystem>Console</SubSystem>
137+
<AdditionalDependencies>cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
138+
</Link>
139+
<CudaCompile>
140+
<TargetMachinePlatform>64</TargetMachinePlatform>
141+
</CudaCompile>
142+
</ItemDefinitionGroup>
143+
<ItemGroup>
144+
<CudaCompile Include="kernel.cu" />
145+
</ItemGroup>
146+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
147+
<ImportGroup Label="ExtensionTargets">
148+
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 12.4.targets" />
149+
</ImportGroup>
150+
</Project>

CUDATest/kernel.cu

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#include <cuda_runtime.h>
2+
#include <device_launch_parameters.h>
3+
#include <stdio.h>
4+
#include <iostream>
5+
#include <cstdlib>
6+
#include <ctime>
7+
#include <chrono>
8+
9+
using namespace std;
10+
11+
// GPU kernel for matrix multiplication
12+
__global__ void matrixMultiplicationGPU(int* a, int* b, int* c, int N) {
13+
int row = blockIdx.y * blockDim.y + threadIdx.y;
14+
int col = blockIdx.x * blockDim.x + threadIdx.x;
15+
int sum = 0;
16+
17+
if (row < N && col < N) {
18+
for (int i = 0; i < N; i++) {
19+
sum += a[row * N + i] * b[i * N + col];
20+
}
21+
c[row * N + col] = sum;
22+
}
23+
}
24+
25+
// CPU function for matrix multiplication
26+
void matrixMultiplicationCPU(int* a, int* b, int* c, int N) {
27+
for (int i = 0; i < N; i++) {
28+
for (int j = 0; j < N; j++) {
29+
int sum = 0;
30+
for (int k = 0; k < N; k++) {
31+
sum += a[i * N + k] * b[k * N + j];
32+
}
33+
c[i * N + j] = sum;
34+
}
35+
}
36+
}
37+
38+
int main() {
39+
srand(time(nullptr));
40+
const int N = 1000; // Matrix size
41+
const int numInstances = 10; // Number of instances to run
42+
float averageCPUTime = 0.00;
43+
float averageGPUTime = 0.00;
44+
45+
for (int instance = 0; instance < numInstances; instance++) {
46+
int *a, *b, *cGPU, *cCPU; // Host Matrices (CPU)
47+
int *da, *db, *dc; // Device Matrices (GPU)
48+
49+
// Memory Allocation for Host Devices
50+
a = new int[N * N];
51+
b = new int[N * N];
52+
cGPU = new int[N * N];
53+
cCPU = new int[N * N];
54+
55+
// Load Host Matrices with Random Values between 0-100
56+
for (int i = 0; i < N * N; i++) {
57+
a[i] = rand() % 101;
58+
b[i] = rand() % 101;
59+
}
60+
61+
// Allocate Memory for Device Matrices
62+
cudaMalloc((void**)&da, N * N * sizeof(int));
63+
cudaMalloc((void**)&db, N * N * sizeof(int));
64+
cudaMalloc((void**)&dc, N * N * sizeof(int));
65+
66+
// Copy Host Matrices to Device Matrices
67+
cudaMemcpy(da, a, N * N * sizeof(int), cudaMemcpyHostToDevice);
68+
cudaMemcpy(db, b, N * N * sizeof(int), cudaMemcpyHostToDevice);
69+
70+
// Define Grid/Block Dimensions for Threads
71+
dim3 threadsPerBlock(16, 16);
72+
dim3 numBlocks((N + threadsPerBlock.x - 1) / threadsPerBlock.x, (N + threadsPerBlock.y - 1) / threadsPerBlock.y);
73+
74+
// Record start time for GPU
75+
clock_t startGPU = clock();
76+
77+
// Launch GPU Kernel
78+
matrixMultiplicationGPU <<<numBlocks, threadsPerBlock>>> (da, db, dc, N);
79+
80+
// Synchronize GPU
81+
cudaDeviceSynchronize();
82+
83+
// Record end time for GPU
84+
clock_t endGPU = clock();
85+
float millisecondsGPU = 1000.0 * (endGPU - startGPU) / CLOCKS_PER_SEC;
86+
averageGPUTime += millisecondsGPU;
87+
88+
// Copy GPU Results back to CPU
89+
cudaMemcpy(cGPU, dc, N * N * sizeof(int), cudaMemcpyDeviceToHost);
90+
91+
// Record start time for CPU
92+
clock_t startCPU = clock();
93+
94+
// Run CPU matrix multiplication
95+
matrixMultiplicationCPU(a, b, cCPU, N);
96+
97+
// Record end time for CPU
98+
clock_t endCPU = clock();
99+
float millisecondsCPU = 1000.0 * (endCPU - startCPU) / CLOCKS_PER_SEC;
100+
averageCPUTime += millisecondsCPU;
101+
102+
// Print elapsed time for GPU and CPU
103+
cout << "Instance " << instance + 1 << " - GPU Time: " << millisecondsGPU << " milliseconds" << endl;
104+
cout << "Instance " << instance + 1 << " - CPU Time: " << millisecondsCPU << " milliseconds" << endl;
105+
106+
// Free Memory for this instance
107+
cudaFree(da);
108+
cudaFree(db);
109+
cudaFree(dc);
110+
111+
delete[] a;
112+
delete[] b;
113+
delete[] cGPU;
114+
delete[] cCPU;
115+
}
116+
cout << "Average CPU Runtime: " << averageCPUTime / numInstances << " milliseconds" << endl;
117+
cout << "Average GPU Runtime: " << averageGPUTime / numInstances << " milliseconds" << endl;
118+
cout << "Speedup Percentage: " << (averageCPUTime) / (averageGPUTime) << " times faster than CPU" << endl;
119+
120+
return 0;
121+
}

0 commit comments

Comments
 (0)