diff options
author | Zhigang Gong <zhigang.gong@intel.com> | 2013-12-11 13:40:51 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2013-12-16 09:20:46 +0800 |
commit | 625d5aa18446206cd6a00a52d8a2094948fd9d93 (patch) | |
tree | d8e71909e55cd012591472b93e5e5825d97df21d /utests/utest.hpp | |
parent | 4957110d5238b999c78b382bb1bf92092757447f (diff) | |
download | beignet-625d5aa18446206cd6a00a52d8a2094948fd9d93.tar.gz |
Accelerate utest.
For some test cases which include more than one kernel, the current
implementation always build the program for a new sub test case.
That wastes a lot of time. This patch introduce a new macro
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM which has an extra parameter
to specify whether to keep the previous program and avoid the extra
build. The normal usage is:
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(fn1, true);
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(fn2, true);
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(fn3, true);
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(fn4, true);
MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(fn5, false);
The scenario is that the above fn1-5 are included in the same kernel
file and we define the sub cases in the same cpp file. We already
have some examples of this usage in the compiler_abs.cpp, compiler_abs_diff.cpp
compiler_basic_arithmetic.cpp, compiler_vector_load_store.cpp, etc.
This patch reduces 2/3 of the utests execution time.
v2: should always destroy the program when run one specific test case.
Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>
Reviewed-by: "Song, Ruiling" <ruiling.song@intel.com>
Diffstat (limited to 'utests/utest.hpp')
-rw-r--r-- | utests/utest.hpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/utests/utest.hpp b/utests/utest.hpp index d3a6a6fa..01d4a8ce 100644 --- a/utests/utest.hpp +++ b/utests/utest.hpp @@ -39,13 +39,15 @@ struct UTest /*! Empty test */ UTest(void); /*! Build a new unit test and append it to the unit test list */ - UTest(Function fn, const char *name, bool haveIssue = false); + UTest(Function fn, const char *name, bool haveIssue = false, bool needDestroyProgram = true); /*! Function to execute */ Function fn; /*! Name of the test */ const char *name; /*! Indicate whether current test cases has issue to be fixes */ bool haveIssue; + /*! Indicate whether destroy kernels/program. */ + bool needDestroyProgram; /*! The tests that are registered */ static std::vector<UTest> *utestList; /*! Run the test with the given name */ @@ -61,6 +63,11 @@ struct UTest /*! Register a new unit test */ #define UTEST_REGISTER(FN) static const UTest __##FN##__(FN, #FN); +#define MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(FN, KEEP_PROGRAM) \ + static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \ + static const UTest __##FN##__(__ANON__##FN##__, #FN, false, !(KEEP_PROGRAM)); + + /*! Turn a function into a unit test */ #define MAKE_UTEST_FROM_FUNCTION(FN) \ static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \ |