CEG 4136 Computer Architecture

用CUDA优化森林火灾模拟实验


CEG 4136 Computer Architecture III 
Fall 2024 
 
To be submitted September 28, 11:59 p.m. 
 
Lab1: Optimizing Forest Fire Simulation with CUDA 
  
1. Introduction 
In this lab, you will work on a forest fire simulation code that uses a 1000×1000 grid. The fire 
starts at 100 distinct locations in the forest. The provided code is implemented sequentially. It 
simulates the propagation of fire, the burning of trees, and their eventual extinction. The grid is 
displayed using the OpenGL library, where each cell represents a tree or an empty space. 
 
The objective of this lab is to parallelize the existing code using CUDA C to leverage the power 
of graphics processing units (GPUs) to make the simulation faster and more efficient. You will 
identify parts of the code that are most appropriate for optimization, such as the forest update 
process, and transform them to run in parallel. 
 
2. Objective 
The primary objective of this lab is to convert the sequential code into an optimized version using 
CUDA C to accelerate the simulation. You will learn to: 
• Identify code sections that can be parallelized. 
• Use CUDA C to run computations in parallel on a GPU. 
• Measure the performance gains achieved through parallelization. 
 2 
 
3. Development Platform 
Development and optimization of the program will be done on machines equipped with CUDAcapable
 GPUs. The tools to be used include: 
• CUDA Toolkit (12.6 or later) for compiling CUDA programs. 
• Visual Studio 2022 for editing and debugging the code. 
• CUDA Debugger for testing and profiling your CUDA kernels. 
 
You will use OpenGL for rendering the simulation, and work will be carried out on workstations 
with NVIDIA GPUs that support CUDA. 
4. Tasks 
Step 1: Understand the Starter Code 
• Analyze the provided code. It is a forest fire simulation where each cell in the grid 
represents either a tree or an empty space. Fire starts at 100 random locations, spreads to 
neighboring cells, and burning trees eventually extinguish after a set amount of time. 
Step 2: Identify Opportunities for Parallelization 
• Grid updating is a significant part of the code that can be parallelized. Each cell in the grid 
can be updated independently of the others. 
• Analyze the updateForest() function, which is responsible for updating the state of 
burning trees and propagating fire to neighboring cells. This is the section that needs to be 
optimized using CUDA. 
Step 3: Implement Parallelization with CUDA C 
• CUDA Initialization: Allocate memory for the grid (forest) and burn time (burnTime) on 
the GPU using cudaMalloc(). 
• CUDA Kernel: Implement a kernel that updates the state of each cell in the forest in 
parallel. 
• Parallel Execution: Ensure that each cell in the grid is updated in parallel using multiple 
threads on the GPU. 
• Block and Thread Management: Divide the grid into CUDA thread blocks for optimized 
execution. 
Step 4: Measure Performance 
Measure the runtime of the sequential program and compare it to the optimized CUDA version. 
Use CUDA profiling tools to identify performance gains and any further possible optimizations. 
 3 
 
5. Deliverables 
Each team must submit a report containing the following: 
• An explanation of the parts of the code that were parallelized. 
• The modified source code with the CUDA implementation. 
• A performance analysis showing the execution times before and after optimization. 
• Screenshots of the running program with visual simulation results. 
 
6. Evaluation Criteria 
The following criteria will be considered in the evaluation: 
• Correctness: The program must work correctly after optimization. The simulation should 
behave the same as the sequential version. 
• Effective Parallelization: The code should demonstrate proper and effective use of CUDA, 
with significant parallelization of the appropriate parts of the program. 
• Performance Improvement: Measurable performance gains should be demonstrated with 
the CUDA version. The difference in execution times between the sequential and parallel 
versions must be clearly explained. 
• Code Quality: The code should be well-structured, commented, and follow good 
programming practices. 
 
Note: This lab serves as an introduction to parallelization using CUDA, so it's important to have 
a solid understanding of the basics of CUDA before you begin coding. 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值