Skip to content

MateusZitelli/Qeopps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Qeopps

(Q)eopps is an (e)volutionary (o)ptimizer for (p)arallel (p)rogram(s)

Qeopps is a tool to optimize parallel programs written in C with posix threads, positioning and setting the granularity of different transactions.

The optimization is made with genetic algorithms, with the solutions represented as a table with transactions and their position in the code. The code itself is parsed and represented as a syntax tree, facilitating the placement of transactions in the program.

The regions to be optimized is defined adding a custom tag in the C code. For each generation a version of the original code is generated with the transactions represented in each table in the population. This code is then sent with compilation params to a fitness server which will be running in the desired archteture, this server will compile and then returns the runtime of the solution program, each runtime is used as the fitness of the solution.

This tool is not ready yet and presents a lot of bugs, but can be used to optimize the positioning and granularity of:

  • Mutex locks
  • Transactional memory blocks
  • Semaphores

Usage

First you must change the configuration file src/client/test.cfg with your preferences.

Then run the fitness server:

$ cd src/fitness_server
$ python server.py

And then the client

$ cd src/client
$ python main.py

After reaching the maximum generations number defined in the configuration file, the solutions obtained in the last generation will be available in the directory defined as population_programs_dir in the configuration.

About

(Q)eopps is an (E)volutionary (O)ptimizator for (P)arallel (P)rogram(s)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published