See this thread for a similar question with some responses:
http://www.csharphelp.com/board2/read.html?f=1&i=28559&t=28559
But if you have the money you could see if there are applications which
already do what you want. For example flexpde is one i found:
http://www.pdesolutions.com/
Another option might be to use matlab, which you may or may not want to
interface from C#:
http://www.mathworks.com/support/solutions/data/1-X1PFC.html
But if you want to do all the coding yourself, here is some info if it
is of help.
If I'm understanding, you want to do use partial differential
equations, with graphical output, and take advantage of multiple
processors.
First, you might look at existing libraries that can handle partial
differential equations (PDE's), for example PETSc or EXPDE or others,
and see if they meet your requirements:
http://www.oonumerics.org/oon/
http://wotug.ukc.ac.uk/parallel/nhse/hpc-netlib/sw_eval/pdes/
http://www-unix.mcs.anl.gov/petsc/petsc-as/
http://www10.informatik.uni-erlangen.de/~pflaum/expde/public_html/index.html
Most of them are written in C or C++, but you can still use them from
C# and .NET, using the [DllImport] attribute. You would need to create
a C#/.NET wrapper on top of whichever library you use. Sort of like in
the matlab sample at the mathworks link I posted above.
For the multi-processor part, you might look into MPI:
http://www-unix.mcs.anl.gov/mpi/
PETSc (mentioned above) uses MPI, for example.
Here is a .NET wrapper for MPICH, an implementation of MPI:
http://www.osl.iu.edu/research/mpi.net/
http://www-unix.mcs.anl.gov/mpi/mpich/
Another implementation of MPI is lam-mpi:
http://www.lam-mpi.org/
And for the graphical output, you'll want to learn windows.forms.
There are some free graph plotting controls already out there like
NPlot and ZedGraph.
Web_PDE_Eric - 26 Dec 2005 23:32 GMT
Thanks.
I'll look into your suggestions.
But I really want to do raw coding. I already coded a PDE integrator and
graphics routines in C (on an older PC). I now want to update them to a dual
core processor, if that makes sense. (I did some multi-threaded programming a
while ago, but I am not up-to-date on the best current programming tools.)
So what I need is clear information about (convenient) support for dual core
in C#, a new version of C, or something else. What is the best compiler to
use? what is the best development environment to use for dual-core
programming?
I would really like a good source for pre-sale documentation; and for
development advice. If it existed, a book called "Efficient and Fast
Scientific Computing in C (or C#) for Dual Core Computers" would be what I
would need for development; and it's first chapter, with advice on what
compiler and coding environment to use, would be the pre-sale advice I need.
> See this thread for a similar question with some responses:
> http://www.csharphelp.com/board2/read.html?f=1&i=28559&t=28559
[quoted text clipped - 37 lines]
> There are some free graph plotting controls already out there like
> NPlot and ZedGraph.
Marcus Cuda - 27 Dec 2005 12:46 GMT
> So what I need is clear information about (convenient) support for dual core
> in C#, a new version of C, or something else. What is the best compiler to
> use? what is the best development environment to use for dual-core
> programming?
The only way to take advantage of a dual-core system is parallelize/thread your code. Since your code is already written
in C, take a look at take a look at OpenMP - www.openmp.org. VC++ 8 now supports OpenMP -
http://msdn2.microsoft.com/en-us/library/tt15eb9t.aspx. If you stick with C you might want to try using SIMD extensions
- http://msdn2.microsoft.com/library/y0dh78ez.aspx . While SIMD extensions have nothing to do with multi-core/cpu
programing, they can give a boost to numerical code. This is one place where C code can perform significantly better
than C#, since C# (actually the .NET runtime) doesn't take advantage of SIMD extensions for floating point operations.
If you have access to Intel's C++ compiler, you might want to try its auto-parallelization features -
ftp://download.intel.com/technology/itj/q12001/pdf/art_6.pdf. It can auto-thread certain loops on multi-core/cpu
systems and tries to use SIMD extensions where possible. No changes to your code, just enable some compiler switches.
Marcus
clintonG - 27 Dec 2005 16:14 GMT
I would think you will want to read stuff like this [1] for search terms and
insight regarding Windows High Performance Computing.
<%= Clinton Gallagher
METROmilwaukee (sm) "A Regional Information Service"
NET csgallagher AT metromilwaukee.com
URL http://metromilwaukee.com/
URL http://clintongallagher.metromilwaukee.com/
[1] http://ie.developerpipeline.com/174300441
> > So what I need is clear information about (convenient) support for dual
> > core
[quoted text clipped - 21 lines]
>
> Marcus