Boost::multi_array performance question

前端 未结 16 2150
不思量自难忘°
不思量自难忘° 2020-12-04 11:20

I am trying to compare the performance of boost::multi_array to native dynamically allocated arrays, with the following test program:

#include 

        
16条回答
  •  执念已碎
    2020-12-04 11:58

    I tested on a Snow Leopard Mac OS using gcc 4.2.1

    Debug:
    [Boost] Elapsed time:  2.268 seconds
    [Native]Elapsed time:  0.076 seconds
    
    Release:
    [Boost] Elapsed time:  0.065 seconds
    [Native]Elapsed time:  0.020 seconds
    

    Here, is the code (modified so that it can be compiled on Unix):

    #define BOOST_DISABLE_ASSERTS
    #include 
    #include 
    
    int main(int argc, char* argv[])
    {
        const int X_SIZE = 200;
        const int Y_SIZE = 200;
        const int ITERATIONS = 500;
        unsigned int startTime = 0;
        unsigned int endTime = 0;
    
        // Create the boost array
        typedef boost::multi_array ImageArrayType;
        ImageArrayType boostMatrix(boost::extents[X_SIZE][Y_SIZE]);
    
        // Create the native array
        double *nativeMatrix = new double [X_SIZE * Y_SIZE];
    
        //------------------Measure boost----------------------------------------------
        startTime = clock();
        for (int i = 0; i < ITERATIONS; ++i)
        {
            for (int y = 0; y < Y_SIZE; ++y)
            {
                for (int x = 0; x < X_SIZE; ++x)
                {
                    boostMatrix[x][y] = 2.345;
                }
            }
        }
        endTime = clock();
        printf("[Boost] Elapsed time: %6.3f seconds\n", (endTime - startTime) / (double)CLOCKS_PER_SEC);
    
        //------------------Measure native-----------------------------------------------
        startTime = clock();
        for (int i = 0; i < ITERATIONS; ++i)
        {
            for (int y = 0; y < Y_SIZE; ++y)
            {
                for (int x = 0; x < X_SIZE; ++x)
                {
                    nativeMatrix[x + (y * X_SIZE)] = 2.345;
                }
            }
        }
        endTime = clock();
        printf("[Native]Elapsed time: %6.3f seconds\n", (endTime - startTime) / (double)CLOCKS_PER_SEC);
    
        return 0;
    }
    

提交回复
热议问题