use of cx2x.translator.language.base.ClawLanguage in project claw-compiler by C2SM-RCM.
the class ClawLanguageTest method analyzeValidSimpleClaw.
/**
* Assert the result for valid simple CLAW directive
*
* @param raw Raw string value of the CLAW directive to be analyzed.
* @param directive Directive to be match.
*/
private void analyzeValidSimpleClaw(String raw, ClawDirective directive, boolean isEnd, List<Target> targets) {
try {
Xnode p = XmlHelper.createXpragma();
p.setValue(raw);
Configuration configuration = new Configuration(AcceleratorDirective.OPENACC, Target.GPU);
AcceleratorGenerator generator = AcceleratorHelper.createAcceleratorGenerator(configuration);
ClawLanguage l = ClawLanguage.analyze(p, generator, Target.GPU);
assertEquals(directive, l.getDirective());
if (isEnd) {
assertTrue(l.isEndPragma());
} else {
assertFalse(l.isEndPragma());
}
assertTargets(l, targets);
} catch (IllegalDirectiveException idex) {
System.err.println(idex.getMessage());
fail();
}
}
use of cx2x.translator.language.base.ClawLanguage in project claw-compiler by C2SM-RCM.
the class ClawLanguageTest method analyzeValidArrayToFctCall.
/**
* Assert the result for valid CLAW call directive
*
* @param raw Raw string value of the CLAW directive to be analyzed.
* @param arrayName Array name to be checked.
* @param fctName Function name to be checked.
* @param params List of parameters identifier to be checked.
*/
private void analyzeValidArrayToFctCall(String raw, String arrayName, String fctName, List<String> params, List<Target> targets) {
try {
Xnode p = XmlHelper.createXpragma();
p.setValue(raw);
Configuration configuration = new Configuration(AcceleratorDirective.OPENACC, Target.GPU);
AcceleratorGenerator generator = AcceleratorHelper.createAcceleratorGenerator(configuration);
ClawLanguage l = ClawLanguage.analyze(p, generator, Target.GPU);
assertEquals(ClawDirective.ARRAY_TO_CALL, l.getDirective());
assertEquals(params.size(), l.getFctParams().size());
for (int i = 0; i < params.size(); ++i) {
assertEquals(params.get(i), l.getFctParams().get(i));
}
assertEquals(arrayName, l.getArrayName());
assertEquals(fctName, l.getFctName());
assertTargets(l, targets);
} catch (IllegalDirectiveException idex) {
System.err.print(idex.getMessage());
fail();
}
}
use of cx2x.translator.language.base.ClawLanguage in project claw-compiler by C2SM-RCM.
the class ClawLanguageTest method extractTest.
/**
* Test various input for the CLAW loop extract directive.
*/
@Test
public void extractTest() {
// Valid directives
ClawLanguage l = analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j)", "i", "istart", "iend", null, null);
assertNotNull(l);
assertEquals(1, l.getMappings().size());
assertNotNull(l.getMappings().get(0));
ClawMapping map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend,2) map(i:j)", "i", "istart", "iend", "2", null);
assertNotNull(l);
map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=1,10) map(i:j)", "i", "1", "10", null, null);
assertNotNull(l);
map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=1,10,2) map(i:j) parallel", "i", "1", "10", "2", null);
assertNotNull(l);
map = l.getMappings().get(0);
assertTrue(l.hasParallelClause());
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j) fusion", "i", "istart", "iend", null, null);
assertNotNull(l);
assertEquals(1, l.getMappings().size());
assertNotNull(l.getMappings().get(0));
assertTrue(l.hasFusionClause());
assertFalse(l.hasGroupClause());
assertFalse(l.hasParallelClause());
map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j) fusion group(j1)", "i", "istart", "iend", null, null);
assertNotNull(l);
assertEquals(1, l.getMappings().size());
assertNotNull(l.getMappings().get(0));
assertTrue(l.hasFusionClause());
assertTrue(l.hasGroupClause());
assertEquals("j1", l.getGroupValue());
map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j) fusion group(j1) " + "acc(loop gang vector)", "i", "istart", "iend", null, null);
assertNotNull(l);
assertEquals(1, l.getMappings().size());
assertNotNull(l.getMappings().get(0));
assertTrue(l.hasFusionClause());
assertTrue(l.hasGroupClause());
assertTrue(l.hasAcceleratorClause());
assertEquals("loop gang vector", l.getAcceleratorClauses());
assertEquals("j1", l.getGroupValue());
map = l.getMappings().get(0);
assertEquals(1, map.getMappedVariables().size());
assertEquals(1, map.getMappingVariables().size());
assertEquals("i", map.getMappedVariables().get(0).getArgMapping());
assertEquals("i", map.getMappedVariables().get(0).getFctMapping());
assertFalse(map.getMappedVariables().get(0).hasDifferentMapping());
assertEquals("j", map.getMappingVariables().get(0).getArgMapping());
assertEquals("j", map.getMappingVariables().get(0).getFctMapping());
assertFalse(map.getMappingVariables().get(0).hasDifferentMapping());
l = analyzeValidClawLoopExtract("claw loop-extract range(j1=ki1sc,ki1ec) " + "map(pduh2oc,pduh2of:j1,ki3sc/j3) " + "map(pduco2,pduo3,palogp,palogt,podsc,podsf,podac,podaf:j1,ki3sc/j3) " + "map(pbsff,pbsfc:j1,ki3sc/j3) map(pa1c,pa1f,pa2c,pa2f,pa3c,pa3f:j1) " + "fusion group(coeth-j1) parallel acc(loop gang vector)", "j1", "ki1sc", "ki1ec", null, null);
assertNotNull(l);
assertEquals(4, l.getMappings().size());
ClawMapping map1 = l.getMappings().get(0);
assertNotNull(map1);
assertEquals(2, map1.getMappedVariables().size());
assertEquals(2, map1.getMappingVariables().size());
assertEquals("pduh2oc", map1.getMappedVariables().get(0).getArgMapping());
assertEquals("pduh2oc", map1.getMappedVariables().get(0).getFctMapping());
assertEquals("pduh2of", map1.getMappedVariables().get(1).getArgMapping());
assertEquals("pduh2of", map1.getMappedVariables().get(1).getFctMapping());
assertEquals("j1", map1.getMappingVariables().get(0).getArgMapping());
assertEquals("j1", map1.getMappingVariables().get(0).getFctMapping());
assertEquals("ki3sc", map1.getMappingVariables().get(1).getArgMapping());
assertEquals("j3", map1.getMappingVariables().get(1).getFctMapping());
ClawMapping map2 = l.getMappings().get(1);
assertNotNull(map2);
assertEquals(8, map2.getMappedVariables().size());
assertEquals(2, map2.getMappingVariables().size());
assertEquals("pduco2", map2.getMappedVariables().get(0).getArgMapping());
assertEquals("pduco2", map2.getMappedVariables().get(0).getFctMapping());
assertEquals("pduo3", map2.getMappedVariables().get(1).getArgMapping());
assertEquals("pduo3", map2.getMappedVariables().get(1).getFctMapping());
assertEquals("palogp", map2.getMappedVariables().get(2).getArgMapping());
assertEquals("palogp", map2.getMappedVariables().get(2).getFctMapping());
assertEquals("palogt", map2.getMappedVariables().get(3).getArgMapping());
assertEquals("palogt", map2.getMappedVariables().get(3).getFctMapping());
assertEquals("podsc", map2.getMappedVariables().get(4).getArgMapping());
assertEquals("podsc", map2.getMappedVariables().get(4).getFctMapping());
assertEquals("podsf", map2.getMappedVariables().get(5).getArgMapping());
assertEquals("podsf", map2.getMappedVariables().get(5).getFctMapping());
assertEquals("podac", map2.getMappedVariables().get(6).getArgMapping());
assertEquals("podac", map2.getMappedVariables().get(6).getFctMapping());
assertEquals("podaf", map2.getMappedVariables().get(7).getArgMapping());
assertEquals("podaf", map2.getMappedVariables().get(7).getFctMapping());
assertEquals("j1", map2.getMappingVariables().get(0).getArgMapping());
assertEquals("j1", map2.getMappingVariables().get(0).getFctMapping());
assertEquals("ki3sc", map2.getMappingVariables().get(1).getArgMapping());
assertEquals("j3", map2.getMappingVariables().get(1).getFctMapping());
ClawMapping map3 = l.getMappings().get(2);
assertNotNull(map3);
assertEquals(2, map3.getMappedVariables().size());
assertEquals(2, map3.getMappingVariables().size());
assertEquals("pbsff", map3.getMappedVariables().get(0).getArgMapping());
assertEquals("pbsff", map3.getMappedVariables().get(0).getFctMapping());
assertEquals("pbsfc", map3.getMappedVariables().get(1).getArgMapping());
assertEquals("pbsfc", map3.getMappedVariables().get(1).getFctMapping());
assertEquals("j1", map3.getMappingVariables().get(0).getArgMapping());
assertEquals("j1", map3.getMappingVariables().get(0).getFctMapping());
assertEquals("ki3sc", map3.getMappingVariables().get(1).getArgMapping());
assertEquals("j3", map3.getMappingVariables().get(1).getFctMapping());
ClawMapping map4 = l.getMappings().get(3);
assertNotNull(map4);
assertEquals(6, map4.getMappedVariables().size());
assertEquals(1, map4.getMappingVariables().size());
assertEquals("pa1c", map4.getMappedVariables().get(0).getArgMapping());
assertEquals("pa1c", map4.getMappedVariables().get(0).getFctMapping());
assertEquals("pa1f", map4.getMappedVariables().get(1).getArgMapping());
assertEquals("pa1f", map4.getMappedVariables().get(1).getFctMapping());
assertEquals("pa2c", map4.getMappedVariables().get(2).getArgMapping());
assertEquals("pa2c", map4.getMappedVariables().get(2).getFctMapping());
assertEquals("pa2f", map4.getMappedVariables().get(3).getArgMapping());
assertEquals("pa2f", map4.getMappedVariables().get(3).getFctMapping());
assertEquals("pa3c", map4.getMappedVariables().get(4).getArgMapping());
assertEquals("pa3c", map4.getMappedVariables().get(4).getFctMapping());
assertEquals("pa3f", map4.getMappedVariables().get(5).getArgMapping());
assertEquals("pa3f", map4.getMappedVariables().get(5).getFctMapping());
assertEquals("j1", map4.getMappingVariables().get(0).getArgMapping());
assertEquals("j1", map4.getMappingVariables().get(0).getFctMapping());
assertTrue(l.hasFusionClause());
assertTrue(l.hasGroupClause());
assertEquals("coeth-j1", l.getGroupValue());
assertTrue(l.hasAcceleratorClause());
assertEquals("loop gang vector", l.getAcceleratorClauses());
analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j) target(gpu) fusion " + "group(j1)", "i", "istart", "iend", null, Collections.singletonList(Target.GPU));
analyzeValidClawLoopExtract("claw loop-extract range(i=istart,iend) map(i:j) fusion group(j1) " + "target(gpu)", "i", "istart", "iend", null, Collections.singletonList(Target.GPU));
// Unvalid directives
analyzeUnvalidClawLanguage("claw loop-extract");
analyzeUnvalidClawLanguage("claw loop - extract ");
}
use of cx2x.translator.language.base.ClawLanguage in project claw-compiler by C2SM-RCM.
the class ClawLanguageTest method analyzeValidClawLoopInterchange.
/**
* Assert the result for valid loop interchange CLAW directive
*
* @param raw Raw string value of the CLAW directive to be analyzed.
* @param indexes List of indexes to be found if any.
*/
private void analyzeValidClawLoopInterchange(String raw, List<String> indexes, boolean parallel, String acc, List<Target> targets) {
try {
Xnode p = XmlHelper.createXpragma();
p.setValue(raw);
Configuration configuration = new Configuration(AcceleratorDirective.OPENACC, Target.GPU);
AcceleratorGenerator generator = AcceleratorHelper.createAcceleratorGenerator(configuration);
ClawLanguage l = ClawLanguage.analyze(p, generator, Target.GPU);
assertEquals(ClawDirective.LOOP_INTERCHANGE, l.getDirective());
if (indexes != null) {
assertTrue(l.hasIndexes());
assertEquals(indexes.size(), l.getIndexes().size());
} else {
assertFalse(l.hasIndexes());
assertNull(l.getIndexes());
}
if (parallel) {
assertTrue(l.hasParallelClause());
} else {
assertFalse(l.hasParallelClause());
}
if (acc != null) {
assertTrue(l.hasAcceleratorClause());
assertEquals(acc, l.getAcceleratorClauses());
} else {
assertFalse(l.hasAcceleratorClause());
assertNull(l.getAcceleratorClauses());
}
assertTargets(l, targets);
} catch (IllegalDirectiveException idex) {
fail();
}
}
use of cx2x.translator.language.base.ClawLanguage in project claw-compiler by C2SM-RCM.
the class TransformationHelper method applyFusionClause.
/**
* Generate loop fusion transformation if the clause is present in the
* directive.
*
* @param claw ClawLanguage object that tells encapsulates all
* information about the current directives and its
* clauses.
* @param transformer Transformer object in which new transformation are
* added.
* @param stmt Statement on which the transformation is attached. Must
* be a FdoStatement for the loop fusion transformation.
*/
private static void applyFusionClause(ClawLanguage claw, Transformer transformer, Xnode stmt) {
if (claw.hasFusionClause() && stmt.opcode() == Xcode.FDOSTATEMENT) {
ClawLanguage l = ClawLanguage.createLoopFusionLanguage(claw);
LoopFusion fusion = new LoopFusion(stmt, l);
// TODO maybe run analysis
transformer.addTransformation(fusion);
if (XmOption.isDebugOutput()) {
System.out.println("Loop fusion added: " + claw.getGroupValue());
}
}
}
Aggregations