This commit is contained in:
TXuian 2022-12-12 22:22:42 +08:00
parent c2d5d136fd
commit 446660bed4
33 changed files with 131 additions and 63 deletions

View File

@ -1,4 +1,9 @@
menuconfig APP_BENCHMARK menuconfig APP_BENCHMARK
bool "embench for xiuos" bool "embench for xiuos"
default n default Y
if APP_BENCHMARK
config USING_BENCHMARK
bool "USING_BENCHMARK"
default y
endif

View File

@ -14,7 +14,7 @@
Some of this code is referenced by the book the Hacker's Delight (which Some of this code is referenced by the book the Hacker's Delight (which
placed it in the public domain). See http://www.hackersdelight.org/ */ placed it in the public domain). See http://www.hackersdelight.org/ */
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -16,7 +16,7 @@
/* CRC - 32 BIT ANSI X3.66 CRC checksum files */ /* CRC - 32 BIT ANSI X3.66 CRC checksum files */
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -10,7 +10,7 @@
#include <string.h> #include <string.h>
#include "snipmath.h" #include "snipmath.h"
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -33,7 +33,7 @@
*/ */
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -48,7 +48,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <math.h> #include <math.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -34,7 +34,7 @@
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -12,7 +12,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
#define LOCAL_SCALE_FACTOR 51 #define LOCAL_SCALE_FACTOR 51

View File

@ -57,7 +57,7 @@
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -59,7 +59,7 @@
#include <math.h> #include <math.h>
#include <stdlib.h> #include <stdlib.h>
#include "support.h" #include <support.h>
#define LOCAL_SCALE_FACTOR 1 #define LOCAL_SCALE_FACTOR 1

View File

@ -11,7 +11,7 @@
SPDX-License-Identifier: GPL-3.0-or-later */ SPDX-License-Identifier: GPL-3.0-or-later */
#include "support.h" #include <support.h>
#include <stdint.h> #include <stdint.h>
#include <assert.h> #include <assert.h>
#include <stddef.h> #include <stddef.h>

View File

@ -16,7 +16,7 @@
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include <stdbool.h> #include <stdbool.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -34,7 +34,7 @@
***************************************************************************/ ***************************************************************************/
// #define DO_TRACING // #define DO_TRACING
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -11,7 +11,7 @@
SPDX-License-Identifier: GPL-3.0-or-later */ SPDX-License-Identifier: GPL-3.0-or-later */
#include "support.h" #include <support.h>
#include "picojpeg.h" #include "picojpeg.h"
#include <string.h> #include <string.h>

View File

@ -93,7 +93,7 @@
bytes 66.8 billion clocks 13449.513 sec AVR ATmega2560 @ 20 MHz 318 bytes bytes 66.8 billion clocks 13449.513 sec AVR ATmega2560 @ 20 MHz 318 bytes
269.0 billion clocks */ 269.0 billion clocks */
#include "support.h" #include <support.h>
#define LOCAL_SCALE_FACTOR 1 #define LOCAL_SCALE_FACTOR 1

View File

@ -13,7 +13,7 @@
Original code from: https://github.com/tz1/qrduino */ Original code from: https://github.com/tz1/qrduino */
#include "support.h" #include <support.h>
#include "qrencode.h" #include "qrencode.h"
#include <string.h> #include <string.h>

View File

@ -12,7 +12,7 @@
SPDX-License-Identifier: GPL-3.0-or-later */ SPDX-License-Identifier: GPL-3.0-or-later */
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
#include "sglib.h" #include "sglib.h"
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the

View File

@ -14,7 +14,7 @@
SPDX-License-Identifier: GPL-3.0-or-later */ SPDX-License-Identifier: GPL-3.0-or-later */
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -30,7 +30,7 @@
#include <math.h> #include <math.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -43,7 +43,7 @@
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -10,7 +10,7 @@
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
#include "support.h" #include <support.h>
#define LOCAL_SCALE_FACTOR 47 #define LOCAL_SCALE_FACTOR 47

View File

@ -86,7 +86,7 @@
*/ */
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -5,6 +5,6 @@ cwd = GetCurrentDir()
src = Glob('*.c') src = Glob('*.c')
path = [cwd] path = [cwd]
group = DefineGroup('benchmark', src, depend=['USING_BENCHMAKR'], CPPPATH=path) group = DefineGroup('benchmark', src, depend=['USING_BENCHMARK'], CPPPATH=path)
Return('group') Return('group')

View File

@ -15,7 +15,7 @@
into public domain. */ into public domain. */
#include <string.h> #include <string.h>
#include "support.h" #include <support.h>
/* This scale factor will be changed to equalise the runtime of the /* This scale factor will be changed to equalise the runtime of the
benchmarks. */ benchmarks. */

View File

@ -1,10 +1,11 @@
import os import os
from building import * from building import *
Import('RTT_ROOT')
Import('rtconfig')
cwd = GetCurrentDir() cwd = GetCurrentDir()
src = Glob('*.c') DEPENDS = [""]
SOURCES = ['benchmark.c']+['beebsc.c']
path = [cwd] path = [cwd]
objs = DefineGroup('benchmark', src = SOURCES, depend = DEPENDS,CPPPATH = path)
group = DefineGroup('benchmark', src, depend=['USING_BENCHMARK'], CPPPATH=path) Return("objs")
Return('group')

View File

@ -7,6 +7,7 @@
#include <transform.h> #include <transform.h>
// #define NUTTX // #define NUTTX
// #define RTTHREAD 0
#ifdef NUTTX #ifdef NUTTX
// #include "k210_sysctl.h" // #include "k210_sysctl.h"
#include "../../../../../Ubiquitous/Nuttx_Fusion_XiUOS/nuttx/arch/risc-v/src/k210/encoding.h" #include "../../../../../Ubiquitous/Nuttx_Fusion_XiUOS/nuttx/arch/risc-v/src/k210/encoding.h"
@ -156,11 +157,9 @@ void *run_one_example(void *arg) {
organize_result(handle, start_time, end_time); organize_result(handle, start_time, end_time);
PrivMutexAbandon(&case_mu); PrivMutexAbandon(&case_mu);
done_cnt++; done_cnt++;
#ifdef NUTTX
if (done_cnt == 22) { if (done_cnt == 22) {
PrivSemaphoreAbandon(&res_mu); PrivSemaphoreAbandon(&res_mu);
} }
#endif
// printf("Case done. %d\n", done_cnt); // printf("Case done. %d\n", done_cnt);
} }
@ -180,7 +179,7 @@ void *run_benchmark_parallel(void *args) {
case_attr.priority = 64; case_attr.priority = 64;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
#else #else
case_attr.schedparam.sched_priority = 25; case_attr.schedparam.sched_priority = 27;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
#endif #endif
PrivMutexCreate(&case_mu, NULL); PrivMutexCreate(&case_mu, NULL);
@ -193,22 +192,32 @@ void *run_benchmark_parallel(void *args) {
start_trigger(&g_start_time); start_trigger(&g_start_time);
while (NULL != cur_handle) { while (NULL != cur_handle) {
assert(cur_handle->handle.magic_number != MAGIC_NUMBER); assert(cur_handle->handle.magic_number != MAGIC_NUMBER);
#ifdef RTTHREAD
rt_thread_t tid = rt_thread_create("bm_case", run_one_example,
(void *)cur_handle, 16384, 27, 20);
rt_thread_startup(tid);
#else
PrivTaskCreate(&cur_handle->task_ptr, &case_attr, run_one_example, PrivTaskCreate(&cur_handle->task_ptr, &case_attr, run_one_example,
(void *)cur_handle); (void *)cur_handle);
#endif
cur_handle = cur_handle->next; cur_handle = cur_handle->next;
} }
// printf("Create done.\n"); // printf("Create done.\n");
#ifdef NUTTX
PrivSemaphoreObtainWait(&res_mu, NULL); PrivSemaphoreObtainWait(&res_mu, NULL);
#ifdef NUTTX
case_attr.priority = 64; case_attr.priority = 64;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
PrivTaskCreate(&res_thread, &case_attr, print_result_asyn, NULL);
#elif RTTHREAD
rt_thread_t tid =
rt_thread_create("bm_res", print_result_asyn, NULL, 4096, 23, 20);
rt_thread_startup(tid);
#else #else
case_attr.schedparam.sched_priority = 23; case_attr.schedparam.sched_priority = 23;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
#endif
PrivTaskCreate(&res_thread, &case_attr, print_result_asyn, NULL); PrivTaskCreate(&res_thread, &case_attr, print_result_asyn, NULL);
#endif
return NULL; return NULL;
} }
@ -251,28 +260,70 @@ void *run_benchmark_sequential(void *args) {
(uint64_t)(s_stop_time - s_start_time)); (uint64_t)(s_stop_time - s_start_time));
} }
/*****************************************************/
#define NR_BM_MUTEX_LOOP 1000000
void TestWrapMutexManagement(void) {
pthread_mutex_t mu;
PrivMutexCreate(&mu, 0);
uint64_t start_time = read_cycle();
for (int i = 0; i < NR_BM_MUTEX_LOOP; i++) {
PrivMutexObtain(&mu);
PrivMutexAbandon(&mu);
}
uint64_t end_time = read_cycle();
printf("Wrapped Mutex cost: %20ld\n", (uint64_t)(end_time - start_time));
}
void TestOrigMutexManagement(void) {
pthread_mutex_t mu;
pthread_mutex_init(&mu, 0);
uint64_t start_time = read_cycle();
for (int i = 0; i < NR_BM_MUTEX_LOOP; i++) {
pthread_mutex_lock(&mu);
pthread_mutex_unlock(&mu);
}
uint64_t end_time = read_cycle();
printf("Original Mutex cost: %20ld\n", (uint64_t)(end_time - start_time));
}
/*****************************************************/
pthread_t main_thread; pthread_t main_thread;
int embenchmark_parallel() { int embenchmark_parallel() {
#ifdef NUTTX #ifdef NUTTX
case_attr.priority = 128; case_attr.priority = 128;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
PrivTaskCreate(&main_thread, &case_attr, run_benchmark_parallel, NULL);
#elif RTTHREAD
rt_thread_t tid = rt_thread_create(
"benchmark_parallel", run_benchmark_parallel, NULL, 16384, 30, 20);
rt_thread_startup(tid);
#else #else
case_attr.schedparam.sched_priority = 30; case_attr.schedparam.sched_priority = 30;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
#endif
PrivTaskCreate(&main_thread, &case_attr, run_benchmark_parallel, NULL); PrivTaskCreate(&main_thread, &case_attr, run_benchmark_parallel, NULL);
#endif
// run_benchmark_parallel(NULL); // run_benchmark_parallel(NULL);
// TestWrapMutexManagement();
return 0; return 0;
} }
int embenchmark_sequential(void) { int embenchmark_sequential(void) {
#ifdef NUTTX #ifdef NUTTX
case_attr.priority = 128; case_attr.priority = 128;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
PrivTaskCreate(&main_thread, &case_attr, run_benchmark_sequential, NULL);
#elif RTTHREAD
rt_thread_t tid = rt_thread_create(
"benchmark_sequential", run_benchmark_sequential, NULL, 16384, 30, 20);
rt_thread_startup(tid);
#else #else
case_attr.schedparam.sched_priority = 30; case_attr.schedparam.sched_priority = 30;
case_attr.stacksize = 16384; case_attr.stacksize = 16384;
#endif
PrivTaskCreate(&main_thread, &case_attr, run_benchmark_sequential, NULL); PrivTaskCreate(&main_thread, &case_attr, run_benchmark_sequential, NULL);
#endif
// TestOrigMutexManagement();
return 0; return 0;
} }
PRIV_SHELL_CMD_FUNCTION(embenchmark_parallel, run benchmark in parallel, PRIV_SHELL_CMD_FUNCTION(embenchmark_parallel, run benchmark in parallel,

View File

@ -82,6 +82,11 @@ int PrivSemaphoreAbandon(sem_t *sem)
int PrivTaskCreate(pthread_t *thread, const pthread_attr_t *attr, int PrivTaskCreate(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg) void *(*start_routine)(void *), void *arg)
{ {
// sched_setscheduler()
struct sched_param sp;
sp.sched_priority = attr->priority;
sched_setscheduler(0, SCHED_RR, &sp);
return pthread_create(thread, attr, start_routine, arg); return pthread_create(thread, attr, start_routine, arg);
} }

View File

@ -115,7 +115,7 @@ CONFIG_RT_USING_FINSH=y
CONFIG_RT_USING_MSH=y CONFIG_RT_USING_MSH=y
CONFIG_FINSH_USING_MSH=y CONFIG_FINSH_USING_MSH=y
CONFIG_FINSH_THREAD_NAME="tshell" CONFIG_FINSH_THREAD_NAME="tshell"
CONFIG_FINSH_THREAD_PRIORITY=20 CONFIG_FINSH_THREAD_PRIORITY=30
CONFIG_FINSH_THREAD_STACK_SIZE=16384 CONFIG_FINSH_THREAD_STACK_SIZE=16384
CONFIG_FINSH_USING_HISTORY=y CONFIG_FINSH_USING_HISTORY=y
CONFIG_FINSH_HISTORY_LINES=5 CONFIG_FINSH_HISTORY_LINES=5
@ -234,7 +234,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
# Socket abstraction layer # Socket abstraction layer
# #
CONFIG_RT_USING_SAL=y CONFIG_RT_USING_SAL=y
CONFIG_SAL_INTERNET_CHECK=y # CONFIG_SAL_INTERNET_CHECK is not set
# CONFIG_SAL_USING_POSIX is not set # CONFIG_SAL_USING_POSIX is not set
CONFIG_SAL_SOCKETS_NUM=16 CONFIG_SAL_SOCKETS_NUM=16
@ -242,10 +242,10 @@ CONFIG_SAL_SOCKETS_NUM=16
# Network interface device # Network interface device
# #
CONFIG_RT_USING_NETDEV=y CONFIG_RT_USING_NETDEV=y
CONFIG_NETDEV_USING_IFCONFIG=y # CONFIG_NETDEV_USING_IFCONFIG is not set
CONFIG_NETDEV_USING_PING=y # CONFIG_NETDEV_USING_PING is not set
CONFIG_NETDEV_USING_NETSTAT=y # CONFIG_NETDEV_USING_NETSTAT is not set
CONFIG_NETDEV_USING_AUTO_DEFAULT=y # CONFIG_NETDEV_USING_AUTO_DEFAULT is not set
# CONFIG_NETDEV_USING_IPV6 is not set # CONFIG_NETDEV_USING_IPV6 is not set
CONFIG_NETDEV_IPV4=1 CONFIG_NETDEV_IPV4=1
CONFIG_NETDEV_IPV6=0 CONFIG_NETDEV_IPV6=0
@ -420,6 +420,7 @@ CONFIG_APPLICATION_SENSOR=y
# CONFIG_USING_EMBEDDED_DATABASE_APP is not set # CONFIG_USING_EMBEDDED_DATABASE_APP is not set
# CONFIG_APP_USING_WEBNET is not set # CONFIG_APP_USING_WEBNET is not set
CONFIG_APP_BENCHMARK=y CONFIG_APP_BENCHMARK=y
CONFIG_USING_BENCHMARK=y
# #
# lib # lib

View File

@ -222,5 +222,5 @@ static int embenchmark_sequential(void) {
// PRIV_SHELL_CMD_MAIN_ATTR); // PRIV_SHELL_CMD_MAIN_ATTR);
// PRIV_SHELL_CMD_FUNCTION(embenchmark_sequential, run benchmark in sequential, // PRIV_SHELL_CMD_FUNCTION(embenchmark_sequential, run benchmark in sequential,
// PRIV_SHELL_CMD_MAIN_ATTR); // PRIV_SHELL_CMD_MAIN_ATTR);
MSH_CMD_EXPORT(embenchmark_parallel, embench parallel); // MSH_CMD_EXPORT(embenchmark_parallel, embench parallel);
MSH_CMD_EXPORT(embenchmark_sequential, embench sequential); // MSH_CMD_EXPORT(embenchmark_sequential, embench sequential);

View File

@ -3,7 +3,7 @@ import rtconfig
from building import * from building import *
cwd = GetCurrentDir() cwd = GetCurrentDir()
drv_path = cwd + "/../../../aiit_board/k210/kendryte-sdk/kendryte-sdk-source/lib/drivers/include" drv_path = cwd + "/../../../rt-thread/bsp/k210/driver/"
src = [ src = [
'board.c', 'board.c',
'heap.c', 'heap.c',

View File

@ -18,7 +18,7 @@ kendryte-sdk-source/lib/drivers/kpu.c
kendryte-sdk-source/lib/drivers/plic.c kendryte-sdk-source/lib/drivers/plic.c
kendryte-sdk-source/lib/drivers/pwm.c kendryte-sdk-source/lib/drivers/pwm.c
kendryte-sdk-source/lib/drivers/rtc.c kendryte-sdk-source/lib/drivers/rtc.c
kendryte-sdk-source/lib/drivers/sha256.c
kendryte-sdk-source/lib/drivers/spi.c kendryte-sdk-source/lib/drivers/spi.c
kendryte-sdk-source/lib/drivers/sysctl.c kendryte-sdk-source/lib/drivers/sysctl.c
kendryte-sdk-source/lib/drivers/timer.c kendryte-sdk-source/lib/drivers/timer.c
@ -27,11 +27,20 @@ kendryte-sdk-source/lib/drivers/uarths.c
kendryte-sdk-source/lib/drivers/utils.c kendryte-sdk-source/lib/drivers/utils.c
kendryte-sdk-source/lib/drivers/wdt.c kendryte-sdk-source/lib/drivers/wdt.c
''') ''')
CPPPATH = [cwd + '/kendryte-sdk-source/lib/drivers/include', CPPPATH = [
cwd + '/kendryte-sdk-source/lib/drivers/include',
cwd + '/kendryte-sdk-source/lib/bsp/include', cwd + '/kendryte-sdk-source/lib/bsp/include',
cwd + '/kendryte-sdk-source/lib/utils/include'] cwd + '/kendryte-sdk-source/lib/utils/include'
CPPDEFINES = ['CONFIG_LOG_COLORS', 'CONFIG_LOG_ENABLE', 'CONFIG_LOG_LEVEL=LOG_VERBOSE', 'FPGA_PLL', 'LOG_KERNEL', '__riscv64'] ]
CPPDEFINES = [
'CONFIG_LOG_COLORS', 'CONFIG_LOG_ENABLE', 'CONFIG_LOG_LEVEL=LOG_VERBOSE',
'FPGA_PLL', 'LOG_KERNEL', '__riscv64'
]
group = DefineGroup('SDK', src, depend = [''], CPPPATH = CPPPATH, LOCAL_CPPDEFINES = CPPDEFINES) group = DefineGroup('SDK',
src,
depend=[''],
CPPPATH=CPPPATH,
LOCAL_CPPDEFINES=CPPDEFINES)
Return('group') Return('group')

View File

@ -82,7 +82,7 @@
#define RT_USING_MSH #define RT_USING_MSH
#define FINSH_USING_MSH #define FINSH_USING_MSH
#define FINSH_THREAD_NAME "tshell" #define FINSH_THREAD_NAME "tshell"
#define FINSH_THREAD_PRIORITY 20 #define FINSH_THREAD_PRIORITY 30
#define FINSH_THREAD_STACK_SIZE 16384 #define FINSH_THREAD_STACK_SIZE 16384
#define FINSH_USING_HISTORY #define FINSH_USING_HISTORY
#define FINSH_HISTORY_LINES 5 #define FINSH_HISTORY_LINES 5
@ -147,16 +147,11 @@
/* Socket abstraction layer */ /* Socket abstraction layer */
#define RT_USING_SAL #define RT_USING_SAL
#define SAL_INTERNET_CHECK
#define SAL_SOCKETS_NUM 16 #define SAL_SOCKETS_NUM 16
/* Network interface device */ /* Network interface device */
#define RT_USING_NETDEV #define RT_USING_NETDEV
#define NETDEV_USING_IFCONFIG
#define NETDEV_USING_PING
#define NETDEV_USING_NETSTAT
#define NETDEV_USING_AUTO_DEFAULT
#define NETDEV_IPV4 1 #define NETDEV_IPV4 1
#define NETDEV_IPV6 0 #define NETDEV_IPV6 0
@ -246,6 +241,7 @@
#define APPLICATION_SENSOR #define APPLICATION_SENSOR
#define APP_BENCHMARK #define APP_BENCHMARK
#define USING_BENCHMARK
/* lib */ /* lib */