X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Testing%2FTestInline.cxx;h=b78e094b87198c8b97126bf3efc88aa2795e858c;hb=359ebc818c100156bd8f7a3a8783f2c538474990;hp=8a0dec653bac1f2f1c55b71c4d3536fdf58e2f20;hpb=773706a0e77a31dcc20b4ef95b54158db9a76a34;p=gdcm.git diff --git a/Testing/TestInline.cxx b/Testing/TestInline.cxx index 8a0dec65..b78e094b 100755 --- a/Testing/TestInline.cxx +++ b/Testing/TestInline.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: TestInline.cxx,v $ Language: C++ - Date: $Date: 2005/11/17 17:44:24 $ - Version: $Revision: 1.8 $ + Date: $Date: 2005/11/29 13:02:44 $ + Version: $Revision: 1.10 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -30,24 +30,22 @@ // Which CXX_FLAGS, LINKER_FLAGS, ..., must we set to see the difference? #include "gdcmUtil.h" -#include "TestInLine.h" -#include -#include -#ifdef CMAKE_HAVE_SYS_TIMES_H #include -#else -#include -#endif +#include void frswap (double &a, double &b); void fpswap (double *a, double *b); inline void ifrswap(double &a, double &b); inline void ifpswap(double *a, double *b); -uint16_t passDirect(uint16_t a, uint16_t b); -uint16_t passRef(uint16_t &a, uint16_t &b); -uint16_t passPtr(uint16_t *a, uint16_t *b); +uint8_t passDirect8(uint8_t a, uint8_t b); +uint8_t passRef8(uint8_t &a, uint8_t &b); +uint8_t passPtr8(uint8_t *a, uint8_t *b); + +uint16_t passDirect16(uint16_t a, uint16_t b); +uint16_t passRef16(uint16_t &a, uint16_t &b); +uint16_t passPtr16(uint16_t *a, uint16_t *b); uint32_t passDirect32(uint32_t a, uint32_t b); uint32_t passRef32(uint32_t &a, uint32_t &b); @@ -60,7 +58,7 @@ double passPtr(double *a, double *b); #define \ mswap(a, b) \ { \ - tmp = a; \ + double tmp = a; \ a = b; \ b = tmp; \ } @@ -114,15 +112,41 @@ uint32_t passDirect32(uint32_t a, uint32_t b) } -uint16_t passRef(uint16_t &a, uint16_t &b) +uint16_t passRef16(uint16_t &a, uint16_t &b) +{ + return a + b; +} +uint16_t passPtr16(uint16_t *a, uint16_t *b) +{ + return *a + *b; +} +uint16_t passDirect16(uint16_t a, uint16_t b) +{ + return a + b; +} + +uint8_t passRef8(uint8_t &a, uint8_t &b) +{ + return a + b; +} +uint8_t passPtr8(uint8_t *a, uint8_t *b) +{ + return *a + *b; +} +uint8_t passDirect8(uint8_t a, uint8_t b) +{ + return a + b; +} + +float passRefFloat(float &a, float &b) { return a + b; } -uint16_t passPtr(uint16_t *a, uint16_t *b) +float passPtrFloat(float *a, float *b) { return *a + *b; } -uint16_t passDirect(uint16_t a, uint16_t b) +float passDirectFloat(float a, float b) { return a + b; } @@ -149,15 +173,36 @@ int TestInline(int argc, char *argv[]) if (argc > 1) nbLoop = atoi(argv[1]); else - nbLoop = 10000000; + nbLoop = 500000000; //clock_t r1, r2; struct tms tms1, tms2; double a = 1, b = 2; - double tmp; - uint16_t x=1, y=2; + uint8_t x8 =1, y8 =2; + uint16_t x16=1, y16=2; + uint32_t x32=1, y32=2; + float fx =1.0f, fy=1.0f; + double dx =1.0 , dy=1.0; + // ---------------------------------------- + + std::cout << "Direct "<< std::endl; + //r1 = times(&tms1); + times(&tms1); + for(i = 0 ; i< nbLoop ; i++) + { + double tmp; + tmp=a; + a=b; + b=tmp; + } + //r2 = times(&tms2); + times(&tms2); + std::cout + << (long) ((tms2.tms_utime) - (tms1.tms_utime)) + << std::endl; + // ---------------------------------------- std::cout << "Use a macro "<< std::endl; @@ -238,14 +283,14 @@ int TestInline(int argc, char *argv[]) //To check the 2 following cases, we just put the two 'static' functions //hifpswap and hNoifpswap in gdcmUtil.h - std::cout << "Use inline, .h defined, WITH inline keyword pointer function" + std::cout << "Use inline, .h defined, WITH inline keyword pointer method" << std::endl; //r1 = times(&tms1); + gdcm::Util util; times(&tms1); for(i = 0 ; i< nbLoop ; i++) { - //gdcm::Util::hifpswap (&a, &b); - hifpswap (&a, &b); + util.hifpswap (&a, &b); } //r2 = times(&tms2); times(&tms2); @@ -256,14 +301,62 @@ int TestInline(int argc, char *argv[]) // ---------------------------------------- - std::cout << "Use inline, .h defined, NO inline keyword pointer function" + std::cout << "Use inline, .h defined, NO inline keyword pointer method" << std::endl; //r1 = times(&tms1); times(&tms1); for(i = 0 ; i< nbLoop ; i++) { - //gdcm::Util::hNoifpswap (&a, &b); - hNoifpswap (&a, &b); + util.hNoifpswap (&a, &b); + } + //r2 = times(&tms2); + times(&tms2); + std::cout + << (long) ((tms2.tms_utime) - (tms1.tms_utime)) + << std::endl; + + // ---------------------------------------- + + std::cout << "Use , .h defined, NO inline keyword pointer method" + << std::endl; + //r1 = times(&tms1); + times(&tms1); + for(i = 0 ; i< nbLoop ; i++) + { + util.hfpswap (&a, &b); + } + //r2 = times(&tms2); + times(&tms2); + std::cout + << (long) ((tms2.tms_utime) - (tms1.tms_utime)) + <