Недавно я пытался оптимизировать однопоточный цикл, который по своей сути сводится к тому, что-то вродеЕсть ли название для этого метода конвейерной параллелизации?
while (true)
{
a = A(x)
b = B(a)
c = C(b)
}
Другими словами, каждый шаг зависит от результата предыдущего шага. Каждая из этих функций выполняет интенсивные операции ЦП.
я в конечном итоге создание 2 очереди и 2 новые темы и отсоединяется его так, чтобы исходный поток делает
/* on existing thread */ while (true) queue1.Enqueue(A(x))
/* on new thread #1 */ while (true) queue2.Enqueue(B(queue1.Dequeue()))
/* on new thread #2 */ while (true) c = B(queue2.Dequeue()))
Теперь 3 функции могут выполняться параллельно, лучшего использования нескольких ядер.
Кажется, что это так, должно быть имя для него. Я не могу его найти. Он очень напоминает то, что делает pipelining, только это метод распараллеливания для потоков.
Я бы сказал, что это конвейерная. – tia
Звучит как довольно простая установка производителя/потребителя. –
@tia Спасибо, ваш ответ привел меня к Google немного глубже, и я, кажется, нашел [ответ] (http://stackoverflow.com/a/27957276/709537). –