Converting Matlab code into CUDA C++ implementation.
- or -
Post a project like this£500(approx. $633)
- Posted:
- Proposals: 4
- Remote
- #1249592
- Expired
Description
Experience Level: Expert
Estimated project duration: 1 - 2 weeks
General information for the business: personal code project
Kind of development: Customization of existing program
Num. of modules: 1
Description of every module: I have a code that I wrote in Matlab and I am looking to convert it to C/C++ Cuda to be run faster on a GPU. The code is sequential and the main processing operation in the code is a 2D FFT of 2D images. The current Matlab code is very slow even with the parallel computing option being enabled.
Description of requirements/functionality: The main target is to reach a high speed up (say 700X and above) when running on a GPU. Such speed up is possible with normal CUDA code as this problem is a simple image processing with few sequential steps (i.e. embarrassingly parallel). I already have the Cuda implementation of some of the computationally expensive processes, and I got speed increases of 200x and 700x on a high-end workstation graphics card (NVIDIA Tesla K40c with 2880 cores). I need an optimized version of my algorithm, possibly using cuFFT?.
More information about the Matlab code:
The current Matlab code is highly modular and well written. The input date is a Mat file that contains a 4D matrix of 2D images. It also contains other parameters that are needed for processing. This data is processed sequentially to generate the required intermediate data for the last two main computationally expensive operations(FT_MtoG and SSBR ). The first one (FT_MtoG) is simply a Fourier transform to generate the 4D matrix (G) that is needed for the last operation (SSBR) which is a Stencil Operations to generate a single image for the G matrix.
Main requirement:
1. Achieve a very high GPU speed up (700x minimum for both the last two main operations FT_MtoG and SSBR ).
2. Output date should be stored in HDF5 file format.
3. embedding the code in a GUI
You need to be professional in C++ and GPGPU parallel APIs as CUDA .
Required libraries
HDF5 - https://www.hdfgroup.org/HDF5/
cuFFT - https://developer.nvidia.com/cufft
Specific technologies required: c++ , Cuda, GPU, Matlab
OS requirements: Windows, Linux
Extra notes: Proposed milestones:
Stage 1: read Data from Matlab format (.mat) in to C/C++ and providing the CUDA c++ code for the intermediate operations.
The data are stored in Mat Version 7.3 format which is an HDF5 format.
You need to read and load all data from this file into C++ and then stored after processing as HDF5 format. This can be done using Matlab C++ APIs. I am flexible about this-this, if Matlab API is problematic, another option is acceptable such as converting the Mat file to another format via scripting or even converting it into HDF5 to read it. The generated code should be not customised for this particular data, it should work on similar data with higher sizes (ideally image size 256^4).
They are mainly some sequential operations for visualisation. Mostly they are stencil operations that are highly similar. The visualisation library is left to your preference.
Stage 2: c++ Cuda generation of FT_MtoG module
This function is a very simple faction and is just an FFT of 2D images looping the 4D matrix (two nested loops). I already have the Cuda implementation, however, this need to be further optimised using the cuFFT library.
Stage 3: c++ Cuda generation of SSBR module
This module is just a Stencil operation. And is more computationally expensive than the previous one? Therefore optimisation is highly required.
Stage 4: saving data as an HDF5 format.
Since the data can be a large dataset (4D matrix can be several gigabytes), it is important to store it in a format that is optimised for such data size. Therefore the HDF5 format Is needed.
Stage 5: embedding the code in a GUI
Create a simple and easy to use GUI so that I can load the files and see the results without the need to run the code via prompt command.
Kind of development: Customization of existing program
Num. of modules: 1
Description of every module: I have a code that I wrote in Matlab and I am looking to convert it to C/C++ Cuda to be run faster on a GPU. The code is sequential and the main processing operation in the code is a 2D FFT of 2D images. The current Matlab code is very slow even with the parallel computing option being enabled.
Description of requirements/functionality: The main target is to reach a high speed up (say 700X and above) when running on a GPU. Such speed up is possible with normal CUDA code as this problem is a simple image processing with few sequential steps (i.e. embarrassingly parallel). I already have the Cuda implementation of some of the computationally expensive processes, and I got speed increases of 200x and 700x on a high-end workstation graphics card (NVIDIA Tesla K40c with 2880 cores). I need an optimized version of my algorithm, possibly using cuFFT?.
More information about the Matlab code:
The current Matlab code is highly modular and well written. The input date is a Mat file that contains a 4D matrix of 2D images. It also contains other parameters that are needed for processing. This data is processed sequentially to generate the required intermediate data for the last two main computationally expensive operations(FT_MtoG and SSBR ). The first one (FT_MtoG) is simply a Fourier transform to generate the 4D matrix (G) that is needed for the last operation (SSBR) which is a Stencil Operations to generate a single image for the G matrix.
Main requirement:
1. Achieve a very high GPU speed up (700x minimum for both the last two main operations FT_MtoG and SSBR ).
2. Output date should be stored in HDF5 file format.
3. embedding the code in a GUI
You need to be professional in C++ and GPGPU parallel APIs as CUDA .
Required libraries
HDF5 - https://www.hdfgroup.org/HDF5/
cuFFT - https://developer.nvidia.com/cufft
Specific technologies required: c++ , Cuda, GPU, Matlab
OS requirements: Windows, Linux
Extra notes: Proposed milestones:
Stage 1: read Data from Matlab format (.mat) in to C/C++ and providing the CUDA c++ code for the intermediate operations.
The data are stored in Mat Version 7.3 format which is an HDF5 format.
You need to read and load all data from this file into C++ and then stored after processing as HDF5 format. This can be done using Matlab C++ APIs. I am flexible about this-this, if Matlab API is problematic, another option is acceptable such as converting the Mat file to another format via scripting or even converting it into HDF5 to read it. The generated code should be not customised for this particular data, it should work on similar data with higher sizes (ideally image size 256^4).
They are mainly some sequential operations for visualisation. Mostly they are stencil operations that are highly similar. The visualisation library is left to your preference.
Stage 2: c++ Cuda generation of FT_MtoG module
This function is a very simple faction and is just an FFT of 2D images looping the 4D matrix (two nested loops). I already have the Cuda implementation, however, this need to be further optimised using the cuFFT library.
Stage 3: c++ Cuda generation of SSBR module
This module is just a Stencil operation. And is more computationally expensive than the previous one? Therefore optimisation is highly required.
Stage 4: saving data as an HDF5 format.
Since the data can be a large dataset (4D matrix can be several gigabytes), it is important to store it in a format that is optimised for such data size. Therefore the HDF5 format Is needed.
Stage 5: embedding the code in a GUI
Create a simple and easy to use GUI so that I can load the files and see the results without the need to run the code via prompt command.
Alan A.
0% (0)Projects Completed
-
Freelancers worked with
-
Projects awarded
0%
Last project
15 Dec 2024
United Kingdom
New Proposal
Login to your account and send a proposal now to get this project.
Log inClarification Board Ask a Question
-
is this job still open to be awarded?
118825
We collect cookies to enable the proper functioning and security of our website, and to enhance your experience. By clicking on 'Accept All Cookies', you consent to the use of these cookies. You can change your 'Cookies Settings' at any time. For more information, please read ourCookie Policy
Cookie Settings
Accept All Cookies