Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

neurun vs pure_arm_compute #19

Open
mojunsang26 opened this issue Oct 7, 2018 · 2 comments
Open

neurun vs pure_arm_compute #19

mojunsang26 opened this issue Oct 7, 2018 · 2 comments

Comments

@mojunsang26
Copy link
Collaborator

mojunsang26 commented Oct 7, 2018

nnfw/runtime/ 디렉토리에 neurun과 pure_arm_compute 폴더가 있습니다.
pure_arm_compute도 마찬가지로 NN API의 소스가 구현되어 있고 현재 NN API가 지원하는 operation중 4개를 제외한 나머지를 모두 지원하고 있습니다.
두 폴더에 있는 CMakeList를 보면 모두 libneuralnetworks.so를 만드는 것 같은데 두 라이브러리 용도의 차이를 정확히 알아야 할 것 같습니다.
pure_arm_compute에서는 arm cl의 클래스나 함수를 자주 인용하는 반면에 neuron에서는 실제 연산이 이루어지는 arm_compute::IFunction.run() 외엔 arm cl의 사용을 최소화 하고 있습니다. 코드를 더 살펴봐야 알겠지만 neuron은 arm cl 외에 NPU Driver나 다른 compute api를 지원하기 위한 라이브러리로 생각됩니다.

@timedilation
Copy link
Collaborator

arm_compute::IFunction.run()을 부르는 과정입니다.

neurun/src/frontend/execution.cc
ANeuralNetworkExecution_StartCompute()

179   const auto &operations = execution->plan().operations();
180 
181   for (uint32_t n = 0; n < operations.size(); ++n)
182   {
183     operations.at(n).run();
184   }
185 

neurun/src/frontend/wrapper/execution.h

 33 public:
 34   const neurun::codegen::Plan &plan(void) const { return *_plan; }
 35 
 36 private:
 37   std::shared_ptr<const neurun::codegen::Plan> _plan;

neurun/src/codegen/Plan.h

 46   operation::Sequence &operations(void) { return _ops; }
 52   operation::Sequence _ops;

neurun/src/codegen/operation/Sequence.h

 45   ::arm_compute::IFunction &at(uint32_t n) const { return *(_functions.at(n)); 
 48   std::vector<std::unique_ptr<::arm_compute::IFunction>> _functions;

arm_compute는 nnfw에 소스 코드가 포함되어 있지 않으며, 패키지의 함수를 바로 부르는 것 같습니다.
arm_compute 소스 코드

@timedilation
Copy link
Collaborator

제 생각에는 neurun도 연산에 있어 armcl을 이용하는 것은 같은 반면, frontend/backend로 나누어져 있는 것을 볼 때 neurun이 pure_arm_compute를 최적화하는 프로젝트가 아닐까 생각됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants