11 September 2012

232. Compile parallel (threaded) povray 3.7-rc6 on Debian Wheezy

Update 13 May 2013: This build won't work with v3.7-rc7 on debian wheezy if you have libjpeg62 installed. See http://verahill.blogspot.com.au/2013/05/413-povray-37-rc7-on-debian-wheezy.html.

Remove libjpeg62 and it works fine though.

Original post
Expanding my little cluster has got me thinking about additional uses for it. The primary purpose is obviously work i.e. MD simulations using gromacs and ab initio calcs using NWChem and Gaussian. I'm also testing it with John the Ripper to see how well the users of the linux box in the lab are choosing their passwords.

At that point I realised that it'd be sweet to have at least an OMP capable version of povray to speed things up when polishing figures for those elusive journal covers.

Debian testing currently uses v. 3.6.1 of povray but

  POV-Ray 3.6 does not support multithreaded rendering. POV-Ray 3.7 does.

So compile we will although v 3.7 is beta, so be aware.
sudo mkdir /opt/povray
sudo chown $USER /opt/povray

wget http://povray.org/redirect/www.povray.org/beta/source/povray-3.7.0.RC6.tar.gz
tar xvf povray-3.7.0.RC6.tar.gz
cd povray-3.7.0.RC6/
sudo apt-get install libboost-all-dev libpng-dev libjpeg-dev libtiff-dev build-essential libsdl-dev

Note: libboost-all-dev is big. It might be enough with libboost-thread-dev

./configure --prefix=/opt/povray --program-suffix=_3.7 COMPILED_BY="me@here"
POV-Ray 3.7.0.RC5 has been configured.

Built-in features:
  I/O restrictions:          enabled
  X Window display:          disabled
  Supported image formats:   gif tga iff ppm pgm hdr png jpeg tiff
  Unsupported image formats: openexr

Compilation settings:
  Build architecture:  x86_64-unknown-linux-gnu
  Built/Optimized for: x86_64-unknown-linux-gnu (using -march=native)
  Compiler vendor:     gnu
  Compiler version:    g++ 4.7
  Compiler flags:      -pipe -Wno-multichar -Wno-write-strings -fno-enforce-eh-specs -s -O3 -ffast-math -march=native -pthread

Type 'make check' to build the program and run a test render.
Type 'make install' to install POV-Ray on your system.

The POV-Ray components will be installed in the following directories:
  Program (executable):       /opt/povray/bin
  System configuration files: /opt/povray/etc/povray/3.7
  User configuration files:   $HOME/.povray/3.7
  Standard include files:     /opt/povray/share/povray-3.7/include
  Standard INI files:         /opt/povray/share/povray-3.7/ini
  Standard demo scene files:  /opt/povray/share/povray-3.7/scenes
  Documentation (text, HTML): /opt/povray/share/doc/povray-3.7
  Unix man page:              /opt/povray/share/man

The way it is configured we can keep our debian version of povray and install the newer version (povray_3.7)

make install

Seems like -geometry 1000x1000 doesn't work anymore. Instead use -H1000 -W1000

I've played around with it a little bit and it does parallel (threaded) execution nicely.

wget http://www.ms.uky.edu/~lee/visual05/povray/fourcube7.pov
./povray_3.7 -H1000 -W1000 fourcube7.pov +A0.1
takes 9 seconds on an AMD II X3. The standard, serial Debian version takes 21 seconds.


  1. Hi,

    "Seems like -geometry 1000x1000 doesn't work anymore. Instead use -H1000 -W1000" : povray had never work this way (-geometry): this is an ImageMagick/convert option, not povray's one.

    Did you try to compile the last RC7 in Debian 7 (wheezy) ? Did you have any problem with libjpeg8 ? I did compile it, but, because libsdl and/or libtiff requires libjpeg8 (instead of libjpeg62, which could work well), it's now impossible to use jpeg images -- sizeof structures won't match from what is used in sources (libjpeg6x) and the libjpeg8 includes, and povray fail with error.

    I tried to compile --without-libtiff (I never use this format, so I can throw it away), --without-libsdl --with-x... but I get no display at all (after a ./configure [...]), not even via X11 (as a compiled megapov does).

    Do someone have any (better) solution ?


    1. Zebulon,
      "-geometry" still works in the current version of povray in wheezy (1:3.6.1-12+b1). See e.g. man povray under X windows system options:
      -geometry [WIDTHxHEIGHT][+XOFF+YOFF]
      Render the image with WIDTH and HEIGHT as the dimensions, and locate the window XOFF from the left edge, and YOFF from the top edge of the screen (or if negative the right and bottom edges respectively). The WIDTH and HEIGHT, if given, override any previous Wn and Hn settings.

      To be fair I don't see any mention of this switch when I search online though -- only in the man pages on debian.

      I'll have a look at the other issues during the coming week or so.

    2. I had a look at the libjpeg issue -- remove libjpeg62 and it compiles fine. The only package of importance (to me) that depends on libjpeg62 is povray, which is what we're replacing anyway.

    3. Just to clarify: I've tested rendering images with +fj as well, and it works fine.

  2. As for the last issue, is this what you're referring to:

    "./configure --prefix=/opt/povray --program-suffix=_3.7 COMPILED_BY="me@here" --without-libtiff --without-libsdl --with-x NON_REDISTRIBUTABLE_BUILD=yes"


    " X Window display: disabled"?

    It just means that you don't have libsdl-dev installed as even with --without-sdl configure confusingly gives

    "configure: WARNING: the resulting binary is NOT REDISTRIBUTABLE.

    Built-in features:
    I/O restrictions: enabled
    X Window display: enabled (using SDL)
    Supported image formats: gif tga iff ppm pgm hdr png jpeg
    Unsupported image formats: tiff openexr"