Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package concpar22final02
import java.util.concurrent.atomic.AtomicInteger
import scala.collection.mutable.ArrayBuffer
class Problem2(imageSize: Int, numThreads: Int, numFilters: Int):
val barrier: ArrayBuffer[Barrier] =
ArrayBuffer.fill(numFilters)(Barrier(numThreads))
val imageLib: ImageLib = ImageLib(imageSize)
def imagePipeline(
filters: Array[imageLib.Filter],
rows: Array[Int]
): ArrayBuffer[ArrayBuffer[Int]] =
for i <- 0 to filters.size - 1 do
for j <- 0 to rows.size - 1 do
if i % 2 == 0 then
imageLib.applyFilter(
filters(i).kernel,
imageLib.buffer1,
imageLib.buffer2,
rows(j)
)
else
imageLib.applyFilter(
filters(i).kernel,
imageLib.buffer2,
imageLib.buffer1,
rows(j)
)
barrier(i).countDown()
barrier(i).awaitZero()
if filters.size % 2 == 0 then imageLib.buffer1
else imageLib.buffer2