2015-01-15 3 views
1

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

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, только это метод распараллеливания для потоков.

+1

Я бы сказал, что это конвейерная. – tia

+0

Звучит как довольно простая установка производителя/потребителя. –

+0

@tia Спасибо, ваш ответ привел меня к Google немного глубже, и я, кажется, нашел [ответ] (http://stackoverflow.com/a/27957276/709537). –

ответ

1

Немного более тщательный поиск в Интернете показал, что он называется Параллелизм трубопроводовbysome. Это описательное имя.

На одной из страниц, ссылки выше, есть также интуитивная визуализация метода:

Pipeline Parallelism

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