Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 14:37     Быстрее чем цикл #1
Доброго времени уток дорогие форумчане.

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

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

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

Зарание огороменное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 14:37     Быстрее чем цикл
Посмотрите здесь:

C++ Правда что С быстрее чем С++?
Что работает быстрее? C++
Sin быстрее чем из math.h C++
C++ double быстрее всех?
Что работает быстрее? C++
Как быстрее? C++
C++ Умножение - что быстрее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
18.11.2012, 14:41     Быстрее чем цикл #2
попробуй писать весь буфер через ReadFile/WriteFile, но я не знаю, отличаются ли они по скорости
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 14:59  [ТС]     Быстрее чем цикл #3
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 16:21     Быстрее чем цикл #4
Цитата Сообщение от cactus09 Посмотреть сообщение
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
У Вас там какие-то супер действия происходят с переменными?
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:27  [ТС]     Быстрее чем цикл #5
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
18.11.2012, 16:36     Быстрее чем цикл #6
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Очень странно. Если читать такие небольшие файлы целиком, не может быть так медленно.
Я правильно понял: просто читаются два файла, xor'ятся, результат пишется в третий?
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:38  [ТС]     Быстрее чем цикл #7
Somebody, Правильно поняли
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 16:39     Быстрее чем цикл #8
Цитата Сообщение от cactus09 Посмотреть сообщение
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
Может Вы сами что-то не так делаете?
Потому что что-то слишком медленно.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 16:44     Быстрее чем цикл #9
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками. Но вот если весь файл в массив не влезет, то не потеряешь ли на вспомогательных операциях? А такой вариант надо предусмотреть.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 16:45     Быстрее чем цикл #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками.
Поддерживаю! По одному байту читать и писать - это зверство.
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 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 МБ - выполняется моментально.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 17:23     Быстрее чем цикл
Еще ссылки по теме:

Какой swap быстрее? C++
C# работает быстрее чем С++ C++
Почему цикл while выполняет здесь больше итераций чем нужно? C++
C++ Быстрее ли localMember чем this->localMember?
C++ C программа компилируется быстрее чем C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 17:23     Быстрее чем цикл #12
Цитата Сообщение от Somebody Посмотреть сообщение
Читать по одному байту - смотря чем. ReadFile'ом - конечно, не айс, а сишные/плюсовые/билдеровские средства должны сами буферизацией заниматься.
Какой буферизацией? О чём речь? Загрузку исполняет сам винт через DMA, а эта железяка тупая. И при повторном обращении будет опять грузить.
Yandex
Объявления
18.11.2012, 17:23     Быстрее чем цикл
Ответ Создать тему
Опции темы

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