Re: Как ускорить выделение большого куска памяти?
От: smeeld  
Дата: 16.11.14 16:42
Оценка: 4 (1) +1
Здравствуйте, Mazay, Вы писали:

M>Программа при запуске выделяет большой кусок памяти (512 ГБ) под массив double-ов. Сейчас это делается вот так:

M>vector <double> vect(N);
M>Это занимает около 10 минут времени при 100% загрузке одного ядра.

Когда делаете так vector <double> vect(N); запускается это

template<typename _ForwardIterator, typename _Size, typename _Allocator>
  void
  __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
  _Allocator& __alloc)
  {
  _ForwardIterator __cur = __first;
  __try
  {
  typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
  for (; __n > 0; --__n, ++__cur)
  __traits::construct(__alloc, std::__addressof(*__cur));
  }
  __catch(...)
  {
  std::_Destroy(__first, __cur, __alloc);
  __throw_exception_again;
  }
 }


что быстро выполнится при больших N не может.

M>Можно ли как-то ускорить это дело? Распараллелить например. Что там вообще менеджер кучи так долго делает?


Да, делайте просто malloc() без этих stl дурковатостей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.