aclUtilities.h
Go to the documentation of this file.
/*
* Advanced Simulation Library <http://asl.org.il>
*
* Copyright 2015 Avtech Scientific <http://avtechscientific.com>
*
*
* This file is part of Advanced Simulation Library (ASL).
*
* ASL is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, version 3 of the License.
*
* ASL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with ASL. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ACLUTILITIES_H
#define ACLUTILITIES_H
#include "aslUtilities.h"
#include "Kernels/aclKernelConfiguration.h"
//#include "aclHardware.h"
#include "aclTypes.h"
namespace cl
{
class CommandQueue;
}
namespace acl
{
extern const std::string INDEX;
extern const KernelConfiguration KERNEL_BASIC;
class ElementBase;
typedef std::shared_ptr<ElementBase> Element;
typedef std::shared_ptr<cl::CommandQueue> CommandQueue;
bool compatible(unsigned int size1, CommandQueue queue1,
unsigned int size2, CommandQueue queue2);
bool compatible(unsigned int size, CommandQueue queue, Element e);
bool compatible(Element e1, Element e2);
inline bool compatibleSizes(unsigned int s1, unsigned int s2);
bool compatibleSizes(Element e1, Element e2);
bool compatibleSizes(unsigned int s, Element e);
unsigned int paddingBytes(unsigned int size,
unsigned int typeSize,
CommandQueue queue);
unsigned int paddingElements(unsigned int size,
const KernelConfiguration & kernelConfig);
bool onSameDevice(CommandQueue queue1, CommandQueue queue2);
bool onSameDevice(CommandQueue queue, Element e);
bool onSameDevice(Element e1, Element e2);
bool isDeclarable(Element e);
bool isArgument(Element e);
void addElementToKernelSource(Element e,
std::vector<Element> & arguments,
std::vector<Element> & localDeclarations);
template <typename T> const std::string& typeToStr();
template <typename T> inline const std::string typeToStr(unsigned int i);
template <typename T> inline constexpr const TypeID typeToTypeID();
// ------------------------Implementation ---------------
inline bool compatibleSizes(unsigned int s1, unsigned int s2)
{
return (s1 == s2 || (s1 * s2) == 0);
}
template <> inline constexpr const TypeID typeToTypeID<cl_double>()
{
return TYPE_DOUBLE;
}
template <> inline constexpr const TypeID typeToTypeID<cl_float>()
{
return TYPE_FLOAT;
}
template <> inline constexpr const TypeID typeToTypeID<cl_int>()
{
return TYPE_INT;
}
template <> inline constexpr const TypeID typeToTypeID<cl_uint>()
{
return TYPE_UINT;
}
template <> inline constexpr const TypeID typeToTypeID<cl_long>()
{
return TYPE_LONG;
}
template <typename T> inline const std::string typeToStr(unsigned int i)
{
if (i == 1)
return typeToStr<T>();
else
return typeToStr<T>() + asl::numToStr(i);
}
} // namespace acl
#endif // ACLUTILITIES_H
acl::KERNEL_BASIC
const KernelConfiguration KERNEL_BASIC
Definition: aclElementBase.h:45
asl::numToStr
std::string numToStr(T i)
Converts numbers or another type to string.
Definition: aslUtilities.h:48
acl
Advanced Computational Language.
Definition: acl.h:41
acl::INDEX
const std::string INDEX
Definition: aclUtilities.h:39
acl::CommandQueue
std::shared_ptr< cl::CommandQueue > CommandQueue
Definition: acl.h:51
acl::compatible
bool compatible(unsigned int size1, CommandQueue queue1, unsigned int size2, CommandQueue queue2)
acl::typeToTypeID
constexpr const TypeID typeToTypeID()
acl::onSameDevice
bool onSameDevice(CommandQueue queue1, CommandQueue queue2)
checks whether both elements reside on the same device
acl::typeToTypeID< cl_int >
constexpr const TypeID typeToTypeID< cl_int >()
Definition: aclUtilities.h:105
acl::paddingBytes
unsigned int paddingBytes(unsigned int size, unsigned int typeSize, CommandQueue queue)
Adds padding in bytes based on the device's alignment.
acl::typeToTypeID< cl_uint >
constexpr const TypeID typeToTypeID< cl_uint >()
Definition: aclUtilities.h:110
acl::TypeID
TypeID
Definition: aclTypes.h:39
acl::TYPE_INT
@ TYPE_INT
Definition: aclTypes.h:40
acl::TYPE_LONG
@ TYPE_LONG
Definition: aclTypes.h:44
acl::TYPE_UINT
@ TYPE_UINT
Definition: aclTypes.h:41
acl::TYPE_DOUBLE
@ TYPE_DOUBLE
Definition: aclTypes.h:43
acl::TYPE_FLOAT
@ TYPE_FLOAT
Definition: aclTypes.h:42
acl::paddingElements
unsigned int paddingElements(unsigned int size, const KernelConfiguration &kernelConfig)
Adds padding in elements based on vector width.
acl::isDeclarable
bool isDeclarable(Element e)
acl::typeToTypeID< cl_float >
constexpr const TypeID typeToTypeID< cl_float >()
Definition: aclUtilities.h:100
acl::typeToStr
const std::string & typeToStr()
acl::compatibleSizes
bool compatibleSizes(unsigned int s, const VectorOfElements &a)
Definition: aclVectorOfElementsDef.h:118
acl::typeToTypeID< cl_long >
constexpr const TypeID typeToTypeID< cl_long >()
Definition: aclUtilities.h:115
acl::isArgument
bool isArgument(Element e)
acl::addElementToKernelSource
void addElementToKernelSource(Element e, std::vector< Element > &arguments, std::vector< Element > &localDeclarations)
adds e either to arguments or to localDeclarations
acl::typeToTypeID< cl_double >
constexpr const TypeID typeToTypeID< cl_double >()
Definition: aclUtilities.h:95
acl::Element
std::shared_ptr< ElementBase > Element
Definition: acl.h:49
cl
The OpenCL C++ bindings are defined within this namespace.
Definition: acl.h:34
aclTypes.h