Модераторы: Daevaorn

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помогите отстоять честь С++, Я что-то не пойму... 
:(
    Опции темы
Coocky
  Дата 4.10.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Код

#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
inline void QuickSort(long* A, long L, long R)
{ 

  long i, j; 

  long x, t; 

  

  while (L < R) 

    { 

    x = A[L]; 

    i = L, j = R; 

    while (i <= j) 

      { 

      while (A[i] < x) i++; 

      while (x < A[j]) j--; 

      if (i <= j) 

        t = A[i], A[i] = A[j], A[j] = t, 

        i++, j--; 

      } 

    if ((j - L) > (R - i)) 

      QuickSort(A, i, R), R = j; 

    else 

      QuickSort(A, L, j), L = i; 

    } 

  } 

int _tmain(int argc, _TCHAR* argv[])
{

//srand( (unsigned)time( NULL ) );

printf( "New memory...Please wait..\n" );

const long size = 39999996;
    long *pa = new long [size];
    if (pa==0)
    {
         
        return 0;
    }
   // for(long i=0;i<size;i++)
   // {
     //   pa[i]=(rand()%32766+1)*1000-(rand()%32766+1);
        
   // }
    printf( "New memory is Ok!!!\n" );
    printf( "insert path to file!!!\n" );
    char buf[100];
   cin.getline(&buf[0], 99);

FILE*stream;

if( ( stream= fopen( buf, "r+b" )) != NULL )

   {
     printf( "Please wait! Open your file!!!\n" );
     
       for(long i=0;i<size;i++)
    {
       fread( &pa[i], sizeof( long ), size, stream );
       
    }
      
      fclose( stream );
      printf( "Ok! I'm reading your file!!!\n" );

   }
else
{
printf( "I don't open your file!!!\n" );


}



long t1 = clock();

QuickSort(pa,0,39999995);

long t2 = clock();

double duration = (double)(t2 - t1) / CLOCKS_PER_SEC;
   printf( "Sort array %.4f seconds\n", duration );

/*for(long i=0;i<39999996;i++)
  
{
//Для тех ,кто не верит:-)
    printf("\n Ups-s-s-s! %d \n", massiv[i]);


    }
*/
   delete[]pa;
    return 0;
}


И мне JAVи_сты говорят, что у них читает файл за 0.9 секунд.. smile
А ну гляньте-либо они лапшу вешают, либо я ошибку допустил...
Добавлено @ 16:30
Программа готова к употреблению, разкомментируйте строки для заполнения массивва и добавте запись, для проверки..
Это если кто потестить хочет smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mayk
Дата 4.10.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Coocky @ 4.10.2005, 20:23)
      for(long i=0;i<size;i++)
    {
      fread( &pa[i], sizeof( long ), size, stream );
    }

ты уверен в правильности кода?
может хватило бы
fread(pa,sizeof(long),size,stream);?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Void
Дата 4.10.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Coocky @ 4.10.2005, 18:23)
    long *pa = new long [size];
    if (pa==0)

Вообще говоря, new при неудаче должен выбрасывать std::bad_alloc, а не возвращать NULL. То, что VC 6 поступает иначе, это ее проблемы.
Цитата(Coocky @ 4.10.2005, 18:23)
      for(long i=0;i<size;i++)
    {
      fread( &pa[i], sizeof( long ), size, stream );
     
    }

А зачем size раз читать весь массив, да еще выходя при этом за пределы выделенной памяти?
Код
fread(pa, sizeof(long), size, stream);

достаточно.

Цитата(Coocky @ 4.10.2005, 18:23)
И мне JAVи_сты говорят, что у них читает файл за 0.9 секунд.. smile

У них, наверное, быстрые винты smile Потому что у меня этот процесс после вышеуказанной поправки занимает 0.4-0.5 с.
Добавлено @ 17:03
Mayk
Опередил...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
maxim1000
Дата 4.10.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
39999996

хм...
40000000*4=160М...
0.9с...
получается 176Мбайт/с
несколько сомнительно...

особенно если учесть, что простое копирование заняло несколько десятков секунд...
может, стоит на Java написать программку для копирования файлов... вряд ли она будет работать дольше 1.8с...


--------------------
qqq
PM WWW   Вверх
En_t_end
Дата 4.10.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Void
Цитата(Void @ 4.10.2005, 21:02)
ообще говоря, new при неудаче должен выбрасывать std::bad_alloc, а не возвращать NULL. То, что VC 6 поступает иначе, это ее проблемы.

Не совсем... по стандарту:
Цитата
The Standard also defines an exception-free version of operator new, which returns a NULL pointer in case of a failure rather than throwing an exception. This version of new takes an additional argument named nothrow. For example

в данном случае нужно делать так...
sometype *somepointer = new(nothrow) sometype;
PM MAIL ICQ Skype GTalk Jabber   Вверх
Void
Дата 4.10.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



En_t_end
Я имел в виду поведение new по умолчанию.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
En_t_end
Дата 4.10.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Void
Цитата(Void @ 4.10.2005, 21:38)
Я имел в виду поведение new по умолчанию.

Это то понятно smile но исправить на new(nothrow) нужно в данном случае обязательно... или тогда исключение ловить.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Coocky
Дата 4.10.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Да пофиг исключения!
Я за чтение говорил smile smile
Void
Цитата(Void @ 4.10.2005, 17:02)

А зачем size раз читать весь массив, да еще выходя при этом за пределы выделенной памяти?

Да вроде пробовал, не получилось без цикла smile
Я на скорую руку писал, переключаясь из проекта в проект на работе, может за проверкой и допустил ошибку...которую не заметил и посчитал неправильность работы smile
С исправлением читает секунд 5.. smile
Неужели Жаба делает? smile Или просто масло в огонь Джависты подливают.
Кстати гляньте тесты, они с нами нога в ногу, мерзавцы... smile smile
Что б еще придумать? smile

Это сообщение отредактировал(а) Coocky - 4.10.2005, 22:00


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
LSD
Дата 4.10.2005, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



Цитата(Coocky @ 4.10.2005, 17:23)
И мне JAVи_сты говорят, что у них читает файл за 0.9 секунд..

Ошибочка за 0.5 smile

На самом деле там так: первый запуск (после перезагрузки) 25.2, а дальше 0.5. В первом случае явно все упирается в диск, а во втором память (270 Мбайт/сек, пределу для DDR333).

Цитата(Coocky @ 4.10.2005, 22:58)
Кстати гляньте тесты, они с нами нога в ногу, мерзавцы...

Попрошу без оскарблений smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxim1000
Дата 5.10.2005, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Неужели Жаба делает?

а почему бы и нет? smile
просто на таких простых задачах, как переписывание туда-сюда целых чисел абсолютно не проявляются различия двух языков (или платформ - тут уж кому как нравится)
в этом смысле они, можно сказать, одинаковы
ну разве что Java таскает кусок компилятора с собой (ну не совсем с собой)... а так - тоже самое smile
+ конечно же оптимизация под конкретную систему... впрочем, об этом уже говорили в соответствующей теме...

реальное различие между этими двумя технологиями - сборка мусора (это я говорю с высоты своего незнания Java smile), а в этом тесте она не задействована...

P.S. а то что тот же самый файл можно прочитать во второй раз быстрее... не уверен, что это - преимущество, память тратится, а то, что подряд будет несколько раз сортироваться один и тот же файл - вряд ли (это я говорю касательно этого случая)


--------------------
qqq
PM WWW   Вверх
LSD
Дата 5.10.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



Цитата(maxim1000 @ 5.10.2005, 02:58)
просто на таких простых задачах, как переписывание туда-сюда целых чисел абсолютно не проявляются различия двух языков (или платформ - тут уж кому как нравится)

Платформа тут вообще не причем, так как копирование осуществляется native кодом (вообще там используются memory-mapped file).

И вообще время загрузки я привел просто для сравнения, первоначальный вариант программы 5 минут грузил ядро на 100% и так и не смог загрузить данные smile . А тестировать будем сортировку массива.
Если у Си такие проблемы по работе с файлами, мы можем сами загрузить данные и передать их в вашу функцию в качестве аргумента ;)

Цитата(maxim1000 @ 5.10.2005, 02:58)
реальное различие между этими двумя технологиями - сборка мусора (это я говорю с высоты своего незнания Java ), а в этом тесте она не задействована...

В той теме ранее был тест где это можно было бы проверить, но никто из сишников не взялся перевести его на С++.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxim1000
Дата 5.10.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Платформа тут вообще не причем, так как копирование осуществляется native кодом (вообще там используются memory-mapped file).

упс... я тут уже говорил про сортировку
ошибся маленько...


--------------------
qqq
PM WWW   Вверх
cardinal
Дата 5.10.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Название темы должно отражать ее суть!


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
ssp
Дата 24.10.2005, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.9.2005

Репутация: нет
Всего: нет



Хм. У меня получились несколько другие соотношения. Я сравнивал время сортировки с size уменьшенным на порядок, т.к. иначе получалось слишком долго (сравнивал на домашнем компьютере).

На openwatcom без оптимизации у меня получилось 2.9сек, с оптимизацией 2.45. В то время как на java 2.5сек.
Вообще то все равно обидное соотношение smile Но код скомпилированный gcc 3.4 mingw32 исполнялся всего около 1.2 сек.
Т.е. у меня получилось, что java в два раза медленнее на данной задачи.
Но меня волнует другой вопрос, почему такая разница в скорости кода между openwatcom и gcc?

PM MAIL ICQ   Вверх
srd
Дата 24.10.2005, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Цитата(ssp @ 24.10.2005, 13:13)
Но меня волнует другой вопрос, почему такая разница в скорости кода между openwatcom и gcc?

Потому что Watcom - очень старый компилятор и практически не развивается с середины 90-х годов. За это время другие компиляторы сильно продвинулись вперёд. Насколько я знаю, команда OpenWatcom ещё глобальных изменений в старенький Watcom не вносила.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.