Skip to content

Commit

Permalink
[AddVer]update lib of luna and fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
leofang3 committed Aug 21, 2023
1 parent 99156da commit 9c1f0b1
Show file tree
Hide file tree
Showing 29 changed files with 910 additions and 177 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

setup(
name="pythinker",
version="2.0.0",
version="2.1.0",
description="A DeepLearning inference framework for venus",
author="listenai",
author_email="lingerthinker@listenai.com",
Expand Down
4 changes: 2 additions & 2 deletions thinker/docs/tutorial/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,12 @@ $ sudo systemctl start docker # systemctl 命令的用法
3、拉取镜像并加载
1)、拉取镜像
```shell
docker pull listenai/thinker:2.0.0
docker pull listenai/thinker:2.1.0
```

2)、运行容器
```shell
docker container run -it listenai/thinker:2.0.0 /bin/bash
docker container run -it listenai/thinker:2.1.0 /bin/bash
```

如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
Expand Down
4 changes: 2 additions & 2 deletions thinker/executor/c_api/thinker_debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

void write_file(char *output_name, tTensor *tensor) {
char save_path[256];
char temp[256];
char temp[240];
uint32_t crc32 = 0;
int32_t lenofstr = strlen(output_name);
for (int32_t i = 0; i < lenofstr; i++) {
Expand Down Expand Up @@ -117,7 +117,7 @@ static size_t alignSize(size_t sz, int32_t n) { return (sz + n - 1) & -n; }

void write_file(char *output_name, tTensor *tensor) {
char save_path[256];
char temp[256];
char temp[240];
int32_t lenofstr = strlen(output_name);
for (int32_t i = 0; i < lenofstr; i++) {
if (output_name[i] == '/') {
Expand Down
2 changes: 1 addition & 1 deletion thinker/executor/c_api/thinker_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#define STR_IMP(x) #x
#define STR(x) STR_IMP(x)
#define THINKER_VERSION_MAJOR 2
#define THINKER_VERSION_MINOR 0
#define THINKER_VERSION_MINOR 1
#define THINKER_VERSION_PATCH 0
#define THINKER_VERSION \
STR(THINKER_VERSION_MAJOR) \
Expand Down
111 changes: 38 additions & 73 deletions thinker/executor/core/ops/venus/avgpool2dint.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ int avgpool2dint_luna(const tTensor* X, tTensor* Y, tTensor* Temp, PoolAttrs *at
int8_t *p_in = (int8_t *)X->dptr_ + n * in_batch_size;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_batch_size;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, ou_batch_size, 0);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, (int32_t *)p_tmp2, ou_batch_size, 0);
ret |= luna_memset(p_out, 1, ou_batch_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, ou_batch_size, 0);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, (int32_t *)p_tmp1, ou_batch_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, ou_batch_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, ou_batch_size, 0);
}
Expand All @@ -117,91 +117,56 @@ int avgpool2dint_luna(const tTensor* X, tTensor* Y, tTensor* Temp, PoolAttrs *at
{
int16_t *p_tmp = (int16_t *)Temp->dptr_;
shift = my_log2((float)one_kernel_size);
if(s_num == 0)
for (n = 0; n < split_num ; n++)
{
for (n = 0; n < split_num ; n++)
{
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp, &pool_struct_);
ret |= luna_scale_q15_int8(p_tmp, 1, p_out, 8 * ou_channel_size, shift);
memset(p_tmp, 0, 8 * ou_channel_size);
}
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp, &pool_struct_);
ret |= luna_scale_q15_int8(p_tmp, 1, p_out, 8 * ou_channel_size, shift);
memset(p_tmp, 0, 8 * ou_channel_size);
}
else
if(0 != s_num)
{
for (n = 0; n < split_num -1 ; n++)
{
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp, &pool_struct_);
ret |= luna_scale_q15_int8(p_tmp, 1, p_out, 8 * ou_channel_size, shift);
memset(p_tmp, 0, 8 * ou_channel_size);
}
if(n == split_num-1)
{
int8_t *p_in = (int8_t *)X->dptr_ + in_channel_size * (split_num-1) * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + ou_channel_size * (split_num-1) * 8;
pool_struct_.input_c = s_num ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp, &pool_struct_);
ret |= luna_scale_q15_int8(p_tmp, 1, p_out, s_num * ou_channel_size, shift);
memset(p_tmp, 0, s_num * ou_channel_size);
}
int8_t *p_in = (int8_t *)X->dptr_ + in_channel_size * (split_num-1) * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + ou_channel_size * (split_num-1) * 8;
pool_struct_.input_c = s_num ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp, &pool_struct_);
ret |= luna_scale_q15_int8(p_tmp, 1, p_out, s_num * ou_channel_size, shift);
memset(p_tmp, 0, s_num * ou_channel_size);
}
}
else
{
int32_t q_x = (int32_t)X->scale_;
int32_t q_o = (int32_t)Y->scale_;
int32_t *p_tmp1 = (int32_t *)Temp->dptr_;
int32_t *p_tmp2 = (int32_t *)(p_tmp1 + 8* ou_channel_size);
int32_t *p_tmp2 = (int32_t *)(p_tmp1 + 8 * ou_batch_size);

if(s_num == 0)
for (n = 0; n < split_num; n++)
{
for (n = 0; n < split_num ; n++)
{
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, 8 * ou_channel_size, 0);
ret |= luna_memset(p_out, 1, 8 * ou_channel_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, 8 * ou_channel_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, 8 * ou_channel_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, 8 * ou_channel_size, 0);
}
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, 8 * ou_channel_size, 0);
ret |= luna_memset(p_out, 1, 8 * ou_channel_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, 8 * ou_channel_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, 8 * ou_channel_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, 8 * ou_channel_size, 0);
}
else
if(0 != s_num)
{
for (n = 0; n < split_num - 1; n++)
{
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * 8;
pool_struct_.input_c = 8 ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, 8 * ou_channel_size, 0);
ret |= luna_memset(p_out, 1, 8 * ou_channel_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, 8 * ou_channel_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, 8 * ou_channel_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, 8 * ou_channel_size, 0);
}
if(n == split_num-1)
{
int8_t *p_in = (int8_t *)X->dptr_ + n * in_channel_size * (split_num-1) * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + n * ou_channel_size * (split_num-1) * 8;
pool_struct_.input_c = s_num ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, s_num * ou_channel_size, 0);
ret |= luna_memset(p_out, 1, s_num * ou_channel_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, s_num * ou_channel_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, s_num * ou_channel_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, s_num * ou_channel_size, 0);
}
}


int8_t *p_in = (int8_t *)X->dptr_ + in_channel_size * (split_num-1) * 8;
int8_t *p_out = (int8_t *)Y->dptr_ + ou_channel_size * (split_num-1) * 8;
pool_struct_.input_c = s_num ;
ret = luna_mean_pooling_int16(p_in, (int16_t *)p_tmp1, &pool_struct_);
ret |= luna_scale_q15_int32((int16_t *)p_tmp1, 1, p_tmp2, s_num * ou_channel_size, 0);
ret |= luna_memset(p_out, 1, s_num * ou_channel_size);
ret |= luna_scale_q7_int32(p_out, one_kernel_size, p_tmp1, s_num * ou_channel_size, 0);
ret |= luna_div_q31_int32(p_tmp2, q_x, p_tmp1, 0, p_tmp1, q_o, s_num * ou_channel_size);
ret |= luna_scale_q31_int8(p_tmp1, 1, p_out, s_num * ou_channel_size, 0);
}
}
}
}
Expand Down
49 changes: 0 additions & 49 deletions thinker/executor/core/ops/venus/luna/luna.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,59 +13,10 @@
#include <math.h>
#include <time.h>

#include "luna_error.h"
#include "luna_bits.h"
#include "luna_math_types.h"
#include "luna_controller_math.h"

#define LUNA_VER_MAJOR 3
#define LUNA_VER_MINOR 0
#define LUNA_VER_PATCH 1
#define LUNA_VER_BUILD 0
#define LUNA_VERSION ( (LUNA_VER_MAJOR << 24) + (LUNA_VER_MINOR << 16) + (LUNA_VER_PATCH << 8) + (LUNA_VER_BUILD << 0) )

#define LUNA_SHARE_MEM_AHB_BASE (0x48000000)
#define LUNA_SHARE_MEM_AHB_BASE_MASK (0x480FFFFF)
#define LUNA_SHARE_MEM_BASE (0x5FE00000)
#define LUNA_PSRAM_MEM_BASE (0x60000000)

#define _FAST_FUNC_RO __attribute__ ((section (".sharedmem.text"))) //code in shared memory
#define _FAST_DATA_VI __attribute__ ((section (".sharedmem.data"))) //initialized data in shared memory
#define _FAST_DATA_ZI __attribute__ ((section (".sharedmem.bss"))) //zero initialized data in shared memory

#define USE_BIGOP 1
#define USE_SHAREMEM_CMD 1

#define LUNA_LOG printf
#define _STR(x) _VAL(x)
#define _VAL(x) #x

/******************* luna function ********************/
unsigned int reg_read(unsigned int addr);
void reg_write(unsigned int addr, unsigned int data);
void luna_print_regs();

void luna_init();
int32_t luna_execute(const uint32_t *api, void* param);

uint32_t luna_version();
void start_counter();
uint32_t get_counter();

#if USE_SHAREMEM_CMD
//#define __luna_cmd_attr__ const _FAST_FUNC_RO
#define __luna_cmd_attr__ const __attribute__ ((section (".sharedmem.text."_STR(__LINE__))))
#define __luna_param_attr__
#else
#define __luna_cmd_attr__ const
#define __luna_param_attr__
#endif


#if USE_BIGOP
#define luna_execute_cmd(api, param, param_size) bigop_execute_op(api, 0, param, param_size)
#else
#define luna_execute_cmd(api, param, param_size) luna_execute(api, param)
#endif

#endif /* __LUNA_LUNA_H__ */
2 changes: 1 addition & 1 deletion thinker/executor/core/ops/venus/luna/opi_psram_cpy.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef __OPI_PSRAM_CPY_H__
#define __OPI_PSRAM_CPY_H__

#include "luna_math_types.h"
#include "luna_math.h"

typedef void (*dma_sync_call_func)(void* param);

Expand Down
71 changes: 71 additions & 0 deletions thinker/executor/core/ops/venus/luna_bk/luna.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* luna.h
*
* Created on: Aug 18, 2017
* Author: dwwang
*/

#ifndef __LUNA_LUNA_H__
#define __LUNA_LUNA_H__

#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <time.h>

#include "luna_error.h"
#include "luna_bits.h"
#include "luna_math_types.h"
#include "luna_controller_math.h"

#define LUNA_VER_MAJOR 3
#define LUNA_VER_MINOR 0
#define LUNA_VER_PATCH 1
#define LUNA_VER_BUILD 0
#define LUNA_VERSION ( (LUNA_VER_MAJOR << 24) + (LUNA_VER_MINOR << 16) + (LUNA_VER_PATCH << 8) + (LUNA_VER_BUILD << 0) )

#define LUNA_SHARE_MEM_AHB_BASE (0x48000000)
#define LUNA_SHARE_MEM_AHB_BASE_MASK (0x480FFFFF)
#define LUNA_SHARE_MEM_BASE (0x5FE00000)
#define LUNA_PSRAM_MEM_BASE (0x60000000)

#define _FAST_FUNC_RO __attribute__ ((section (".sharedmem.text"))) //code in shared memory
#define _FAST_DATA_VI __attribute__ ((section (".sharedmem.data"))) //initialized data in shared memory
#define _FAST_DATA_ZI __attribute__ ((section (".sharedmem.bss"))) //zero initialized data in shared memory

#define USE_BIGOP 1
#define USE_SHAREMEM_CMD 1

#define LUNA_LOG printf
#define _STR(x) _VAL(x)
#define _VAL(x) #x

/******************* luna function ********************/
unsigned int reg_read(unsigned int addr);
void reg_write(unsigned int addr, unsigned int data);
void luna_print_regs();

void luna_init();
int32_t luna_execute(const uint32_t *api, void* param);

uint32_t luna_version();
void start_counter();
uint32_t get_counter();

#if USE_SHAREMEM_CMD
//#define __luna_cmd_attr__ const _FAST_FUNC_RO
#define __luna_cmd_attr__ const __attribute__ ((section (".sharedmem.text."_STR(__LINE__))))
#define __luna_param_attr__
#else
#define __luna_cmd_attr__ const
#define __luna_param_attr__
#endif


#if USE_BIGOP
#define luna_execute_cmd(api, param, param_size) bigop_execute_op(api, 0, param, param_size)
#else
#define luna_execute_cmd(api, param, param_size) luna_execute(api, param)
#endif

#endif /* __LUNA_LUNA_H__ */
Loading

0 comments on commit 9c1f0b1

Please sign in to comment.