Multi-Timbre Synthesizer

This synthesizer was built as a Program Exercise (EP) to Computer Music class, from the Institute of Mathematics and Statistics of the University of São Paulo / BR, by professor Dr. Marcelo Queiroz.

How do I download Pure Data?

Miller S. Puckette's "vanilla" distribution of Pd
Last release: Pure Data 0.51-3
Released 20/11/2020
Required extensions: Zexy

If you have a synth keyboard, plug it into you computer and follow this steps.
Else if, you don't have a keyboard, see this instructions.
Else if, you want to build a QWERTY synth keybord, see this Youtube video from LWM Music channel.

Source code

Musicam - Webcam based digital instrument

Digital instrument based on oscilator's frequency manipulation using Webcam images

Source code

Required extensions

Windows and MAC users: If you want to run this patch quickly, you can download the DMG packages or the EXE installer of Purr-Data HERE.

By Claudinei Sevegnani (click on images to see)

Mandelbrot Fractal

Performance test using different parallel configurations.

Source code

This work contains some of programs-exercises of class MAC5742 - Introduction to Concurrent, Parallel and Distributed Programming (2020) - Institute of Mathematics and Statistics, São Paulo University (IME-USP).


Carlos Eduardo Leal de Castro (me)
Felipe de Lima Peressim
José Luiz Maciel Pimenta
Luis Ricardo Manrique
Rafael Fernandes Alencar


The Mandelbrot Set is the set of all complex points \(\mathbb{C}\) such that the sequence \( \{z_n\}_{n\in(\mathbb{N}\cup\{0\})} \), given by \(z_{n+1}=z_n^2+c\), with \(z_0=c\in\mathbb{C}\), where this sequence remains bounded. That is, for any \(z\in\mathbb{C}\) that remains on this set, there \( \exists R_{max} \) such that \(\vert z \vert \leq R_{max}\).

Performance tests

We did performance tests to compare all the methods used here: sequential, pthreads, openmp, openmpi, cuda, openmpi+openmp and openmpi+cuda. In these experiments, we measure the average time of 15 executions on each method, varying 3 different parameters:

  • Dimensions (x,y) of grid and blocks (CUDA);
  • Number of Threads (Pthreads and OMP);
  • Number of processes (OMPI).
Algorithm Executions
Sequential ---
OpenMP 1 to \(2^{10}\) threads
Pthreads 1 to \(2^{10}\) threads
CUDA \(2^2\) a \(2^{6}\) clock size
CUDA+OpenMPI (one node) Block size \(n = (2,4,...,32)\), for each \(n, \ 2^2\) to \(2^6\) clock size
CUDA+OpenMPI (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, each one with \(\frac{n}{2}\) processes, for each \(n, \ 2^2\) to \(2^6\) block size
OpenMPI (two nodes) Block size \(n = (2,4,...,32)\)
OpenMPI (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, with \(\frac{n}{2}\) processes each
OpenMPI+OpenMP (one node) Block size \(n = (2,4,...,32)\), for each \(n, \ 2^2\) to \(2^6\) threads
OpenMPI+OpenMP (two nodes) Block size \(n = (2,4,...,64)\) in two nodes, with \(\frac{n}{2}\) processes each and, for each \(n\) we have \(2^2\) to \(2^6\) threads