Преглед на файлове

heat: Ignore pivoting errors when running in valgrind

Samuel Thibault преди 7 години
родител
ревизия
2a5b38d244
променени са 3 файла, в които са добавени 32 реда и са изтрити 7 реда
  1. 27 3
      examples/heat/dw_factolu_kernels.c
  2. 3 3
      examples/lu/xlu_kernels.c
  3. 2 1
      include/starpu_config.h.in

+ 27 - 3
examples/heat/dw_factolu_kernels.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009, 2010-2012, 2014-2015  Université de Bordeaux
+ * Copyright (C) 2009, 2010-2012, 2014-2015, 2017  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2016, 2017  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -20,6 +20,10 @@
  */
 #include "dw_factolu.h"
 
+#ifdef STARPU_HAVE_VALGRIND_H
+#include <valgrind/valgrind.h>
+#endif
+
 #ifdef STARPU_USE_CUDA
 #include <cublas.h>
 #include <starpu_cublas_v2.h>
@@ -342,7 +346,17 @@ static inline void dw_common_codelet_update_u11(void *descr[], int s, STARPU_ATT
 			{
 				float pivot;
 				pivot = sub11[z+z*ld];
-				STARPU_ASSERT(pivot != 0.0f);
+
+#ifdef STARPU_HAVE_VALGRIND_H
+				if (RUNNING_ON_VALGRIND)
+				{
+					if (fpclassify(pivot) == FP_ZERO)
+						/* Running in valgrind, don't care about the result */
+						pivot = 1.0f;
+				}
+				else
+#endif
+					STARPU_ASSERT(fpclassify(pivot) != FP_ZERO);
 
 				STARPU_SSCAL(nx - z - 1, (1.0f/pivot), &sub11[z+(z+1)*ld], ld);
 
@@ -362,7 +376,17 @@ static inline void dw_common_codelet_update_u11(void *descr[], int s, STARPU_ATT
 				cudaMemcpyAsync(&pivot, &sub11[z+z*ld], sizeof(float), cudaMemcpyDeviceToHost, stream);
 				cudaStreamSynchronize(stream);
 
-				STARPU_ASSERT(pivot != 0.0f);
+#ifdef STARPU_HAVE_VALGRIND_H
+				if (RUNNING_ON_VALGRIND)
+				{
+					if (fpclassify(pivot) == FP_ZERO)
+						/* Running in valgrind, don't care about the result */
+						pivot = 1.0f;
+				}
+				else
+#endif
+					STARPU_ASSERT(fpclassify(pivot) != FP_ZERO);
+
 				float scal = 1.0f/pivot;
 
 				status = cublasSscal(starpu_cublas_get_local_handle(),

+ 3 - 3
examples/lu/xlu_kernels.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009, 2010-2012, 2014-2016  Université de Bordeaux
+ * Copyright (C) 2009, 2010-2012, 2014-2017  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2015  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -512,7 +512,7 @@ static inline void STARPU_LU(common_u11_pivot)(void *descr[],
 					pivot = sub11[z+z*ld];
 				}
 			
-				STARPU_ASSERT(pivot != 0.0);
+				STARPU_ASSERT(fpclassify(pivot) != FP_ZERO);
 
 				CPU_SCAL(nx - z - 1, (1.0/pivot), &sub11[z+(z+1)*ld], ld);
 		
@@ -561,7 +561,7 @@ static inline void STARPU_LU(common_u11_pivot)(void *descr[],
 					cudaStreamSynchronize(stream);
 				}
 
-				STARPU_ASSERT(pivot != 0.0);
+				STARPU_ASSERT(fpclassify(pivot) != FP_ZERO);
 				
 				inv_pivot = 1.0/pivot;
 				status = CUBLAS_SCAL(handle,

+ 2 - 1
include/starpu_config.h.in

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2016  Université de Bordeaux
+ * Copyright (C) 2009-2017  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017  CNRS
  * Copyright (C) 2014, 2017  INRIA
  *
@@ -43,6 +43,7 @@
 #undef STARPU_SIMGRID_HAVE_XBT_BARRIER_INIT
 #undef STARPU_HAVE_SIMGRID_MSG_H
 #undef STARPU_HAVE_XBT_SYNCHRO_H
+#undef STARPU_HAVE_VALGRIND_H
 #undef STARPU_NON_BLOCKING_DRIVERS
 
 #undef STARPU_HAVE_ICC