Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
add_subdirectory(example)
add_subdirectory(layer_example)
2 changes: 1 addition & 1 deletion app/example/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
add_executable(example main.cpp)
add_executable(example main.cpp)
11 changes: 11 additions & 0 deletions app/layer_example/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set(ARM_DIR "${CMAKE_SOURCE_DIR}/3rdparty/ComputeLibrary")

add_executable(ConvolutionLayer ConvolutionLayer.cpp)
add_executable(ElementwiseLayer ElementwiseLayer.cpp)

include_directories(${ARM_DIR})
include_directories(${ARM_DIR/include})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
include_directories(${ARM_DIR/include})
include_directories(${ARM_DIR}/include)

link_directories(${ARM_DIR}/build)

target_link_libraries(ConvolutionLayer arm_compute)
target_link_libraries(ElementwiseLayer arm_compute)
40 changes: 40 additions & 0 deletions app/layer_example/ConvolutionLayer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include "arm_compute/runtime/NEON/NEFunctions.h"
#include "utils/Utils.h"

#include <iostream>
using namespace arm_compute;
using namespace utils;

int main(){
Tensor input;
Tensor weight;
Tensor bias;
Tensor output;

const unsigned int N = 1;
const unsigned int Hin = 3;
const unsigned int Win = 3;
const unsigned int Cin = 1;

const unsigned int Hf = 3;
const unsigned int Wf = 3;

const unsigned int Hout = Hin - Hf + 1;
const unsigned int Wout = Win - Wf + 1;
const unsigned int Cout = 1;

input.allocator()->init(TensorInfo(TensorShape(Hin, Win, Cin), 1, DataType::F32));
weight.allocator()->init(TensorInfo(TensorShape(Hf, Wf, Cin, Cout), 1, DataType::F32));
output.allocator()->init(TensorInfo(TensorShape(Hout, Wout, Cout), 1, DataType::F32));

input.allocator()->allocate();
weight.allocator()->allocate();
output.allocator()->allocate();

NEConvolutionLayer conv;
conv.configure(&input, &weight, nullptr, &output, PadStrideInfo(1, 1, 0, 0));

conv.run();

output.print(std::cout);
}
76 changes: 76 additions & 0 deletions app/layer_example/ElementwiseLayer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#include "arm_compute/runtime/NEON/NEFunctions.h"
#include "utils/Utils.h"

#include <iostream>
using namespace arm_compute;
using namespace utils;

class ElementwiseLayer {
const int input_width = 5;
const int input_height = 5;

Tensor input1, input2, output;

public:
void fill() {
input1.allocator()->init(TensorInfo(TensorShape(input_width, input_height, 1), 1, DataType::F32));
input2.allocator()->init(TensorInfo(TensorShape(input_width, input_height, 1), 1, DataType::F32));
output.allocator()->init(TensorInfo(TensorShape(input_width, input_height, 1), 1, DataType::F32));

input1.allocator()->allocate();
input2.allocator()->allocate();
output.allocator()->allocate();

fill_random_tensor(input1, 0.f, 1.f);
fill_random_tensor(input2, 0.f, 1.f);
}

void SquaredDiff() {
NEElementwiseSquaredDiff elementwise;
elementwise.configure(&input1, &input2, &output);
elementwise.run();
}

void Division() {
NEElementwiseDivision elementwise;
elementwise.configure(&input1, &input2, &output);
elementwise.run();
}

void Addition() {
NEArithmeticAddition add;
add.configure(&input1, &input2, &output);
add.run();
}

void Swish() {
NEActivationLayer act;
act.configure(&input1, &input2, ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SWISH));
act.run();
}

void Abs() {
NEActivationLayer act;
act.configure(&input1, &input2, ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::ABS));
act.run();
}

void Sigmoid() {
NEActivationLayer act;
act.configure(&input1, &input2, ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LOGISTIC));
act.run();
}

void print() {
output.print(std::cout);
}
};

int main() {
ElementwiseLayer a;
a.fill();
a.Addition();
a.print();

return 0;
}
Loading