Конференция "Начинающим" » ищу пример многопоточного копирования одного файла побайтно
 
  • [true]TRIx © (18.04.10 06:01) [0]
    используя массив под буфер ищи пример многопоточного копирования
  • Leonid Troyanovsky © (18.04.10 16:12) [1]

    > [true]TRIx ©   (18.04.10 06:01)  

    > используя массив под буфер ищи пример многопоточного копирования

    Ищи пример побуферного копирования.

    --
    Regards, LVT.
  • Демо © (18.04.10 17:45) [2]

    > ищу пример многопоточного копирования одного файла побайтно


    Тебе сколько потоков сделать?
  • Anatoly Podgoretsky © (18.04.10 19:00) [3]
    > [true]TRIx  (18.04.2010 06:01:00)  [0]

    Хочешь замедлить процесс копирования? Так есть более простые методы, без потоков
  • Anatoly Podgoretsky © (18.04.10 19:09) [4]
    Удалено модератором
  • Anatoly Podgoretsky © (18.04.10 19:09) [5]
    Удалено модератором
  • [true]TRIx © (19.04.10 02:24) [6]
    нужны потоки. так как читает в бфер и долго обрабатывает там данные, нужна максимальная загрузка. или это еще дольше будет работать?
  • [true]TRIx © (19.04.10 02:27) [7]
    1 берем кусок
    2 обрабатываем кусок, массив (долго)

    хотелось бы сравнить скорость в один поток и в несколько.
  • Германн © (19.04.10 02:37) [8]

    > [true]TRIx ©   (19.04.10 02:24) [6]
    >
    > нужны потоки. так как читает в бфер и долго обрабатывает
    > там данные

    В рамках одного локального компьютера? Имхо бред.
  • Германн © (19.04.10 02:40) [9]
    Процессор-то всё равно один.
    А если несколько, то это требует специального решения.
  • Eraser © (19.04.10 03:56) [10]
    > [7] [true]TRIx ©   (19.04.10 02:27)

    а в чем сложность то? создавай столько потоков, сколько имеется т.н. исполнительных потоков процессора.
  • Eraser © (19.04.10 03:56) [11]
    > [9] Германн ©   (19.04.10 02:40)

    intel core i7 - восемь исполнительных потоков.
  • sniknik © (19.04.10 07:10) [12]
    и восемь дисков, на которые копируется "один файл побайтно"?

    > Хочешь замедлить процесс копирования? Так есть более простые методы, без потоков
    +1
  • Sha © (19.04.10 09:32) [13]
    > нужны потоки. так как читает в бфер и долго обрабатывает там данные

    Ну так и обрабатывай параллельно.
    Причем тут параллельное чтение?
  • [true]TRIx © (19.04.10 09:38) [14]
    как сделать обработку под 2 процессора сразу, с максимальной загрузкой? можно инфу
  • Сергей М. © (19.04.10 09:39) [15]

    > [true]TRIx ©   (19.04.10 09:38) [14]

    SetThreadAffinityMask
  • Sha © (19.04.10 10:36) [16]
    > как сделать обработку под 2 процессора сразу

    Как создать 2 доп. потока описано в справке, примеры есть в папке Demos.

    С другой стороны, мне представляется маловероятным,
    что начинающий столкнулся с тяжелой вычислительной задачей.
    Интересно было бы узнать, что за задача такая?
  • brother © (19.04.10 10:49) [17]
    а многопоточность при чтении разве поможет?
  • DVM © (19.04.10 11:27) [18]
    Скорость чтения-записи на один поток была как то ограничена искусственно каким-либо факторами (по аналогии со скачиванием файла с сервера через Интернет), то многопоточное чтение-запись помогли бы. А так разницы не будет.
  • Демо © (19.04.10 12:40) [19]

    > brother ©   (19.04.10 10:49) [17]
    > а многопоточность при чтении разве поможет?


    Скорость чтения одного файла в любом случае ограничена возможностями железа. При чтении из нескольких потоков скорость будет замедлена, возникнут дополнительные накладные расходы.

    С другой стороны у автора конкретная задача, никак не связанная со скоростью именно копирования.


    > [true]TRIx ©   (19.04.10 02:24) [6]
    > нужны потоки. так как читает в бфер и долго обрабатывает
    > там данные, нужна максимальная загрузка. или это еще дольше
    > будет работать?


    Сделаю пример попозже.
  • Eraser © (20.04.10 01:50) [20]
    я так понял у автора данных не так уж и много, затык не скорости записи, а скорости обработки. пусть пояснит?
  • Демо © (20.04.10 01:55) [21]
    В формулировке автора реализация не так проста, как кажется.
    Всё равно добью пример - из принципа.
  • Германн © (20.04.10 02:05) [22]

    > Демо ©   (20.04.10 01:55) [21]
    >
    > В формулировке автора реализация не так проста, как кажется.
    >
    > Всё равно добью пример - из принципа.

    А какая у автора формулировка задачи?
    Сможет ли твой, Саша пример, помочь автору?
  • Демо © (20.04.10 02:21) [23]

    > > > В формулировке автора реализация не так проста, как
    > кажется.> > Всё равно добью пример - из принципа.А какая
    > у автора формулировка задачи?Сможет ли твой, Саша пример,
    >  помочь автору?


    Автору вряд ли сможет помочь полностью. Но автор хоть увидит, что овчинка выделки не стоит.
    А вот мозги тренировать и разминать их иногда полезно-)
    Я периодически берусь за какую-нибудь задачку и решаю.
    В данном случае нетривиальная логика - много факторов согласовать нужно.

    Ту задачу, которая прозвучала в первом постинге, вообще не так просто решить.
    Немудрено, что автор не нашёл примеров в интернете.

    Если посмотреть на задачу более абстрактно, то ТЗ можно изменить так:

    Есть некоторое количество источников данных и соответствующее им количество приёмников.
    Объём данных, которые необходимо транспортировать от каждого источника к приёмнику известен.

    Требуется обеспечить транспортировку данных из всех источников до приёмников с заданным ограничением количества объёма данных в единицу времени.

    Применения:
    - Cкачивание файлов из интернета с ограничением скорости (например, со скоростью не более 1Мбит/сек):
    - Фоновое резервное копирование данных в локальной сети, не перегружая её;
  • Германн © (20.04.10 02:47) [24]

    > Демо ©   (20.04.10 02:21) [23]

    Ну Саш. Я очень сильно сомневаюсь, что ты правильно угадал задачу автора.
    Если учесть [6], то я за Sha ©   (19.04.10 09:32) [13].
    И за Sha ©   (19.04.10 10:36) [16].

    Не хочется решать X, когда нужно решить Z.
  • QAZ (20.04.10 10:54) [25]
    Удалено модератором
  • [true]TRIx © (20.04.10 21:28) [26]
    Все проще. Мне надо максимум скорости в обработке.
    тс.

    есть файл, я его считываю допустим с кусками по 1 мб и затем обрабатываю

    скопировал кусок, теперь обрабатывается и пока не считывает другой кусок, при этом загрузка процессора маленькая и скорость обработки не устраивает.

    Вопрос такой: будет ли толк в потоках, в плане скорости обработки файла на максимум.
    тс
    считал кусок - обрабатываю, в это время другой поток считывает кусок и начинает обрабатывать.. и предположим таких 4 потока.

    Будет ли это быстрее.. или есть какие-то альтернативы?
  • [true]TRIx © (20.04.10 21:28) [27]
    Забыл сказать, файлики у меня не хилые, могут быть и по 10 и выше гигов.
  • Anatoly Podgoretsky © (20.04.10 21:57) [28]
    > [true]TRIx  (20.04.2010 21:28:26)  [26]

    Раз нагрузка на процессор низкая, то это значит лишь одно, что система чем то другим занимается, а не обработкой.
  • Leonid Troyanovsky © (20.04.10 22:20) [29]

    > [true]TRIx ©   (20.04.10 21:28) [26]

    > Будет ли это быстрее.. или есть какие-то альтернативы?

    8 процессоров, 16 потоков.
    Будет быстрее. Наверное.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.04.10 22:22) [30]

    > Anatoly Podgoretsky ©   (20.04.10 21:57) [28]

    > Раз нагрузка на процессор низкая, то это значит лишь одно,

    Тормозной диск :)

    --
    Regards, LVT.
  • Anatoly Podgoretsky © (20.04.10 22:44) [31]
    > Leonid Troyanovsky  (20.04.2010 22:22:30)  [30]

    Ну и как тогда помогут потоки, ведь процессор все равно не нагружен. Может над диском и дисковыми операциями надо работать, наверное.
  • Демо © (20.04.10 22:50) [32]

    > скопировал кусок, теперь обрабатывается и пока не считывает
    > другой кусок,


    Это обработка даёт низкий процент загрузки процессора или чтение с диска?
  • Leonid Troyanovsky © (20.04.10 22:53) [33]

    > Anatoly Podgoretsky ©   (20.04.10 22:44) [31]

    > не нагружен. Может над диском и дисковыми операциями надо
    > работать, наверное.

    Точно, выкинуть такой диск, на...верное :)

    --
    Regards, LVT.
  • Anatoly Podgoretsky © (20.04.10 23:24) [34]
    > Leonid Troyanovsky  (20.04.2010 22:53:33)  [33]

    И четырех процессорную машину с восьми ядерными ксеонами.
  • Германн © (21.04.10 01:21) [35]

    > Это обработка даёт низкий процент загрузки процессора или
    > чтение с диска?
    >

    А ты автору объясни как это узнать. Ибо он имхо "плавает" в теме. См. [27]
  • QAZ (21.04.10 13:02) [36]
    ну для начала могбы сказать какое время обработки тебя не устраивает

    с учетом того что средняя максимальная скорость чтения дисков примерно 40Мб\сек
    10 гиг быстрей чем за 250 сек ты не обработаеш в принципе

    а в данном случае будет возможно быстрей будет читать блоками по 10мб
  • Sha © (21.04.10 13:28) [37]
    > а в данном случае будет возможно быстрей будет читать блоками по 10мб

    Не будет.
  • QAZ (21.04.10 15:20) [38]

    > Не будет.

    считать 10раз по 1м дольше чем 1раз по 10м
  • Sha © (21.04.10 15:47) [39]
    > считать 10раз по 1м дольше чем 1раз по 10м

    считать 10 раз по 1м, производя вычисления с прочитанными данными,
    быстрее чем считать 10м, а потом все вычислить.
  • QAZ (21.04.10 15:53) [40]
    не логично :) в данном случае тормоз-диск, а не проц

    > при этом загрузка процессора маленькая
  • Sha © (21.04.10 16:03) [41]
    Логика умеет прекрасно объяснять наблюдаемые факты,
    но не так хорошо справляется с их предсказанием.
  • [true]TRIx © (23.04.10 05:00) [42]
    Еще раз. У меня 2 ядра, программа в диспетчере выполняется под 2мя ядрами (галки).

    Считывает куски по 512 кб, процессор загружен всего на 50% тс на одно ядро, меня такая скорость обработки не устраивает, пробовал ставить куски больше - результата нет. Я прекрасно понимаю, что диск тормозит процесс обработки. Хотелось бы включить обработку на всю мощь, не знаю как это задействовать. Обработка буфера достаточно тормозная, идет конвертирование..  стоит ли париться насчет потоков, или можно пример как подключить оба ядра на обработку всего этого дела. Думаю без разници, что я включу каким-то макаром второе ядро на полную загрузку, все равно оно не загрузится, так как чтение с диска будет делать паузу при загрузке процесса обработки буфера.
  • Демо © (23.04.10 10:57) [43]

    > все равно оно не загрузится, так как чтение с диска будет
    > делать паузу при загрузке процесса обработки буфера.


    Как раз в том случае, когда процесс чтения с диска занимает продолжительное время,обработка информации в дополнительном потоке увеличит общую скорость.
    Во время операции чтения/записи процессор вообще не загружен. Именно в это время возможно обрабатывать параллельно данные в памяти.
  • Sha © (23.04.10 15:06) [44]
    > [true]TRIx ©   (23.04.10 05:00) [42]
    > процессор загружен всего на 50% тс на одно ядро

    Как загружены ядра?
    первое - 0%, второе - 50%
    или
    первое - 0%, второе - 100%
  • Styx (23.04.10 15:39) [45]
    Думаю, что
    первое - 50%, второе - 50%
    Так будет, если специально affinity не выставлять.
 
Конференция "Начинающим" » ищу пример многопоточного копирования одного файла побайтно
Есть новые Нет новых   [134432   +19][b:0.001][p:0.002]