Describe the bug
A thread is never executed when attempting 3 threads on 2 harts using RV32I ISA. The test passes when there are 4 harts or when using 64-bit ISA.
To Reproduce
cd threading/pthreads/permute
make clean && make -j
All issues must be accompanied by:
The version of SST utilized (sst --version; sst-config --CXX; sst-config --ELEMENT_CXXFLAGS)
SST-Core Version (13.0.0)
clang++
-std=c++17 -fPIC -DHAVE_CONFIG_H -I/Users/kgriesser/local/sstcore-13.0.0/include
The source code branch being used
The last commit hash
2f2bda7 (HEAD -> devel, origin/devel
The compiler utilized to build Rev
Apple clang version 15.0.0 (clang-1500.0.40.1)
The compiler utilized to build the test
riscv64-unknown-elf-g++ (g2ee5e430018-dirty) 12.2.0
The python or JSON simulation input
C/CXX test source (or mention which test in the current source tree failed)
See tests/threading/pthreads/permute
Expected behavior
No assertions
Trace
Passing case on RV64G
RevCPU[cpu0:ECALL_pthread_create:26000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:26000]: Creating new thread with PC = 0x14cf4
RevCPU[cpu0:ECALL_pthread_create:50000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:50000]: Creating new thread with PC = 0x14d4c
RevCPU[cpu0:ECALL_pthread_create:73000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:73000]: Creating new thread with PC = 0x14da4
RevCPU[cpu0:ECALL_pthread_join:89000]: ECALL: pthread_join called by thread 1 on hart 0
RevCPU[cpu0:Render:484000]: Core 0; Hart 1; Thread 2197699622; I 0x14d18:f6e1a023 sw a4, -160(gp) 0x193f0<-gp 0xa<-a4 [0x19350,4]<-0x0000000a
RevCPU[cpu0:ECALL_pthread_join:514000]: ECALL: pthread_join called by thread 1 on hart 0
RevCPU[cpu0:ECALL_pthread_join:530000]: ECALL: pthread_join called by thread 1 on hart 0
### Read 0xa ok
RevCPU[cpu0:Render:539000]: Core 0; Hart 0; Thread 1; I 0x14e98:f601a783 lw a5, -160(gp) 0x193f0<-gp 0x0000000a<-[0x19350,4] a5<-0xa
PASSES
Failing case on RV32I
Notice that we never call the function 'void *thread1()'
RevCPU[cpu0:ECALL_pthread_create:25000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:25000]: Creating new thread with PC = 0x1462c
RevCPU[cpu0:ECALL_pthread_create:49000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:49000]: Creating new thread with PC = 0x14678
RevCPU[cpu0:ECALL_pthread_create:72000]: ECALL: pthread_create called by thread 1 on hart 0
RevCPU[cpu0:CreateThread:72000]: Creating new thread with PC = 0x146c4
RevCPU[cpu0:ECALL_pthread_join:88000]: ECALL: pthread_join called by thread 1 on hart 0
Describe the bug A thread is never executed when attempting 3 threads on 2 harts using RV32I ISA. The test passes when there are 4 harts or when using 64-bit ISA.
To Reproduce
cd threading/pthreads/permute make clean && make -j
All issues must be accompanied by:
The version of SST utilized (
sst --version
;sst-config --CXX
;sst-config --ELEMENT_CXXFLAGS
) SST-Core Version (13.0.0) clang++ -std=c++17 -fPIC -DHAVE_CONFIG_H -I/Users/kgriesser/local/sstcore-13.0.0/includeThe source code branch being used
The last commit hash 2f2bda7 (HEAD -> devel, origin/devel
The compiler utilized to build Rev Apple clang version 15.0.0 (clang-1500.0.40.1)
The compiler utilized to build the test riscv64-unknown-elf-g++ (g2ee5e430018-dirty) 12.2.0
The python or JSON simulation input
C/CXX test source (or mention which test in the current source tree failed) See tests/threading/pthreads/permute
Expected behavior No assertions
Trace
Passing case on RV64G
RevCPU[cpu0:ECALL_pthread_create:26000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:26000]: Creating new thread with PC = 0x14cf4 RevCPU[cpu0:ECALL_pthread_create:50000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:50000]: Creating new thread with PC = 0x14d4c RevCPU[cpu0:ECALL_pthread_create:73000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:73000]: Creating new thread with PC = 0x14da4 RevCPU[cpu0:ECALL_pthread_join:89000]: ECALL: pthread_join called by thread 1 on hart 0
enter void *thread2()
RevCPU[cpu0:Render:91000]: Core 0; Hart 0; Thread 1857172069; *I 0x14d4c:fe010113 addi sp, sp, -32 0x3fdbeff7<-sp sp<-0x3fdbefd7
enter void *thread3()
RevCPU[cpu0:Render:226000]: Core 0; Hart 0; Thread 2961362521; *I 0x14da4:fe010113 addi sp, sp, -32 0x3fc7eff6<-sp sp<-0x3fc7efd6
enter void *thread1() <- GOOD (missing from failing case)
RevCPU[cpu0:Render:362000]: Core 0; Hart 1; Thread 2197699622; *I 0x14cf4:fe010113 addi sp, sp, -32 0x3fefeff8<-sp sp<-0x3fefefd8
wrote 0xa
RevCPU[cpu0:Render:484000]: Core 0; Hart 1; Thread 2197699622; I 0x14d18:f6e1a023 sw a4, -160(gp) 0x193f0<-gp 0xa<-a4 [0x19350,4]<-0x0000000a RevCPU[cpu0:ECALL_pthread_join:514000]: ECALL: pthread_join called by thread 1 on hart 0 RevCPU[cpu0:ECALL_pthread_join:530000]: ECALL: pthread_join called by thread 1 on hart 0 ### Read 0xa ok RevCPU[cpu0:Render:539000]: Core 0; Hart 0; Thread 1; I 0x14e98:f601a783 lw a5, -160(gp) 0x193f0<-gp 0x0000000a<-[0x19350,4] a5<-0xa
PASSES
Failing case on RV32I
Notice that we never call the function 'void *thread1()'
RevCPU[cpu0:ECALL_pthread_create:25000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:25000]: Creating new thread with PC = 0x1462c RevCPU[cpu0:ECALL_pthread_create:49000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:49000]: Creating new thread with PC = 0x14678 RevCPU[cpu0:ECALL_pthread_create:72000]: ECALL: pthread_create called by thread 1 on hart 0 RevCPU[cpu0:CreateThread:72000]: Creating new thread with PC = 0x146c4 RevCPU[cpu0:ECALL_pthread_join:88000]: ECALL: pthread_join called by thread 1 on hart 0
enter void *thread2()
RevCPU[cpu0:Render:90000]: Core 0; Hart 0; Thread 501234749; *I 0x14678:fe010113 addi sp, sp, -32 0x3fdbeff7<-sp sp<-0x3fdbefd7
enter void *thread3()
RevCPU[cpu0:Render:193000]: Core 0; Hart 0; Thread 331638285; I 0x146c4:fe010113 addi sp, sp, -32 0x3fc7eff6<-sp sp<-0x3fc7efd6 RevCPU[cpu0:ECALL_pthread_join:312000]: ECALL: pthread_join called by thread 1 on hart 0 RevCPU[cpu0:ECALL_pthread_join:328000]: ECALL: pthread_join called by thread 1 on hart 0 ### FAILS HERE ### read 0 instead of 0xa RevCPU[cpu0:Render:337000]: Core 0; Hart 0; Thread 1; I 0x147a8:c341a783 lw a5, -972(gp) 0x181f0<-gp 0x00000000<-[0x17e24,4] a5<-0x0
Additional context Add any other context about the problem here.