1
0
Fork 0
This repository has been archived on 2021-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
uni-m.cds-adv-prog/ex0.1/README.md
2019-10-30 09:02:41 +01:00

2.5 KiB

C++ versus Python performance

This exercise is intended to show explicitly the great difference that can exist between interpreted and compiled software. To illustrate the point, a few benchmarks have been lifted from the benchmarks game site. The benchmarks have been coded in such a way as to be algorithmically identical in the different programming languages.

Performance measurement

The task here is to carry out a performance measurement using the time program, running both the C++ and the Python version of each code. A general way to determine the time needed for a program to run is the following:

time ./myexe args

where args are any run-time arguments to the program. (The ./ prefix is not needed if you have the "current working directory" . in your PATH; however, doing so is generally considered bad practice, as it is insecure.) Note that all three programs take arguments that will affect the computing time needed. In the Python case you would replace myexe with python3 mypython.py (note that Python2 will likely fail to work).

How to run: C++

The general way to use (on Linux machines) the command-line g++ compiler illustrated below with a fictive source file called mysource.cc .

g++ mysource.cc -o myexe

Note that the C++ language standard is (still) evolving, and different programs adhere to different standards. The programs used here conform to the c++11 standard (which appears to be the default setting for the g++ version 7 compiler). Other standards could be specified using the -std=... option to g++. Many options to g++ exist; extensive information can be obtained by doing

man g++

Note also that instead of a command line tool, other (graphical) tools or Integrated Development Environments or IDEs may be used for your code development. As a general principle, the important thing is that whatever you do should work with a straight compilation using g++.

Specifics

  • The spectral-norm code uses the OpenMP library to enable multi-threading, a topic that we will get to later. To compile this code, the -fopenmp compilation flag is needed.

  • The mandelbrot code produces a NetPBM graphics output file, but does so by writing it to its standard output. One way to redirect the output is to specify

      time ( ./myexe args > mandelbrot.pbm )
    

(The parentheses here are needed to create a sub-shell; without them, the outputs from the time command and from myexe would get mixed up.)