From cooch17 at verizon.net  Fri Jun 26 16:16:26 2009
From: cooch17 at verizon.net (egc)
Date: Fri, 26 Jun 2009 10:16:26 -0400
Subject: [Rd] can't use ATLAS  or ACML | 2.9.0
In-Reply-To: <alpine.LFD.2.00.0906261322090.5203@toucan.stats.ox.ac.uk>
References: <4A44715F.4050204@verizon.net>
	<alpine.LFD.2.00.0906261322090.5203@toucan.stats.ox.ac.uk>
Message-ID: <4A44D83A.7020908@verizon.net>

Brian -

Cheers - followups below.

Prof Brian Ripley wrote:
> On Fri, 26 Jun 2009, Evan Cooch wrote:
>
>> So, tried again from scratch. Again, CentOS 5.3, which is essentially 
>> RHEL 5.3.
>>
>> ./configure --with-blas="-L/opt/acml4.3.0/gfortran64/lib -lacml"
>>
>> In config.log, get things like
>>
>> configure:37199: checking for dgemm_ in 
>> -L/opt/acml4.3.0/gfortran64/lib -lacml
>> configure:37230: gcc -std=gnu99 -o conftest -g -O2  
>> -I/usr/local/include -L/usr/local/lib64 conftest.c 
>> -L/opt/acml4.3.0/gfortran64/lib -lacml  -$
>> conftest.c: In function 'main':
>> conftest.c:189: warning: implicit declaration of function 'dgemm_'
>> /usr/bin/ld: warning: libgfortran.so.3, needed by 
>> /opt/acml4.3.0/gfortran64/lib/libacml.so, not found (try using -rpath 
>> or -rpath-link)
>
> So you don't have a compatible libgfortran installed (not surprising 
> as your OS is rather old): try a version of ACML of comparable age to 
> your OS that uses.  (I seem to remember needed ACML 4.1.0 on Fedora 8.)

Thanks - but I'm not sure I would classify CentOS as 'old' - it is RHEL 
5.3 (basically built straight from open-sourced RHEL code), and RHEL 5.3 
is the current release of the 'flagship' OS from Redhat.

I grant you it *is* old by (say) Fedora standards, which has a release 
schedule measured in months (whereas RHEL is measured in 1-2 years), but 
I was aiming for stability.

>
> We also needed to add /opt/acml4.3.0/gfortran64/lib to the ldconfig 
> files (something AMD should organize).
>
>> Try
>>
>> ./configure --with-blas="-L/usr/lib64/atlas  -lf77blas -latlas"
>>
>> I get the following
>>
>>
>> configure:37199: checking for dgemm_ in -L/usr/lib64/atlas -lf77blas 
>> -latlas
>> configure:37230: gcc -std=gnu99 -o conftest -g -O2  
>> -I/usr/local/include -L/usr/local/lib64 conftest.c -L/usr/lib64/atlas 
>> -lf77blas -latlas  -lg$
>> conftest.c: In function 'main':
>> conftest.c:189: warning: implicit declaration of function 'dgemm_'
>> /usr/bin/ld: cannot find -lf77blas
>> collect2: ld returned 1 exit status
>> configure:37236: $? = 1
>> configure: failed program was:
>>
>>
>> What puzzles me is that lf77blas is definitely in /usr/lib64/atlas  - 
>> but configure couldn't find (?). Perhaps its because 100% of the libs 
>> in the atlast subdir are xxx.so.3 (perhaps R config is looking for 
>> so.1 libs?).
>
> It is looking for .so or .a (a Linux linker always does).  Where did 
> you get ATLAS from?  This is what happens if you install the foo and 
> not the foo-devel RPM for some package.  And indeed, on Fedora 10 you 
> need the atlas-devel RPM ....

Ah - that rings a bell (can you tell I was doing this late into the wee 
hours?). Atlas was distributed as an RPM (or, rather, downloaded via the 
CentOS standard yum repo). Everything in /usr/lib64/atlas is an .so.3 
file - nothing with .so or .a as suffix.

>
>> I suspect that many/most of the problems I'm having with getting R to 
>> compile (with BLAS and LAPACK) are related to these basic issues - if 
>> I can't do even a simple compile with blas, then whats left?
>
> Ask for local help on your OS!  You seem to be asking many questions 
> about your OS here, and be assured that R works with ATLAS and ACML 
> flawlessly in well-sorted OS installations.  Things like the need for 
> the foo-devel RPM are in the R installation manual which the INSTALL 
> file asked you to study (before posting).
Well, I've actually gone through the manual you refer to - missed the 
bit on foo-devel (which applies only to atlas, it would seem) - my 
oversight - mea culpa. However, the documentation doesn't (and isn't 
expected) to elaborate on what you refer to as a 'well-sorted' OS. In 
other words, I had no a priori expectation of a problem - since CneenOS 
is RHEL, and RHEL has a rather large market share. I would have assumed 
(naively, in hindsight) that the combination of CentOS and ACML 4.3.x 
would have been 'well sorted'. (as an aside - some of my friends at Sun 
tell me 'standard Linux' for file structures, libs and such is an 
oxymoron ;-)

It would appear not - at least in this instance. On the other hand, 
CentOS picked up all of my twitchy harddare (RAID cards, special NICs) 
without missing a beat, networked without so much as a single tweak 
being needed, and has performed flawlessly for everything...except 
getting R compiled with ACML support.

>
> Note that a much simpler way (as recommended the manual!) to add an 
> optimized BLAS is to switch the libRblas.  E.g. I have a note in my 
> build file
>
> gannet% cat I.USED
> ## later
> ## mv lib/libRblas.so lib/libRblas.so.keep
> ## ln -s /opt/acml4.3.0/gfortran64_mp/lib/libacml_mp.so lib/libRblas.so
>
> And most users of R do so little linear algebra that an optimized BLAS 
> make a negligible difference in performance (but often an appreciable 
> one to accuracy).

Agreed on the latter point (generally), but I do a fair bit of stuff 
with big matrices, and wanted both accuracy *and* speed.

Wrt to the first point, I tried that in fact (but didn't report - in 
fact, I tried about 15-20 different combinations of various approaches). 
When I try that - using *exactly* that syntax (above), and do the 
compile, I got the following error message when starting R:

/usr/local/lib64/R/bin/exec/R: error while loading shared libraries: 
libacml_mv.so: cannot open shared object file: No such file or directory

So, try

LD_LIBRARY_PATH=/opt/acml4.3.0/gfortran64/lib
export LD_LIBRARY_PATH

Seems to do the trick, but I think I'm botching tweaking 
R_HOME/etc/ldpaths to set this permanently. Is there a doc somewhere on 
how to tweak ldpaths? Sorry if I've missed it...

Again, thanks for wading through my various missives. If R wasn't 
mission critical to my users (and R with 'better blas') wasn't  critical 
to *me*, I wouldn't be so fussed about it.



[Rd] can't use ATLAS or ACML | 2.9.0
egc