A batch classifier can count values that cross a threshold and map the count to a label.

Program

Play the program to choose a threshold and see the batch label change.

threshold
classify_batches_pipeline.f90
Replay: real traced execution (multi-file project)
program classify_batches_pipeline_demo
    implicit none
    integer :: values(3)
    integer :: threshold
    integer :: high_count
    integer :: i
    character(len=6) :: label

    values = [4, 8, 11]
    threshold = 7
    high_count = 0
    do i = 1, 3
        if (values(i) >= threshold) high_count = high_count + 1
    end do
    if (high_count >= 2) then
        label = 'keep'
    else
        label = 'drop'
    end if
    print '(I0, 1X, A)', high_count, trim(label)
end program classify_batches_pipeline_demo
program classify_batches_pipeline_demo
    implicit none
    integer :: values(3)
    integer :: threshold
    integer :: high_count
    integer :: i
    character(len=6) :: label

    values = [4, 8, 11]
    threshold = 3
    high_count = 0
    do i = 1, 3
        if (values(i) >= threshold) high_count = high_count + 1
    end do
    if (high_count >= 2) then
        label = 'keep'
    else
        label = 'drop'
    end if
    print '(I0, 1X, A)', high_count, trim(label)
end program classify_batches_pipeline_demo
program classify_batches_pipeline_demo
    implicit none
    integer :: values(3)
    integer :: threshold
    integer :: high_count
    integer :: i
    character(len=6) :: label

    values = [4, 8, 11]
    threshold = 10
    high_count = 0
    do i = 1, 3
        if (values(i) >= threshold) high_count = high_count + 1
    end do
    if (high_count >= 2) then
        label = 'keep'
    else
        label = 'drop'
    end if
    print '(I0, 1X, A)', high_count, trim(label)
end program classify_batches_pipeline_demo
  1. values ← [4, 8, 11]

    9values = [4, 8, 11]10threshold = 7
    values this step[4, 8, 11]values
  2. threshold ← 7

    9values = [4, 8, 11]10threshold = 711high_count = 0
    values this step7threshold
  3. high_count ← 0

    10threshold = 711high_count = 012do i = 1, 3
    values this step0high_count
  4. i ← 1

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step1i
  5. if (values(i) >= threshold) high_count = high_count + 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step.false.values(1) >= threshold
  6. i ← 2

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step2i
  7. high_count ← 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step1high_count.true.values(2) >= threshold
  8. i ← 3

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step3i
  9. high_count ← 2

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step2high_count.true.values(3) >= threshold
  10. if (high_count >= 2) then

    14end do15if (high_count >= 2) then16    label = 'keep'
    values this step.true.high_count >= 2
  11. label ← keep

    15if (high_count >= 2) then16    label = 'keep'17else
    values this stepkeeplabel
  12. print '(I0, 1X, A)', high_count, trim(label)

    19    end if20    print '(I0, 1X, A)', high_count, trim(label)21end program classify_batches_pipeline_demo
    output2 keep
    values this step2high_countkeeplabel
  1. values ← [4, 8, 11]

    9values = [4, 8, 11]10threshold = 3
    values this step[4, 8, 11]values
  2. threshold ← 3

    9values = [4, 8, 11]10threshold = 311high_count = 0
    values this step3threshold
  3. high_count ← 0

    10threshold = 311high_count = 012do i = 1, 3
    values this step0high_count
  4. i ← 1

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step1i
  5. high_count ← 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step1high_count.true.values(1) >= threshold
  6. i ← 2

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step2i
  7. high_count ← 2

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step2high_count.true.values(2) >= threshold
  8. i ← 3

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step3i
  9. high_count ← 3

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step3high_count.true.values(3) >= threshold
  10. if (high_count >= 2) then

    14end do15if (high_count >= 2) then16    label = 'keep'
    values this step.true.high_count >= 2
  11. label ← keep

    15if (high_count >= 2) then16    label = 'keep'17else
    values this stepkeeplabel
  12. print '(I0, 1X, A)', high_count, trim(label)

    19    end if20    print '(I0, 1X, A)', high_count, trim(label)21end program classify_batches_pipeline_demo
    output3 keep
    values this step3high_countkeeplabel
  1. values ← [4, 8, 11]

    9values = [4, 8, 11]10threshold = 10
    values this step[4, 8, 11]values
  2. threshold ← 10

    9values = [4, 8, 11]10threshold = 1011high_count = 0
    values this step10threshold
  3. high_count ← 0

    10threshold = 1011high_count = 012do i = 1, 3
    values this step0high_count
  4. i ← 1

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step1i
  5. if (values(i) >= threshold) high_count = high_count + 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step.false.values(1) >= threshold
  6. i ← 2

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step2i
  7. if (values(i) >= threshold) high_count = high_count + 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step.false.values(2) >= threshold
  8. i ← 3

    11high_count = 012do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 1
    values this step3i
  9. high_count ← 1

    12do i = 1, 313    if (values(i) >= threshold) high_count = high_count + 114end do
    values this step1high_count.true.values(3) >= threshold
  10. if (high_count >= 2) then

    14end do15if (high_count >= 2) then16    label = 'keep'
    values this step.false.high_count >= 2
  11. label ← drop

    17else18    label = 'drop'19end if
    values this stepdroplabel
  12. print '(I0, 1X, A)', high_count, trim(label)

    19    end if20    print '(I0, 1X, A)', high_count, trim(label)21end program classify_batches_pipeline_demo
    output1 drop
    values this step1high_countdroplabel
threshold `values(i) >= threshold` decides whether a row is counted.
label The final label is based on the accumulated count.
composition The program separates counting from labeling.