[petsc-dev] PETSc with CUDA on windows with VS2013 and CUDA 6.5
Nystrom, William David
wdn at lanl.gov
Fri Sep 5 14:47:02 CDT 2014
I have had to comment out those lines so I could build with petsc with the Intel compilers
in a Linux environment. That has seemed to work fine for me although my testing has not
been exhaustive. But I have no petsc Windows experience.
Dave
--
Dave Nystrom
LANL HPC-5
Phone: 505-667-7913
Email: wdn at lanl.gov
Smail: Mail Stop B272
Group HPC-5
Los Alamos National Laboratory
Los Alamos, NM 87545
________________________________________
From: petsc-dev-bounces at mcs.anl.gov [petsc-dev-bounces at mcs.anl.gov] on behalf of Satish Balay [balay at mcs.anl.gov]
Sent: Friday, September 05, 2014 1:41 PM
To: Paul Mullowney
Cc: For users of the development version of PETSc
Subject: Re: [petsc-dev] PETSc with CUDA on windows with VS2013 and CUDA 6.5
On Fri, 5 Sep 2014, Paul Mullowney wrote:
> Hi,
>
> I've been trying to build PETSc in cygwin with Visual Studio 2013 and CUDA
> 6.5. I successfully built and ran the PETSc GPU code following the
> instructions for building on cygwin. However I ran in to a few problems
> along the way. If anyone has insight into the second problem, I would
> appreciate it.
>
> 1) cuda.py (lines 112, 113):
> if not config.setCompilers.Configure.isGNU(self.setCompilers.CC):
> raise RuntimeError('Must use GNU compilers with CUDA')
>
> I had to comment these lines out to enable configuration success.
We might have had issues on linux with folks trying --with-cc=icc and
--with-cudac=nvcc [and nvcc internally using gcc causing conflit].
So I think this check was added at that time. Ideally it should query
nvcc to see what the internal compiler is - and then check if
'--with-cc' is compatible with it. But I don't know how to do that.
Perhaps the easier fix is either of:
if (isLinux() and not isGNU(cc)) then error
if (not isWindows() and not isGNU()) then error
>
> 2) This may be related to why the GNU restriction in 1) was put in place.
> Whenever PETSc has to compile a .cu, it fails. For example for a single
> threaded build, the first .cu file to be compiled is veccusp.cu. For a
> verbose build, I see:
>
> /home/Paul/projects/petsc/bin/win32fe/win32fe nvcc -c -O -arch=sm_30
> --compiler-options="-MT -wd4996 -O2 -I/home/Paul/projects/petsc/include
> -I/home/Paul/projects/petsc/cuda_build/include
> -I/cygdrive/c/CUDA_6.5/include -I/home/Paul/projects/cusp/
> -I/home/Paul/projects/cusp/include -I/cygdrive/c/CUDA_6.5/include/thrust/
> -I/home/Paul/projects/petsc/include/mpiuni "
> /home/Paul/projects/petsc/src/vec/vec/impls/seq/seqcusp/veccusp.cu -o
> cuda_build/obj/src/vec/vec/impls/seq/seqcusp/veccusp.o # Compile first so
> that if there is an error, it comes from a normal compile
>
> veccusp.cu
> *nvcc fatal : redefinition of argument 'optimize'*
>
>
> However, if I copy and paste the the compile line above and run it in the
> terminal, it succeeds. If you do this for every file .cu file in PETSc
> (~10-15 files). PETSc will build and work properly on GPUs in cygwin.
>
> I don't know what the problem is here. Insight from anyone with
> windows/cygwin/CUDA experience would be much appreciated. I've attached a
> configure.log and make.log.
For one - I haven't tried cuda on windows in a while. [It must be when
win32fe was modified to support nvcc - 3 years back]
And I don't unserstand the error. Is it complaining about '-O' vs '-O2'?
And the fact that copy/paste works is strange.
You can try: 'make all-legacy' and see if that works.
Or you can try Using --verbose option i.e 'win32fe nvcc --verbose' to
see exactly what win32fe is doing [from gmake and from direct
invocation] - and see if there are differences.
Perhaps there is a 'make' variable [thats read-in as env variable by
nvcc] thats causing nvcc to behave differently.
Satish
More information about the petsc-dev
mailing list