Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
#1

Быстрее чем цикл - C++

18.11.2012, 14:37. Просмотров 466. Ответов 11
Метки нет (Все метки)

Доброго времени уток дорогие форумчане.

Интересует вот какая штуковина, допусти есть программа которая открывает два файла, смотрит на них, и исходя из каких то своих умозаключений создает 3ий файл. Я подобную задачу решал так - открывал два файла на чтение и один на открытие, потом чикл считовал по одному байту в int от одного файла и в int от другого (те запись не в массив а всего в одну переменную), потом в нем что-то с этими двумя перременными происходило и это значение писалось в 3ию перременную, а та уже записовалась в 3ий файл.

Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.

Как осуществить эту задачу действительно быстро?

Зарание огороменное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 14:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрее чем цикл (C++):

C# работает быстрее чем С++ - C++
имеется файл типа 6 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0...

Sin быстрее чем из math.h - C++
ребят, вообщем мне задали написать программу которая считала синус быстрее чем из math.h ) скорость должна достигаться путем потери...

Правда что С быстрее чем С++? - C++
Имеется в виду на исполнении, а не на момент компиляции... Наверняка такая тема уже была, но я не нашёл, если дадите ссылку также буду...

C программа компилируется быстрее чем C++ - C++
Почему программа на C компилируется быстрее чем на С++?

Почему матрица на вектор умножается быстрее чем вектор на матрицу? - C++
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? - C++
Здравствуйте! Есть два варианта передачи некоторой переменной типа "указатель на функцию" в класс - через параметр шаблона и просто с...

11
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,282
Записей в блоге: 1
18.11.2012, 14:41 #2
попробуй писать весь буфер через ReadFile/WriteFile, но я не знаю, отличаются ли они по скорости
1
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 14:59  [ТС] #3
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:21 #4
Цитата Сообщение от cactus09 Посмотреть сообщение
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
У Вас там какие-то супер действия происходят с переменными?
1
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:27  [ТС] #5
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
18.11.2012, 16:36 #6
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Очень странно. Если читать такие небольшие файлы целиком, не может быть так медленно.
Я правильно понял: просто читаются два файла, xor'ятся, результат пишется в третий?
1
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:38  [ТС] #7
Somebody, Правильно поняли
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:39 #8
Цитата Сообщение от cactus09 Посмотреть сообщение
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
Может Вы сами что-то не так делаете?
Потому что что-то слишком медленно.
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 16:44 #9
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками. Но вот если весь файл в массив не влезет, то не потеряешь ли на вспомогательных операциях? А такой вариант надо предусмотреть.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:45 #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками.
Поддерживаю! По одному байту читать и писать - это зверство.
1
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
18.11.2012, 17:19 #11
Читать по одному байту - смотря чем. ReadFile'ом - конечно, не айс, а сишные/плюсовые/билдеровские средства должны сами буферизацией заниматься.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int main()
{
    using namespace std;
    ifstream src0("src0", ios::in | ios::binary);
    ifstream src1("src1", ios::in | ios::binary);
    ofstream dst("dst", ios::out | ios::binary);
    char c0, c1;
    while (src0.get(c0) && src1.get(c1))
        dst.put(c0 ^ c1);
}
20 МБ - выполняется моментально.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 17:23 #12
Цитата Сообщение от Somebody Посмотреть сообщение
Читать по одному байту - смотря чем. ReadFile'ом - конечно, не айс, а сишные/плюсовые/билдеровские средства должны сами буферизацией заниматься.
Какой буферизацией? О чём речь? Загрузку исполняет сам винт через DMA, а эта железяка тупая. И при повторном обращении будет опять грузить.
0
18.11.2012, 17:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 17:23
Привет! Вот еще темы с ответами:

Быстрее ли localMember чем this->localMember? - C++
Здравствуйте! Интересует вопрос. Являются ли конструкции data и this-&gt;data эквивалентными с точки зрения генерируемого кода и...

Почему цикл while выполняет здесь больше итераций чем нужно? - C++
Не понимаю от чего здесь цикл выполняется 21 раз вместо 10. Притом если вместо i &lt; 10 написать i &lt;= 10 цикл выполняется 23 раза... ...

Почему код, написанный на С++, в разы быстрее работает с большим объемом памяти, чем с маленьким? - C++
Привет! Понадобилось мне сравнить скорость работы идентичных алгоритмов на Fortran и C++. Алгоритм - перемножение матриц. Решил...

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru