0

I am trying to use stxxl in windows 7 - MSVC12 Express.

  1. If I do not give the config file (.stxxl.txt): the program initiates by

    [STXXL-MSG] STXXL v1.4.0 (prerelease/) [STXXL-ERRMSG] Warning: no config file found. [STXXL-ERRMSG] Using default disk configuration. [STXXL-MSG] Disk 'C:\Users\Owner\AppData\Local\Temp\stxxl.tmp' is allocated, spa ce: 1000 MiB, I/O implementation: wincall autogrow delete_on_exit queue=0

    but goes through a long cycle before it throws error -

    "Microsoft C++ exception: std::bad_alloc at memory location 0x0028DF50"

  2. If I include config file (.stxxl.txt) with 'disk=c:/stxxl.tmp,4G,wincall delete' entry: I get error

    [STXXL-MSG] STXXL v1.4.0 (prerelease/) [STXXL-MSG] CreateFile() error on path=c:\stxxl.tmp mode=28, retrying without DI RECT mode. [STXXL-MSG] Error allocating disk 'c:\stxxl.tmp', space: 3814 MiB, I/O implement ation: wincall delete_on_exit queue=0

  3. Additional information:

    a.

    Only stxxl specific information in headers i use is: #include

    b. It does not hit main - as I put a breakpoint in the first line there.

I am trying to learn this by running on a Windows m/c with 4 GB memory. I am new to this, can you help?

Thanks in Advance.

02/23/14: Below is an example with the declarations in the test_vector example of STXXL (my declaration causing error is added to test_vector.cpp of STXXL that works well. This gives error as above even before it goes into main. That happens when I declare 'vector E' in the code.

 /***************************************************************************
 *  tests/containers/test_vector.cpp
 *
 *  Part of the STXXL. See http://stxxl.sourceforge.net
 *
 *  Copyright (C) 2002, 2003, 2006 Roman Dementiev <dementiev@mpi-sb.mpg.de>
 *  Copyright (C) 2010 Johannes Singler <singler@kit.edu>
 *
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or copy at
 *  http://www.boost.org/LICENSE_1_0.txt)

 * MODIFIED A BIT BY ME TO INDICATE MY PROBLEM
 **************************************************************************/

//! \example containers/test_vector.cpp
//! This is an example of use of \c stxxl::vector and
//! \c stxxl::VECTOR_GENERATOR. Vector type is configured
//! to store 64-bit integers and have 2 pages each of 1 block

       #include <iostream>
       #include <algorithm>
       #include <stxxl/vector>
       #include <stxxl/scan>

//the includes that are not showing properly are iostream, algorithm, stxxl/vector and stxxl/scan

// I added code till I indicate that again with comment  

    struct R1 {
            float S1;    
        float S2;   
        float S3;            
        float S4;   
        float S5;           
        char S6[2]; 
        float S7;
        char S8[15];
        double S9; 
        }; 

    struct G11{

    float A; 
    float B;           
    float C; 
    float D;           
    stxxl::vector<R1> R;
    }; 

     struct E1{
    char S11[80];
    int N11;
    stxxl::vector<G11> G; 
     }; 

        typedef stxxl::VECTOR_GENERATOR<E1>::result vector;
        vector E;

//finish elements I added above where the error is

      struct element  // 24 bytes, not a power of 2 intentionally
      {
    stxxl::int64 key;
    stxxl::int64 load0;
    stxxl::int64 load1;

    element& operator = (stxxl::int64 i)
    {
        key = i;
        load0 = i + 42;
        load1 = i ^ 42;
        return *this;
    }

    bool operator == (const element& e2) const
    {
        return key == e2.key && load0 == e2.load0 && load1 == e2.load1;
    }
    };

    struct counter
    {
       int value;
       counter(int v) : value(v) { }
       int operator () ()
    {
        int old_val = value;
        value++;
        return old_val;
    }
    };

    template <class my_vec_type>
    void test_const_iterator(const my_vec_type& x)
    {
    typename my_vec_type::const_iterator i = x.begin();
    i = x.end() - 1;
    i.block_externally_updated();
    i.flush();
    i++;
    ++i;
    --i;
    i--;
    *i;
    }

    void test_vector1()
     {
      // use non-randomized striping to avoid side effects on random generator
    typedef stxxl::VECTOR_GENERATOR<element, 2, 2, (1024* 1024), stxxl::striping>::result vector_type;
    vector_type v(32 * 1024 * 1024 / sizeof(element));

    // test assignment const_iterator = iterator
    vector_type::const_iterator c_it = v.begin();
    STXXL_UNUSED(c_it);

    unsigned int big_size = 2 * 32 * 1024 * 1024;
    typedef stxxl::vector<double> vec_big;
    vec_big my_vec(big_size);

    vec_big::iterator big_it = my_vec.begin();
    big_it += 6;

    test_const_iterator(v);

    stxxl::random_number32 rnd;
    int offset = rnd();

    STXXL_MSG("write " << v.size() << " elements");

    stxxl::ran32State = 0xdeadbeef;
    vector_type::size_type i;

    // fill the vector with increasing sequence of integer numbers
    for (i = 0; i < v.size(); ++i)
    {
        v[i].key = i + offset;
        STXXL_CHECK(v[i].key == stxxl::int64(i + offset));
    }


    // fill the vector with random numbers
    stxxl::generate(v.begin(), v.end(), stxxl::random_number32(), 4);
    v.flush();

    STXXL_MSG("seq read of " << v.size() << " elements");

    stxxl::ran32State = 0xdeadbeef;

    // testing swap
    vector_type a;
    std::swap(v, a);
    std::swap(v, a);

    for (i = 0; i < v.size(); i++)
        STXXL_CHECK(v[i].key == rnd());

    // check again
    STXXL_MSG("clear");

    v.clear();

    stxxl::ran32State = 0xdeadbeef + 10;

    v.resize(32 * 1024 * 1024 / sizeof(element));

    STXXL_MSG("write " << v.size() << " elements");
    stxxl::generate(v.begin(), v.end(), stxxl::random_number32(), 4);

    stxxl::ran32State = 0xdeadbeef + 10;

    STXXL_MSG("seq read of " << v.size() << " elements");

    for (i = 0; i < v.size(); i++)
        STXXL_CHECK(v[i].key == rnd());

    STXXL_MSG("copy vector of " << v.size() << " elements");

    vector_type v_copy0(v);
    STXXL_CHECK(v == v_copy0);

    vector_type v_copy1;
    v_copy1 = v;
    STXXL_CHECK(v == v_copy1);
    }

//! check vector::resize(n,true)

         void test_resize_shrink()
         {
    typedef stxxl::VECTOR_GENERATOR<int, 2, 4, 4096>::result vector_type;
    vector_type vector;

    int n = 1 << 16;
    vector.resize(n);

    for (int i = 0; i < n; i += 100)
        vector[i] = i;

    vector.resize(1, true);
    vector.flush();
    }

        int main()
    {
    test_vector1();
    test_resize_shrink();

    return 0;
    }

// forced instantiation

                template struct stxxl::VECTOR_GENERATOR<element, 2, 2, (1024* 1024), stxxl::striping>;
    template class stxxl::vector<double>;
    template class stxxl::vector_iterator<double, STXXL_DEFAULT_ALLOC_STRATEGY,          stxxl::uint64, stxxl::int64, STXXL_DEFAULT_BLOCK_SIZE(double), stxxl::lru_pager<8>, 4>;
    template class stxxl::const_vector_iterator<double, STXXL_DEFAULT_ALLOC_STRATEGY,      stxxl::uint64, stxxl::int64, STXXL_DEFAULT_BLOCK_SIZE(double), stxxl::lru_pager<8>, 4>;

//-tb bufreader instantiation work only for const_iterator!

        typedef stxxl::vector<double>::const_iterator const_vector_iterator;
    template class stxxl::vector_bufreader<const_vector_iterator>;
    template class stxxl::vector_bufreader_reverse<const_vector_iterator>;
    template class stxxl::vector_bufreader_iterator<stxxl::vector_bufreader<const_vector_iterator> >;

    typedef stxxl::vector<double>::iterator vector_iterator;
    template class stxxl::vector_bufwriter<vector_iterator>;
  • The above question somehow does not take this information: the #include is the only stxxl specific include I use. – user3319630 Feb 17 '14 at 18:35
  • I say much about your problem, since you dont provide more information than "it breaks". Try to create a minimal program which creates this issue. The 2. may be due to c:\ being read-only? – Timo Bingmann Feb 18 '14 at 09:15
  • @TimoBingmann Yes, you are right, it was not read only (may be it needed Admin access or something), that got solved by using another folder. But the problem #1 returned after solving this problem. Also, (i) it was Debug, Win32, (ii) I just wanted to use the stxxl vector as I had to store large amount of information while processing, so testing stxxl as a solution - is that sufficient information - my first attempt at posting a question at StackOverflow as well. – user3319630 Feb 18 '14 at 17:06
  • Here is an example of how I am trying to use: – user3319630 Feb 23 '14 at 18:54

0 Answers0