Simon, you wrote:
> We're trying to do a "Haskell vs anything-else (preferably C)" study. We're
> interested both in their size and structure, and in their performance. We
> intend to make quite detailed comparative measurements of their performance.
>
> Do you have programs we could have a look at?
>
> We are most interested in "real" programs that you actually used for
> Real Work. The ideal would be programs that you "prototyped" in
> Haskell, then rewrote into C (or the other way around :-).
>
> The functional programs can be anything Haskell-ish; the "anything
> else" can be anything; the "realness" can be limited; the `match'
> between the two versions can be tenuous... We'll look at anything at
> this point!...
I enclose below a tar-compress-uuencode of a subprogram and test driver
to solve a linear system using Crout reduction with pivoting.
Crout reduction was popular with hand computers through the '40's because
one could solve a system with only one piece of paper on which to write
intermediate results, as opposed to saxpy-style Gaussian elimination, in
which one needs to write n intermediate matrices. It is exactly this
property that makes it attractive for use with functional languages: one
needs to create only one matrix, not n matrices. One also needs a non-
strict functional language, since row and column j+1 of the result depend
on rows and columns 1..j of the input _and_result_.
The pivoting method chosen allows one to de-reference a pointer (permutation
index) once per column, instead of once per element in the column.
The tar file contains a Fortran-90 implementation consisting of the module
mcrout.m, two main programs tcrout.f90 and tcrout.sav.f90 (the latter has
its data in it), and tcrout.out (corresponding to data in tcrout.sav.f90).
It also contains a Haskell implementation I believe to be equivalent to the
Fortran-90 implementation, but version 0.16+ of your compiler insists it
has a "black hole". It's not hard to verify, however, that there are no
circular data dependencies. I think the way I stored into the permutation
vector "p" may have confused the compiler (or perhaps not conformed to
restrictions of the language specification).
I had intended to use this program, and others, to argue for use of
functional languages, especially on our multiprocessor supercomputers
(e.g. Intel Gamma/Delta/Paragon and Cray T3D). Since I couldn't get this
simple example to work on my HP 720 (partly because 0.16+ was _sooooo_slow_
on the 720), and couldn't get compilers for the computers of real interest,
the project languished.
I hope the files are of some use to you.
Best regards,
Van Snyder
----------------------------- snip -------------------------------------
begin 664 slpj.tar.Z
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
MD8^.:><T5C$Y$+B9TE@2\9>:#HB9&LI)``B9X.R1(+&J$[P2\5VC^_.3\9
M*BD;VI&,")+`I%LEV5PG"68J&7$@**!CN8AF:55HJ99BD#9L"99$IYN``9=M
M()?_4I=V<)?M2$^UR1RWB8H*5C"!F1F*6:1W4YCT,T%DQ)>XR6B.R8J0V8.2
M:4RR"$"U"&V=B56YZ$`)Y)F]Y3_AQP:C68RLF9JO*9OH]J:-!XUE>D6#F9O7
MN)VO,9S:$IS$P8W3V7'7\3<)@Z#IR:?=^9T;2HZ_*9ST:8GW*9;YR8CT2"_]
MB8\KNH\$"J$:BI<(^:`&"I`;BJ&>:I&$ZJ`$J9'9":(?&7#`-*=T4*+-UW`I
MN8`M$J#X29;Z*5'J!*9JJ:N>Z9:JIZ,\"@)T:9<H$:3EY*JG.)-_J2_>(Z49
M0XE/JE::E5EMX$("5:V<4U>K@U<CH5<G$3M^U1(S``,[@3LW$`,W,0.Y<SLD
M\:V+I:VAXUC,$UG/0UEFL167):_\VJ_8`T"==:T7U$>IPA0#,0<'!65B<$$#
MP19^)%(88S+*A3$H`P*D-1^5R$V2@3%U25US@"JY@0(ZP`(Z\"Z9$@81BS&A
M8K$'-1#CY9\<NQ?`\;&I`A<C6[+=!@<M6ZD2V[$S"[(V:[+SL;,O:TSLLB\8
M<T[L@3$1%!X'I;%UAC%WL$(A,99#)`;A!+&O1Y-7F[4HVZBU0GV[X1KL<8Y,
MQD\ODP;GN!^U<E"8$1XC0K:%R!)O"W_A@3%SBX$C<K8L,`>5F#!T`&)]^S*[
M>$Y^VR]R\P5;6IDH$+CG%`,Z,`<MQ0)RL"R1BSB#^[<:P;:8@6&RZ+)IB3$B
M,`1K=DTBT+<L`!UO1`4C<KJ!.[)^BV&8M!N(XP+U,:AO(+9W"VF`LY/;P6J!
MR[=^F[G\UV`HL)//&'03FF&@=XZS6Q?\Q[:EA&&<^P:>6T/5I0*BNP2Z<;K"
M%P(L46FT`K[)EUP$M&1>!$;SAF$#@I,OPV2&J[D"BI,:PQ[*"P*`QV2P*V)[
M*[*#F[^".P?\NQM,-@?_"S@%W+<#K"4!++_2:P;7"[K:JQQ0T+H4Z[^Q"[XG
MT;Z'>S97^$9?B&8S=`9N0!UU4!5#9("\U$[EMAIL PROTECTED]"5:\"0V\'*%1=X
MX+X4%;GR^[PS/+CG6&D<++]ORR^[(<!DN[PRC)-%%5*%FU2U0@>*.XL!%+B.
MN\.2VRR4:[E9K',0!8T)4[T')<8A\;G9*[I,T+UX>R@A4;<CHDZ+@S&(@V%%
M_,9YP[3\E\-DTP)H>39J4S;RD;B+6\4EHS9A!;E7R0)ZG#<ZP)9\'#1A+$2=
M&Q)DO+E"I+`,2RDP,[!LRUE,Y$+4ZJ^B/,JD[*]T@*UFD`-"4<I?P:UW%1+?
M*COBJC`Q0!/!,U@S\*TVH*Z(=0,U$*^L?#GT"EG.,UG1HZ_!G,S*_!!;2DBB
MM<F#\060J6XAH12?/+!EW!2BU2O&%!??-QJI!`,LP&[AU0,RH`*K-1H9VW<Q
MZ[$@Z\VV-1KC+%OA);0H>R<J2[3WV+,RZT/OG,YW,,_Q?`="J[,A`;7M_+.I
M`L_0)-#0)+1L;)]%R\_NO-``+;3]U<;6RQ)F#!@3?`)%($A.`4T&3#]RL!"9
M<@(&IK$-A`+:J[W[T0,YD`.&2=),>]((RQ)N4$TCX@8D+9<X;6!N/+8W/1HY
MC;ON%L?T4TW\=YE-S!YH@3<LM5L^;=0]V6^1W$"3?!*57,;8Z]&B&P3=*]2Y
M:[=)3-(KU]&A:T#LH@,[7<\&UM4:449L`$0/NXMN;=-N74W.4KEY;=0D^]9L
MX"RO6]71%-A\C3$FX+DB:]@&_-?1Y"PY#-F/[=,+X2QLT-@D#<DGH=83+`)2
M,-9T6]9Q6]31E-9?O=:5V]:"K;ERO282++K$T@,2%XZD3=0F;=2GYMD8H\>!
MC=.N+<D;;<E:;;TS+2%OH+/[$<K+W-R:=<H7Y`)SL(4ND,JK[-RI`P)VQ3JQ
MO%>SK#`W0`.W,Q,VD,OJZCLQ\1(P(0/`C-U?,<P?8:_&7%G([-[V+:_-?!I<
MY$+2C&8'9<WL`<H'S<Z2TL\TZP;0P@(U8,\IJUSZ#+,%7M$('BTS4-!/2^`^
MZ\\+'2WL)S5P3G=`:/N$8[;9;@4,@\`*1(\X>(\XS8+L8T^(L\.+BO.(8
M0^,4!>,RCI"/:.,RCN,H`>,XON(I?E"\K1QB3=MN>]MPA+45J+7.TK5/CK);
MZ]6QS=8D6XE=3==V+4H0:S*A@C*D-=A&GMJ?'=I*KM&ZJYY9:S):+.7!43(4
M);]'OMI9/L;"7>97+@*SK1R]G;!'I-S!P=QD`=V#X0*#<=\8X<K<[3KAVE<+
MDSN"95CJ'0._D]Z6;@/L#0+7K>A'`=_-(UG00]_3X^FFWE::HAL(0^0M+A*V
MNSBVBS"M3N.P_AXMCC"TSNJO3N,(0[K6E!O-5$"LNQNU'N3OP>L@4,'$/@/'
MVF^^WFS'NKHC`NLU80,W$.2YG.T@$.O)/NW,OA/.7KJYP>S23NP>4P/I2@/,
M_NK<KNP:\>V+@S!HCNOLGNWVONW57A.U+NNO[C'VSNPMX`*U+`,X@.[;?KM$
M'CG5?NWGGN[K?KM]7NSL7A^G7O$6?_$8G_$:O_$<W_$>__$@'_(B/_(D7_(F
M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$
07_1&?_1(G_1*O_1,W_1&`?,R
`
end