data on which an algorithm operates. Another im-
portant thing is to optimize synchronization and the
communication of the threads. The synchronization
of the threads between blocks is much slower than in
a block. If it is not necessary it should be avoided, if
necessary, it should be solved by the sequential run-
ning of multiple kernels. Another important aspect is
the fact that recursive function calls are not allowed in
CUDA kernels. Providing stack space for all the ac-
tive threads requires substantial amounts of memory.
Modern processors consist of two or more inde-
pendent central processing units. This architecture
enables multiple CPU instructions (add, move data,
branch etc.) to run at the same time. The cores
are integrated into a single integrated circuit. The
manufacturers AMD and Intel have developed several
multi-core processors (dual-core, quad-core, hexa-
core, octa-core etc.). The cores may or may not share
caches, and they may implement message passing or
shared memory inter-core communication. The sin-
gle cores in multi-core systems may implement archi-
tectures such as vector processing, SIMD, or multi-
threading. These techniques offer another aspect of
parallelization (implicit to high level languages, used
by compilers). The performance gained by the use
of a multi-core processor depends on the algorithms
used and their implementation.
There are lot of programming models and li-
braries of multi-core programming. The most pop-
ular are pthreads, OpenMP, Cilk++, TDD etc. In our
work OpenMP was used (OpenMP, 2010), being a
software platform supporting multi-threaded, shared-
memory parallel processing multi-core architectures
for C, C++ and Fortran languages. By using OpenMP,
the programmer does not need to create the threads
nor assign tasks to each thread. The programmer in-
serts directives to assist the compiler into generating
threads for the parallel processor platform.
3 HIERARCHICAL TEMPORAL
MEMORY
Hierarchical Temporal Memory (HTM) replicates the
structural and algorithmic properties of the neocortex.
It can be regarded as a memory system which is not
programmed and it is trained through exposing them
to data i.e. text. HTM is organized in the hierarchy
which reflects the nature of the world and performs
modeling by updating the hierarchy. The structure is
hierarchical in both space and time, which is the key
in natural language modeling since words and sen-
tences come in sequences which describe cause and
effect relationships between the latent objects. HTMs
may be considered similar to Bayesian Networks,
HMM and Recurrent Neural Networks, but they are
different in the way hierarchy, model of neuron and
time is organized (Hawkins and Ahmad, 2011).
At any moment in time, based on current and past
input, an HTM will assign a likelihood that given con-
cepts are present in the examined stream. The HTM’s
output constitutes a set of probabilities for each of the
learned causes. This moment-to-moment distribution
of possible concepts (causes) is denoted as a belief. If
the HTM covers a certain number of concepts it will
have the same number of variables representing those
concepts. Typically HTMs learn about many causes
and create a structure of them which reflects their re-
lationships.
Even for human beings, discovering causes is con-
sidered to be a core of perception and creativity, and
people through course of their life learn how to find
causes underlying objects in the world. In this sense
HTMs mimic human cognitive abilities and with a
long enough training, proper design and implemen-
tation, they should be able to discover causes humans
can find difficult or are unable to detect (Kapuscinski,
2010)(Sherwin and Mavris, 2009).
HTM infers concepts of new stream elements and
the result is a distribution of beliefs across all the
learned causes. If the concept (e.g. one of the cat-
egories occurring in the examined stream) is unam-
biguous, the belief distribution will be peaked other-
wise it will be flat. In HTMs it is possible to disable
learning after training and still do inference.
4 SPATIAL POOLER IN
HIERARCHICAL TEMPORAL
MEMORIES
This paper focuses on spatial pooler parallelization. It
may be summarized in the following steps:
• Starts with an input consisting of a fixed number
of bits which could be sensory data or they could
come from another region lower in the hierarchy,
• assigns a fixed number of columns in the region
this entry. Each column has an associated seg-
ment of dendrites (Hawkins and Ahmad, 2011).
Dendrite segments have potential synapses. Each
synapse has a permanence value,
• determines number of valid synapses connected to
every column,
• boosting factor is used to amplify value of
columns. It is evaluated on the base of a given
column neighbours,
ICAART 2016 - 8th International Conference on Agents and Artificial Intelligence
348