Skip to content

Instantly share code, notes, and snippets.

@omar-3
Created March 29, 2020 03:50
Show Gist options
  • Save omar-3/b2420aec2cc92ac71e18f41a74fb5e0e to your computer and use it in GitHub Desktop.
Save omar-3/b2420aec2cc92ac71e18f41a74fb5e0e to your computer and use it in GitHub Desktop.
this is an implementation for python's filter method in Chapel
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