[parsec-users] StreamCluster and Cygwin

Jim Dempsey jim at quickthreadprogramming.com
Thu Mar 25 13:15:03 EDT 2010


I too am a Windows user. Pthreads threw me in a loop for a while too. A
version of it is buried in raytrace in one of the sub-directories. Prior to
discovering this, I downloaded the current version, pthreads-w32-2.8.0 from
their website. And I am using that instead (I placed this in the pkgs\libs
folder where it belongs).

There are some minor changes with some function name differences and/or
available library functions. And I had some problems with x64 builds, but I
have that working now. Most of the problems had to deal with original
pthreads code written for x32 platform and assuming interchangeability of
int/long with handle, pointer, size_t, etc... The version I have now, builds
both x32 and x64 under Windows. I haven't performed rigorous testing on this
code base, so I cannot claim everything works. If you have problems with the
copy of pthreads on your system, let me know and I will send you my code
base. Eventually I will get around to sending this back to the repository
site (after I am confident that it is relatively correct).

Since you are a Windows user, you might be interested in my adaptations of
some of the PARSEC programs to use my parallel programming toolkit
QuickThread. I currently have adapted blackscholes, bodytrack and
fluidanimate to QuickThread. While I have kept the fundamental computations
the same, I have taken the liberty to rework the manner in which the code is
pieced together. The general result being significantly better performance.

Not too many of the users of PARSEC seem to be on Windows. We Windows users
should be able to share some information that is not (yet) available in the
documentation. If you need assistance, to the extent I can help, feel free
to contact me. And if you happen to be interested in the QuickThread code I
can send you that via email. A demo/educational version of QuickThread is
available on my website www.quickthreadprogramming.com ($10). The demo
version of the software is the same as commercial version. What you are
licensed to do with it is not. Distribution and support is via a private
group on Google.com.

The design philosophy of PARSEC is to provide a broad spectrum of
applications to test (benchmark) against compiler, processor/system
architecture, and threading tool (pthreads, OpenMP, TBB). My philosophy is
not necessarily aligned with this philosophy. What I am in the process of
doing is using the problem set (benchmarks) and the algorithms developed to
address these problems, then recombine these algorithms using QuickThread
into a superior performing application. 

The reason for this is many of these benchmark programs will be used as a
learning tool as to how to write efficient parallel programs, and examples
of how to address these types of problems. My philosophy is aligned with
these interests (how best to do the parallel programming). Some of the
techniques I use with my adaptations can be incorporated back into pthreads,
TBB, OpenMP, Serial methods (in fact Chris at princeton.edu has some of
these changes). Any of the other users here can incorporate this programming
change to the other models. Some of the techniques employed will use the
strengths of QuickThread programming capabilities (e.g. ease of programming
and superior parallel_pipeline). These changes though may be harder to
implement using different threading model.

Cheers to you too,

Jim Dempsey

-----Original Message-----
From: parsec-users-bounces at lists.cs.princeton.edu
[mailto:parsec-users-bounces at lists.cs.princeton.edu] On Behalf Of Paul Keir
Sent: Thursday, March 25, 2010 10:40 AM
To: parsec-users at lists.cs.princeton.edu
Subject: [parsec-users] StreamCluster and Cygwin


I'm running Parsec 2.1 under cygwin on Windows XP (I know). I'm pleased to
say it was pretty easy to get things running. Cygwin doesn't identify itself
very well, so first of all I need a windows.sysconf in the config dir:

$ cp linux.sysconf windows.sysconf

Then I edit gcc.bldconf. Just after the comment line:
# Linux + default case
I comment out the export of CC_HOME and BINUTIL_HOME, and set them instead

export CC_HOME="/usr"
export BINUTIL_HOME="/usr"

One general problem I came across was in streamcluster. If I do a gcc-serial
build, it complains about a missing pthread_barrier_t. It looks like in
streamcluster.cpp, although the executable code relating to pthreads are
surrounded by #ifdef ENABLE_THREADS, there are pthread related declarations
which are not. To avoid this I removed the ENABLE_THREADS guard at the top
of streamcluster.cpp:

#include <pthread.h>
#include "parsec_barrier.hpp"

One final mini-question, is there an easy way to use the "make -j n" idiom
to help reduce build times?

Keep up the great work!


The University of Glasgow, charity number SC004401
parsec-users mailing list
parsec-users at lists.cs.princeton.edu

More information about the parsec-users mailing list