Created
March 29, 2020 03:50
-
-
Save omar-3/b2420aec2cc92ac71e18f41a74fb5e0e to your computer and use it in GitHub Desktop.
this is an implementation for python's filter method in Chapel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use RangeChunk; | |
use Time; | |
iter filter(array, function) { | |
for i in array { | |
if function(i) { | |
yield i; | |
} | |
} | |
} | |
// leader | |
pragma "no doc" | |
iter filter(param tag: iterKind, array, function) | |
where tag == iterKind.leader { | |
var numTasks = here.maxTaskPar; | |
var Range = array.domain.low..array.domain.high; | |
coforall tid in 0..#numTasks { | |
var nowRange = chunk(Range, numTasks, tid); | |
yield (nowRange, ); | |
} | |
} | |
// follower | |
pragma "no doc" | |
iter filter(param tag: iterKind, array, function, followThis) | |
where tag == iterKind.follower && followThis.size == 1 { | |
var nowRange = followThis(1); | |
for i in nowRange { | |
if function(array[i]) { | |
yield array[i]; | |
} | |
} | |
} | |
// I guess these are around 1200 elements | |
var used = [19, 73, 39, 59, 99, 49, 9, 48, 26, 79, 60, 94, 5, 49, 2, 59, 12, 73, 52, 53, 60, 21, 14, 34, 63, 79, 27, 3, 6, 42, 9, 37, 99, 42, 47, 41, 22, 95, 24, 98, 15, 81, 4, 90, 18, 36, 81, 84, 8, 74, 70, 40, 52, 30, 42, 17, 49, 99, 58, 21, 86, 98, 8, 94, 93, 46, 23, 92, 86, 61, 37, 57, 66, 23, 28, 3, 87, 33, 75, 9, 20, 42, 89, 0, 7, 44, 1, | |
6, 4, 15, 73, 84, 60, 24, 78, 14, 96, 0, 12, 16, 77, 87, 34, 40, 25, 58, 18, 71, 73, 18, 42, 31, 21, 93, 60, 59, 47, 31, 76, 20, 80, 84, 17, 93, 84, 92, 84, 54, 69, 3, 81, 1, 29, 94, 75, 68, 16, 17, 11, 9, 88, 81, 61, 12, 53, 39, 78, 59, 24, 49, 64, 9, 29, | |
14, 1, 25, 79, 29, 52, 83, 46, 91, 50, 85, 19, 4, 40, 77, 79, 91, 70, 1, 1, 19, 26, 94, 86, 12, 47, 41, 70, 87, 13, 38, 77, 5, 66, 66, 30, 60, 7, 11, 25, 83, 99, 52, 94, 30, 83, 91, | |
22, 72, 43, 63, 54, 59, 51, 19, 79, 34, 54, 85, 35, 39, 20, 95, 94, 86, 23, 9, 17, 53, 57, 70, 55, 41, 19, 19, 58, 60, 38, 15, 62, 50, 95, 39, 68, 49, 47, 96, 76, 40, 6, 20, 72, 89, 17, 70, 72, 26, 98, 32, 33, 61, 38, 78, 41, 98, 72, 77, 82, 35, 42, 92, 32, 42, 99, 86, 14, 46, 21, 19, 63, 70, 36, 29, 71, 1, 51, | |
64, 80, 78, 70, 98, 80, 4, 3, 27, 20, 17, 95, 9, 79, 76, 2, 64, 66, 82, 80, 4, 65, 41, 44, 74, 5, 61, 16, 57, 30, 97, 11, 8, 93, 41, 96, 5, 62, 5, 34, 33, 93, 11, 20, 86, 26, 28, 70, 51, 39, 65, 6, 34, 89, 67, 42, 92, 48, 10, 73, 97, 96, 35, 0, 38, 48, 75, 67, 22, 9, 11, 13, 74, 27, 76, 0, 29, 94, 23, 71, 48, 27, 15, 94, 92, 44, 69, 29, 70, 45, 4, 66, 72, 17, 52, 97, 16, 18, 0, 35, 29, 44, 4, 72, 71, 79, 54, 53, 34, 46, 96, 25, 19, 90, 23, 77, 97, 35, 64, 7, 23, 66, 97, 31, 72, 30, 40, 59, 78, 87, 98, 39, 55, 7, 52, 47, | |
61, 52, 50, 77, 98, 93, 75, 87, 24, 50, 63, 70, 68, 99, 2, 98, 38, 90, 46, 30, 50, 87, 23, 65, 35, 57, 82, 64, 57, 44, 65, 92, 72, 85, 92, 62, 33, 94, 23, 59, | |
72, 76, 3, 79, 0, 23, 24, 5, 99, 85, 50, 52, 40, 41, 5, 23, 63, 52, 26, 93, 91, 41, 45, 38, 20, 46, 59, 13, 8, 78, 53, 19, 68, 1, 76, 34, 88, 34, 46, 98, 19, 38, 50, 28, 93, 31, 61, 31, 14, 94, 72, 26, 77, 30, 88, 58, 99, 40, 9, 96, 54, 39, 97, 88, 64, 78, 35, 88, 59, 5, 32, 88, 0, 1, 51, 56, 30, 85, 4, 23, 69, 15, 36, 94, 80, 85, 33, 72, 4, 57, 4, 20, 35, 65, 77, 2, 3, 62, 1, 89, 77, 52, 68, 70, 2, 63, 23, 21, 4, 44, 98, 75, 14, 73, 84, 38, 68, 93, 17, 18, 1, 79, 48, 17, 59, 74, 74, 82, 86, 30, 37, 31, 10, 5, 79, 93, 45, 71, 64, 53, 45, 62, 24, 61, 87, | |
19, 73, 39, 59, 99, 49, 9, 48, 26, 79, 60, 94, 5, 49, 2, 59, 12, 73, 52, 53, 60, 21, 14, 34, 63, 79, 27, 3, 6, 42, 9, 37, 99, 42, 47, 41, 22, 95, 24, 98, 15, 81, 4, 90, 18, 36, 81, 84, 8, 74, 70, 40, 52, 30, 42, 17, 49, 99, 58, 21, 86, 98, 8, 94, 93, 46, 23, 92, 86, 61, 37, 57, 66, 23, 28, 3, 87, 33, 75, 9, 20, 42, 89, 0, 7, 44, 1, | |
6, 4, 15, 73, 84, 60, 24, 78, 14, 96, 0, 12, 16, 77, 87, 34, 40, 25, 58, 18, 71, 73, 18, 42, 31, 21, 93, 60, 59, 47, 31, 76, 20, 80, 84, 17, 93, 84, 92, 84, 54, 69, 3, 81, 1, 29, 94, 75, 68, 16, 17, 11, 9, 88, 81, 61, 12, 53, 39, 78, 59, 24, 49, 64, 9, 29, | |
14, 1, 25, 79, 29, 52, 83, 46, 91, 50, 85, 19, 4, 40, 77, 79, 91, 70, 1, 1, 19, 26, 94, 86, 12, 47, 41, 70, 87, 13, 38, 77, 5, 66, 66, 30, 60, 7, 11, 25, 83, 99, 52, 94, 30, 83, 91, | |
22, 72, 43, 63, 54, 59, 51, 19, 79, 34, 54, 85, 35, 39, 20, 95, 94, 86, 23, 9, 17, 53, 57, 70, 55, 41, 19, 19, 58, 60, 38, 15, 62, 50, 95, 39, 68, 49, 47, 96, 76, 40, 6, 20, 72, 89, 17, 70, 72, 26, 98, 32, 33, 61, 38, 78, 41, 98, 72, 77, 82, 35, 42, 92, 32, 42, 99, 86, 14, 46, 21, 19, 63, 70, 36, 29, 71, 1, 51, | |
64, 80, 78, 70, 98, 80, 4, 3, 27, 20, 17, 95, 9, 79, 76, 2, 64, 66, 82, 80, 4, 65, 41, 44, 74, 5, 61, 16, 57, 30, 97, 11, 8, 93, 41, 96, 5, 62, 5, 34, 33, 93, 11, 20, 86, 26, 28, 70, 51, 39, 65, 6, 34, 89, 67, 42, 92, 48, 10, 73, 97, 96, 35, 0, 38, 48, 75, 67, 22, 9, 11, 13, 74, 27, 76, 0, 29, 94, 23, 71, 48, 27, 15, 94, 92, 44, 69, 29, 70, 45, 4, 66, 72, 17, 52, 97, 16, 18, 0, 35, 29, 44, 4, 72, 71, 79, 54, 53, 34, 46, 96, 25, 19, 90, 23, 77, 97, 35, 64, 7, 23, 66, 97, 31, 72, 30, 40, 59, 78, 87, 98, 39, 55, 7, 52, 47, | |
61, 52, 50, 77, 98, 93, 75, 87, 24, 50, 63, 70, 68, 99, 2, 98, 38, 90, 46, 30, 50, 87, 23, 65, 35, 57, 82, 64, 57, 44, 65, 92, 72, 85, 92, 62, 33, 94, 23, 59, | |
72, 76, 3, 79, 0, 23, 24, 5, 99, 85, 50, 52, 40, 41, 5, 23, 63, 52, 26, 93, 91, 41, 45, 38, 20, 46, 59, 13, 8, 78, 53, 19, 68, 1, 76, 34, 88, 34, 46, 98, 19, 38, 50, 28, 93, 31, 61, 31, 14, 94, 72, 26, 77, 30, 88, 58, 99, 40, 9, 96, 54, 39, 97, 88, 64, 78, 35, 88, 59, 5, 32, 88, 0, 1, 51, 56, 30, 85, 4, 23, 69, 15, 36, 94, 80, 85, 33, 72, 4, 57, 4, 20, 35, 65, 77, 2, 3, 62, 1, 89, 77, 52, 68, 70, 2, 63, 23, 21, 4, 44, 98, 75, 14, 73, 84, 38, 68, 93, 17, 18, 1, 79, 48, 17, 59, 74, 74, 82, 86, 30, 37, 31, 10, 5, 79, 93, 45, 71, 64, 53, 45, 62, 24, 61, 87, | |
19, 73, 39, 59, 99, 49, 9, 48, 26, 79, 60, 94, 5, 49, 2, 59, 12, 73, 52, 53, 60, 21, 14, 34, 63, 79, 27, 3, 6, 42, 9, 37, 99, 42, 47, 41, 22, 95, 24, 98, 15, 81, 4, 90, 18, 36, 81, 84, 8, 74, 70, 40, 52, 30, 42, 17, 49, 99, 58, 21, 86, 98, 8, 94, 93, 46, 23, 92, 86, 61, 37, 57, 66, 23, 28, 3, 87, 33, 75, 9, 20, 42, 89, 0, 7, 44, 1, | |
6, 4, 15, 73, 84, 60, 24, 78, 14, 96, 0, 12, 16, 77, 87, 34, 40, 25, 58, 18, 71, 73, 18, 42, 31, 21, 93, 60, 59, 47, 31, 76, 20, 80, 84, 17, 93, 84, 92, 84, 54, 69, 3, 81, 1, 29, 94, 75, 68, 16, 17, 11, 9, 88, 81, 61, 12, 53, 39, 78, 59, 24, 49, 64, 9, 29, | |
14, 1, 25, 79, 29, 52, 83, 46, 91, 50, 85, 19, 4, 40, 77, 79, 91, 70, 1, 1, 19, 26, 94, 86, 12, 47, 41, 70, 87, 13, 38, 77, 5, 66, 66, 30, 60, 7, 11, 25, 83, 99, 52, 94, 30, 83, 91, | |
22, 72, 43, 63, 54, 59, 51, 19, 79, 34, 54, 85, 35, 39, 20, 95, 94, 86, 23, 9, 17, 53, 57, 70, 55, 41, 19, 19, 58, 60, 38, 15, 62, 50, 95, 39, 68, 49, 47, 96, 76, 40, 6, 20, 72, 89, 17, 70, 72, 26, 98, 32, 33, 61, 38, 78, 41, 98, 72, 77, 82, 35, 42, 92, 32, 42, 99, 86, 14, 46, 21, 19, 63, 70, 36, 29, 71, 1, 51, | |
64, 80, 78, 70, 98, 80, 4, 3, 27, 20, 17, 95, 9, 79, 76, 2, 64, 66, 82, 80, 4, 65, 41, 44, 74, 5, 61, 16, 57, 30, 97, 11, 8, 93, 41, 96, 5, 62, 5, 34, 33, 93, 11, 20, 86, 26, 28, 70, 51, 39, 65, 6, 34, 89, 67, 42, 92, 48, 10, 73, 97, 96, 35, 0, 38, 48, 75, 67, 22, 9, 11, 13, 74, 27, 76, 0, 29, 94, 23, 71, 48, 27, 15, 94, 92, 44, 69, 29, 70, 45, 4, 66, 72, 17, 52, 97, 16, 18, 0, 35, 29, 44, 4, 72, 71, 79, 54, 53, 34, 46, 96, 25, 19, 90, 23, 77, 97, 35, 64, 7, 23, 66, 97, 31, 72, 30, 40, 59, 78, 87, 98, 39, 55, 7, 52, 47, | |
61, 52, 50, 77, 98, 93, 75, 87, 24, 50, 63, 70, 68, 99, 2, 98, 38, 90, 46, 30, 50, 87, 23, 65, 35, 57, 82, 64, 57, 44, 65, 92, 72, 85, 92, 62, 33, 94, 23, 59, | |
72, 76, 3, 79, 0, 23, 24, 5, 99, 85, 50, 52, 40, 41, 5, 23, 63, 52, 26, 93, 91, 41, 45, 38, 20, 46, 59, 13, 8, 78, 53, 19, 68, 1, 76, 34, 88, 34, 46, 98, 19, 38, 50, 28, 93, 31, 61, 31, 14, 94, 72, 26, 77, 30, 88, 58, 99, 40, 9, 96, 54, 39, 97, 88, 64, 78, 35, 88, 59, 5, 32, 88, 0, 1, 51, 56, 30, 85, 4, 23, 69, 15, 36, 94, 80, 85, 33, 72, 4, 57, 4, 20, 35, 65, 77, 2, 3, 62, 1, 89, 77, 52, 68, 70, 2, 63, 23, 21, 4, 44, 98, 75, 14, 73, 84, 38, 68, 93, 17, 18, 1, 79, 48, 17, 59, 74, 74, 82, 86, 30, 37, 31, 10, 5, 79, 93, 45, 71, 64, 53, 45, 62, 24, 61, 87]; | |
proc filteringFunction(x: int) : bool { | |
return x >= 5 && x % 2 == 0; | |
} | |
var a = getCurrentTime(); | |
for i in filter(used, filteringFunction) { | |
write(i, " "); | |
} | |
writeln("\n\n\n\rserial version is done in ", getCurrentTime() - a); | |
var b = getCurrentTime(); | |
forall i in filter(used, filteringFunction) { | |
write(i, " "); | |
} | |
writeln("\n\n\n\n\rparallel version is done in ", getCurrentTime() - b); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment