#include "acl/acl.h"
#include "acl/DataTypes/aclIndex.h"
#include "acl/DataTypes/aclConstant.h"
#include "acl/DataTypes/aclVariable.h"
#include "acl/DataTypes/aclVariableReference.h"
#include "acl/DataTypes/aclPrivateVariable.h"
#include "acl/DataTypes/aclArray.h"
#include "acl/DataTypes/aclLocalArray.h"
#include "acl/DataTypes/aclSubvector.h"
#include "acl/Operators/aclElementFor.h"
#include "acl/Operators/aclElementIfElse.h"
#include "acl/Operators/aclElementParser.h"
#include "acl/Kernels/aclKernel.h"
#include "aslUtilities.h"
#include <math.h>
#include <initializer_list>
{
cout << "Test of If-Else..." << flush;
vector<cl_float> input(11, 2);
vector<cl_float> output(11, 0);
vector<cl_float> expected({8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8});
shared_ptr<ElementIfElse> ifElse_TestIf(
new ElementIfElse(isEqual(a, c0)));
ifElse_TestIf->addBodyExpressionIf(operatorAssignment(vec, vec + c1));
ifElse_TestIf->addBodyExpressionElse(operatorAssignment(vec, vec - c1));
shared_ptr<ElementIfElse> ifElse_TestElse(
new ElementIfElse(isEqual(a, c1)));
ifElse_TestElse->addBodyExpressionIf(operatorAssignment(vec, vec - c1));
ifElse_TestElse->addBodyExpressionElse(operatorAssignment(vec, vec + c1));
bool status(output == expected);
errorMessage(status);
return status;
}
{
cout << "Test of Parser..." << flush;
vector<cl_float> input(11, 2);
vector<cl_float> output(11, 0);
vector<cl_float> expected({35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35});
string statement("a + c0 + c1 + vec");
parser->addElementNamePair(a, "a");
parser->addElementNamePair(c0, "c0");
parser->addElementNamePair(c1, "c1");
parser->addElementNamePair(vec, "vec");
parser->setStatement(statement);
bool status(output == expected);
return status;
}
{
cout <<
"Test of Atomic Sum..." <<
flush;
vector<cl_int> input(11, 2);
vector<cl_int> output(11, 0);
vector<cl_int> expected({8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8});
kConf.extensions.push_back(
"cl_khr_global_int32_base_atomics");
bool status(output == expected);
return status;
}
{
bool allTestsPassed(true);
return allTestsPassed ? EXIT_SUCCESS : EXIT_FAILURE;
}
If-Else conditional structure.
void addExpression(Element expression_)
ACL Kernel configuration class.
Element operatorAssignment(Element e1, Element e2)
Element atomic_add(Element e1, Element e2)
void errorMessage(cl_int status, const char *errorMessage)
Prints errorMessage and exits depending on the status.
const KernelConfiguration KERNEL_BASIC
definitions of mathematical operators and functions for class Element
Advanced Computational Language.
void copy(MemBlock &source, T *destination)
std::shared_ptr< ElementBase > Element
const acl::KernelConfiguration & kConf(acl::KERNEL_BASIC)