2009-05-15 4 views
195

Что означают термины «граница процессора» и «граница ввода-вывода»?Что означают термины «связанная с процессором» и «граница ввода-вывода»?

+0

Если память связана его проблема: http://stackoverflow.com/questions/11831844/unobservedtaskexception-being- throw-but-it-is-handled-by-a-taskscheduler-unobser? lq = 1 –

ответ

288

Это довольно интуитивно:

программы ЦП, если она будет идти быстрее, если процессор был быстрее, т.е. он проводит большую часть своего времени просто с помощью CPU (делая расчеты). Программа, которая вычисляет новые цифры π, обычно будет привязана к процессору, это просто хруст числа.

Программа связана с I/O, если она будет работать быстрее, если подсистема ввода-вывода будет работать быстрее. Какая конкретная система ввода-вывода подразумевается, может варьироваться; Обычно я ассоциирую его с диском. Программа, которая просматривает огромный файл для некоторых данных, часто связана с привязкой ввода/вывода, поскольку узким местом является считывание данных с диска.

22

Цементирование связано с недостатком процессора или центрального процессора, а I/O означает, что программа является узким местом ввода/вывода или ввода/вывода, например, чтения или записи на диск, сети и т. Д.

В целом, при оптимизации компьютерных программ, вы пытаетесь найти узкое место и устранить его. Знание того, что ваша программа связано с ЦП, помогает, так что никто не излишне оптимизирует что-то еще.

[И «узким местом», я имею в виду то, что делает ваша программа идти медленнее, чем в противном случае пришлось бы.]

8

Когда программа ждет I/O (то есть. Диск для чтения/записи или сетевого чтения/write и т. д.), процессор может выполнять другие задачи, даже если ваша программа остановлена. Скорость вашей программы будет в основном зависеть от того, насколько быстро может произойти IO, и если вы хотите ускорить ее, вам нужно будет ускорить ввод-вывод.

Если ваша программа запускает множество инструкций программы и не ждет ввода-вывода, то, как говорят, она связана с ЦП. Ускорение работы процессора ускорит выполнение программы.

В любом случае ключом к ускорению работы программы может быть не ускорение аппаратного обеспечения, а оптимизация программы для уменьшения объема ввода-вывода или процессора, в котором она нуждается, или для ее ввода/вывода, в то время как также делает интенсивный процессор.

15

Другой способ сформулировать ту же мысль:

  • Если ускорение процессора не ускорит вашу программу, это может быть связано I/O.

  • Если ускорение ввода-вывода (например, с использованием более быстрого диска) не помогает, ваша программа может быть связана с ЦП.

(я использовал «может быть», потому что нужно принимать другие ресурсы во внимание. Память один пример.)

163

CPU Bound означает скорость, при которой процесс прогрессирует ограничена скоростью процессора. Задача, выполняющая вычисления на небольшом наборе чисел, например умножение малых матриц, скорее всего, будет связана с ЦП.

Ограничение ввода-вывода означает, что скорость, с которой происходит процесс, ограничена скоростью подсистемы ввода-вывода. Задача, обрабатывающая данные с диска, например, подсчет количества строк в файле, скорее всего, будет связана с вводом-выводом.

Ограниченная память означает, что скорость, с которой происходит процесс, ограничена доступной объемной суммой и скоростью доступа к этой памяти. Задача, которая обрабатывает большие объемы данных памяти, например умножение больших матриц, скорее всего, будет привязана к памяти.

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

Ограничение ввода-вывода будет медленнее, чем привязка к памяти будет медленнее, чем Cache Bound будет медленнее, чем привязка к процессору.

Решение, связанное с привязкой к вводу/выводу, необязательно для получения дополнительной памяти. В некоторых ситуациях алгоритм доступа может быть разработан вокруг ограничений ввода-вывода, памяти или кэша. См. Cache Oblivious Algorithms.

0

I/O Bound процесс: - Если большая часть жизни процесса проводятся в I/O состояние, то процесс ая/о связанном process.example: -calculator, Internet Explorer

CPU Связанный процесс: - Если большая часть жизненного цикла процесса расходуется в CPU, то он связан с процессом cpu.

+7

Как бы калькулятор был связан с процессом привязки ввода-вывода? Конечно, это было бы связано с ЦП. Если ваш калькулятор тратит большую часть времени на блокировку доступа к сети или диску, я предлагаю, чтобы с ней что-то не так. – rickerbh

+3

Я думал, что пример калькулятора был ясен: большую часть времени он ждет, когда пользователь нажмет кнопку, таким образом, ждет ввода-вывода. – psp

3

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

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

3

Связанные процессы IO: тратить больше времени на IO, чем на вычисления, имеют много коротких всплесков процессора. CPU связаны процессы: тратить больше времени на выполнение вычислений, несколько очень долго CPU лопается

17

многопоточного является случаем, когда различие имеет значение, как описано на примерах ниже.

RAM I/O связанный пример: Vector Sum

Рассмотрим программу, которая суммирует все значения одного вектора:

#define SIZE 1000000 
unsigned int is[SIZE]; 
unsigned int sum = 0; 
size_t i = 0; 
for (i = 0; i < SIZE; i++) 
    /* Each one of those requires a RAM access! */ 
    sum += is[i] 

распараллеливание, что путем разделения массива одинаково для каждого из ваших ядра имеют ограниченную полезность на обычных современных настольных компьютерах. C++: https://github.com/cirosantilli/algorithm-cheat/blob/ea16f6bba12e7dcc32c0cbbbcdc74bcc2fd2d05b/src/cpp/interactive/sum_array_parallel.cpp

Протестировано на GCC 5.2.1, Ubuntu 15.10 с 4-ядерным процессором Intel i5-3210M, Lenovo T430. Примеры типичных результатов (переменные с многопоточности):

Time  N Threads Comment 
--------- ---------- -------- 
0.045962 none 
0.0487619 1   Worse than 0 threads because of startup overhead. 
0.0329526 2 
0.0302511 3 
0.0232993 4   Best time. Only about 2x as fast. 
0.0281021 5   Worse than 4 threads because we don't have 
         that many cores, which generate overhead. 

Расчет был не в 4 раза быстрее, как ожидалось, с помощью 4 потоков!

Причина это все процессоры совместно используют один шину памяти, связывающую к оперативной памяти:

CPU 1 --\  Bus +-----+ 
CPU 2 ---\__________| RAM | 
CPU 3 ---/   +-----+ 
CPU 4 --/ 

поэтому шина памяти быстро становится узким местом, а не CPU.

Это происходит потому, что добавление двух чисел принимает одиночный Цикл процессора, память считывает примерно 100 CPU cycles в 2016 году.

Таким образом, работа процессора за каждый бит входных данных слишком мала, и мы называем это процессом с привязкой к IO.

Единственный способ ускорить это вычисление - ускорить отдельные обращения к памяти с использованием нового аппаратного обеспечения памяти, например. Multi-channel memory.

Обновление до более быстрых часов ЦП, например, было бы не очень полезно.

Другие примеры

  • матрица умножения процессора переплете на оперативной памяти и графических процессоров. Вход содержит:

    2 * N**2 
    

    номера, но:

    N ** 3 
    

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

    Вот почему библиотеки как :

    есть.

    Использование кеша имеет большое значение для скорости реализации. См. Например, didactic GPU comparison example.

  • У графических процессоров есть узкое место ввода-вывода для передачи данных в ЦП.

    Они сконструированы таким образом, что вывод вывода (прямоугольник пикселей) может выводиться непосредственно в видеопамять, чтобы избежать кругового движения CPU.

  • Сеть - это прототипный пример, связанный с IO.

    Даже при отправке одного байта данных по-прежнему требуется большое время, чтобы добраться до места назначения.

    Распараллеливание небольших сетевых запросов, таких как HTTP-запросы, может дать огромный прирост производительности.

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

  • фиктивный ++ ЦП операции C, которая принимает один номер и хрустит это много:

Как узнать, если вы CPU или IO

Non-RAM IO связанный диск, сеть: ps aux, затем theck, если CPU%/100 < n threads. Если да, вы связаны с IO, например. блокировка read s просто ждут данных, и планировщик пропускает этот процесс. Затем используйте дополнительные инструменты, такие как sudo iotop, чтобы решить, какая проблема ввода-вывода именно.

RAM-IO bound: трудно сказать, поскольку время ожидания RAM включено в измерения CPU%. Возможно, самое лучшее, что вы можете сделать, это оценить промахи в кэше.

Смотрите также:

 Смежные вопросы

  • Нет связанных вопросов^_^