This is a small cellular automata fire simulation created for the bachelors level IMT3612 - GPU programming course at NTNU Gjøvik. The fire simulation is implemented both on the CPU and on the GPU (using OpenCL) to measure performance differences.
cellular_automata_fire_simulation's Introduction
cellular_automata_fire_simulation's People
cellular_automata_fire_simulation's Issues
Setup build environment
Create project build environment, including OpenCL, SDL dependencies etc.
Create opencl utility functionality
Create some general utility functionality for opencl, things like creating contexts and queues, without getting deprecation warnings etc.
Setup double buffer functionality
It was decided that we would do a double buffer strategy on the cpu implementation of the project,
this functionality need to be set up.
Add pthread dependency
Seeing as we are not able to use proper C11 because of MSVC we will have to use some other library for handling threading, pthread is the most natural choice.
Add valgrind script
Add a script to ease the use of valgrind for memory checking.
Draw grid
Will need a way to draw the grid in the cpu implementation.
Reserved
Create CP_ASSERT
Want our own custom assert messages that gives us more info than the regular assert.
Implement spreading behaviour
Implement heat spreading and fuel consumption in the grid.
Make logging multi-platform
Currently the logging function does not work properly on windows, because it tries to use '/' When looking up filepaths. This must be fixed.
Cleanup
Reserved
Create OpenCL C typedef's
Create typedef's for the different types within OpenCL C specifying width.
Cross platform
Issue used for various cross platform related issues.
Create thread args struct
Create the basic thread arguments struct needed for interacting with pthreads
Create SDL wrapper
Create function that initializes SDL, in general we don't want to have much overlap with our SDL code and our OpenCL code, so it would be nice if we in general could wrap up a lot of the functionality with our own abstraction layer.
Add logger
Add a logger, allowing us to log output in different categories.
Generalize cmake etc for multiple platforms
Need to generalize cmake so that it can be used both in windows and in ubuntu.
This also includes certain parts of the code, like using C99 functionality, which is not available on MSVC.
Finish opencl implementation
Finish the opencl implementation of cellular automata fire simulation.
Reserved
Test offset functionality
Create a kernel that tests the use of OpenCL offsets, to check if we can properly do offsets as we envision them.
Add cpu timing functionality
Add timing functionality to cpu implementation.
Create opencl logging functionality
Seeing as printf prints to an implementation defined stream, it can't necessarily be used for proper debugging with messages, it would be nice to have some way of reporting error messages back to the programmers.
Create read kernel functionality
Create functionality for reading a kernel from file.
Create rendering from agreed openCL data structure
We need to be able to convert our padded grid represented in a 1 dimentional array to a drawing of cells on the screen.
Git misc
Documentation
CMake
Reserved
Create proper grid copy
We need to be able to copy the grid to create read/write buffers.
Add timing functionality
Need a way to do timing, preferably something like the chrono library in C++
Reserved
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.