\contentsline {section}{\numberline {1}Introduction}{2}{section.1} \contentsline {section}{\numberline {2}Euler's Method}{2}{section.2} \contentsline {section}{\numberline {3}Parallelisation}{3}{section.3} \contentsline {subsection}{\numberline {3.1}Graphics}{3}{subsection.3.1} \contentsline {section}{\numberline {4}POSIX Threads (pthreads)}{4}{section.4} \contentsline {subsection}{\numberline {4.1}Barriers}{4}{subsection.4.1} \contentsline {subsection}{\numberline {4.2}Division of Labour}{4}{subsection.4.2} \contentsline {subsection}{\numberline {4.3}Single Threaded Section}{5}{subsection.4.3} \contentsline {section}{\numberline {5}OpenMP}{5}{section.5} \contentsline {section}{\numberline {6}Barnes Hut Algorithm}{5}{section.6} \contentsline {subsection}{\numberline {6.1}Errors}{6}{subsection.6.1} \contentsline {subsection}{\numberline {6.2}Performance for different $\theta $ values}{6}{subsection.6.2} \contentsline {section}{\numberline {7}Performance Analysis}{9}{section.7} \contentsline {subsection}{\numberline {7.1}Time vs Steps}{9}{subsection.7.1} \contentsline {subsection}{\numberline {7.2}Time to compute vs Number of Bodies}{9}{subsection.7.2} \contentsline {subsection}{\numberline {7.3}Analysis with Callgrind}{12}{subsection.7.3}