OpenMP Optimization for Large Matrices

Job ID: 37613716

Budget: $30 – $250 USD

READ ALL PROJECT DESCRIPTION before Bidding!

As someone seeking to enhance the runtime performance of matrix initialization and multiplication operations, I need an expert in OpenMP programming specifically in C++. You will be dealing with large matrices, greater than 1000x1000, so deep knowledge and extensive practical experience with large-scale matrix operations and parallel programming is paramount.

Key Requirements:
- Proven expertise in C++
- Extensive experience in OpenMP programming
- Mastery in handling large matrix operations (1000x1000 and above)
- Solid background in parallel programming

This job requires someone capable of diving into complex computations to deliver optimized results. If you've got the skills and experience, I'd love to hear from you. DO NOT TRY TO NEGOTIATE YOUR BIDS OR YOUR FINISHING DATES.

OBJECTIVE:

Use the provided serial program as a baseline for your work. This program has functions for
allocating and initializing matrices and performing multiplication. It is also designed to collect
multiple measures of elapsed time for initialization and multiplication operations and reporting
runtime performance of those operations. The print function is there so you can confirm that
your program calculates the matrix multiplication correctly as you modify the program to
improve performance.

You must not change the code for processing command line arguments or for
measuring/recording/reporting of initializing the three matrices or performing matrix
multiplication (matC = matA * matB).

One approach is to improve the performance of the serial program before using OpenMP
pragma directives to parallelize the code. There’s lots you can do before you parallelize with
OpenMP. You can change the code for allocating, initializing, and/or multiplying matrices. You
can change the multiplication algorithm, so it is more cache efficient. You can use vectorization.

You can use the Gnu, Intel, or Nvidia compiler. You can add compiler options to generate more
advanced instructions. (I tried using fused multiply-add, but that slowed my code down. Maybe
you will have better luck.) Once you start to parallelize with OpenMP, you can have one big
parallel section or multiple smaller parallel sections. You can have threads wait at the end of for
pragmas or not wait.

The Makefile already uses optimization level 3 (-O3). This is so five runs of the baseline program
can complete in less than 30 minutes. This means everyone can submit their jobs to the talonshort partition. The short job times mean no one will have to wait long for their jobs to run.

The size of your OpenMP team(s) is limited to 8. The Slurm script already takes care of this, so
no need to change the Slurm script. The Slurm script also specifies using the talon-short
partition to run jobs.
Related categories: Data Processing C++ Programming