SevenThunders wrote: > > > > The new behavior is that under certain conditions a certain matrix inner > product produces undefined floats, that should not be there. >
I now have a simple example that I have posted as ticket number 1944 for ghc 6.8.1. The behavior is that if I link to an external cblas .dll file and do a simple matrix multiply I get NaNs in the answer. However this only seems to happen after I call the round function. The behavior does not occur for ghc 6.6.1. I will show the source files that cause this below. Test2.hs: module Main where foreign import ccall unsafe "test2.h iprod" iprod :: IO() main = do let base = round 0.03 print $ "rounded base = " ++ (show base) iprod The c source file ctest2.c: #include <math.h> #include <stdio.h> #include "ctest2.h" #define N 2 #define N4 8 /* 4 x N matrix */ double A[N4] ; /* N x 1 matrix */ double B[N] ; double C[4] = {0.0,0.0,0.0,0.0} ; void iprod(void) { int k ; double sum ; for (k = 0 ; k < N4 ; k++) { A[k] = 1.0 ; } for (k = 0 ; k < N ; k++) { B[k] = 1.0 ; } cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 4, 1, N, 1.0, A, 4, B, N, 0.0, C, 4) ; for (k = 0 ; k < 4 ; k++) { printf("C[%d] = %g\n", k, C[k]) ; } } The .h include file ctest2.h: enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 }; enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, AtlasConj=114}; enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void iprod(void) ; The .bat file I used to compile this: set CLIB=atlas set TopFile=Test2 set csrc=ctest2.c set OutFile=%TopFile%.exe dlltool.exe -D %CLIB%.dll -l %CLIB%.lib set XFLAGS=-threaded -O -XForeignFunctionInterface rem set XFLAGS=-prof -auto-all rem -caf-all ghc %XFLAGS% -I. -I..\matrixstack --make %TopFile%.hs %csrc% -o %OutFile% -optl-l%CLIB% -optl-L"." and finally the output which prints the NaNs after calling Test2.exe, "rounded base = C[0] = -1.#IND C[1] = 2 C[2] = 2 C[3] = -1.#IND -- View this message in context: http://www.nabble.com/ghc-6.8.1-bug--tf4810375.html#a14018323 Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe