s117 / anycore-riscv

The AnyCore toolset targetting the RISC-V ISA
Other
0 stars 0 forks source link

621.wrf_s_ref failed because PK doesn't provide sys_getrandom() #14

Closed s117 closed 4 years ago

s117 commented 4 years ago

Binary is compiled by https://github.com/s117/riscv-gnu-toolchain/commit/d0bdaa9a282a32cc68e6203098dc1162021ceba7

$ spike -m8192 pk -c wrf_s_base.riscv-m64

Requesting target memory 0x200000000
******* Resetting core ********** 
****Initializing the processor system****
******* Resetting core ********** 
******* Resetting core ********** 
****Initialization complete****
--- WARNING: traj_opt is zero, but num_traj is not zero; setting num_traj to zero.
--- NOTE: sst_update is 0, setting io_form_auxinput4 = 0 and auxinput4_interval = 0 for all domains
--- NOTE: grid_fdda is 0 for domain      1, setting gfdda interval and ending time to 0 for that domain.
--- NOTE: both grid_sfdda and pxlsm_soil_nudge are 0 for domain      1, setting sgfdda interval and ending time to 0 for that domain.
--- NOTE: obs_nudge_opt is 0 for domain      1, setting obs nudging interval and ending time to 0 for that domain.
bl_pbl_physics /= 4, implies mfshconv must be 0, resetting
--- NOTE: num_soil_layers has been set to      4
WRF V3.6.1 MODEL
 *************************************
 Parent domain
 ids,ide,jds,jde            1          74           1          61
 ims,ime,jms,jme           -4          79          -4          66
 ips,ipe,jps,jpe            1          74           1          61
 *************************************
DYNAMICS OPTION: Eulerian Mass Coordinate
   alloc_space_field: domain            1 ,             128355772  bytes allocated
  med_initialdata_input: calling input_input
   Resetting the hypsometric_opt from default value of 2 to 1
Timing for processing wrfinput file (stream 0) for domain        1:    0.16400 elapsed seconds
INPUT LandUse = "USGS"
 LANDUSE TYPE = "USGS" FOUND          33  CATEGORIES           2  SEASONS WATER CATEGORY =           16  SNOW CATEGORY =           24
INITIALIZE THREE Noah LSM RELATED TABLES
 LANDUSE TYPE = USGS FOUND          27  CATEGORIES
 INPUT SOIL TEXTURE CLASSIFICATION = STAS
 SOIL TEXTURE CLASSIFICATION = STAS FOUND          19  CATEGORIES
Timing for processing lateral boundary for domain        1:    0.04600 elapsed seconds
 Tile Strategy is not specified. Assuming 1D-Y
WRF TILE   1 IS      1 IE     74 JS      1 JE     61
WRF NUMBER OF TILES =   1
bad syscall array_size 1063 #278->0!
cycle = 628710902
instret = 628710909
******* Resetting core ********** 

syscall number 278 corresponds to sys_getrandom, as defined here: https://github.com/s117/riscv-gnu-toolchain/blob/d0bdaa9a282a32cc68e6203098dc1162021ceba7/linux-headers/include/asm-generic/unistd.h#L709

s117 commented 4 years ago

In 621.wrf_s_ref, a call path to sys_getrandom(): image

5 - riscv-glibc/sysdeps/unix/sysv/linux/getentropy.c:45 4 - riscv-gcc/libgfortran/intrinsics/random.c:317 3 - riscv-gcc/libgfortran/intrinsics/random.c:364 2 - riscv-gcc/libgfortran/intrinsics/random.c:484 1 - solve_em.fppized.f90:475

s117 commented 4 years ago

Implemented new syscall sys_getrandom(): PK - https://github.com/s117/riscv-pk/commit/2f89a8c2393efec38158703e6648b40d2064623f FESVR - https://github.com/s117/riscv-fesvr/commit/1360c390e775047ab5e1f1307d0748a8984328ed

A test code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/random.h>

void print_random(size_t len){
  char* buf = (char*)malloc(len);
  printf("Requesting %llu random bytes...\n", len);
  ssize_t ret = getrandom(buf, len, 0);
  printf("getrandom returned %lld\n", ret);

  if (ret < 0) {
    puts("failed.\n");
  } else {
    printf("the length of generated random data is %lld bytes\n", ret);
    for (size_t i = 0; i < ret; ++i) {
      printf("%02hhX ", buf[i]);
    }
    puts("\n");
  }

  free(buf);
}

int main() {
  print_random(1);
  print_random(1);
  print_random(8);
  print_random(16);
  print_random(32);
  print_random(256);
}

Result

$ spike pk getrandom_test.rv64

Requesting target memory 0x100000000
******* Resetting core **********
****Initializing the processor system****
******* Resetting core **********
******* Resetting core **********
****Initialization complete****
Requesting 1 random bytes...
getrandom returned 1
the length of generated random data is 1 bytes
CB

Requesting 1 random bytes...
getrandom returned 1
the length of generated random data is 1 bytes
7F

Requesting 8 random bytes...
getrandom returned 8
the length of generated random data is 8 bytes
E5 B0 30 7F 7B FF 2E E8

Requesting 16 random bytes...
getrandom returned 16
the length of generated random data is 16 bytes
FB A0 99 8D D9 4A 8A 8F 7D B7 79 3F D2 DF 4B 6D

Requesting 32 random bytes...
getrandom returned 32
the length of generated random data is 32 bytes
3F 64 B9 60 7F BD 39 D9 08 FF 29 84 5F 4D 6D B6 F6 2C 4E D4 0D B7 F4 73 11 3E 1B 06 F6 AC BE C4

Requesting 256 random bytes...
getrandom returned 256
the length of generated random data is 256 bytes
95 4D 81 51 92 FA 26 6D 98 A8 63 46 AF 86 0C C8 12 7B 06 DA 4E 64 3D 26 5D 8F 7E 8E 7B CD 55 C3 A3 E4 10 63 12 40 A0 67 22 3C FC 7A EA 11 9D 9E 97 8A FE 3F 7E 6E 8D 83 A5 AA 65 CB 0E 3B 00 68 36 1C 22 68 F0 B2 5E F8 5C A0 6E 8F DA 85 74 EA 1A 8B F9
 4F EE 14 A9 3B 80 9D 3B 2F 87 82 63 F4 28 3D CE 78 3A 17 8F A9 2D C8 F0 D2 56 2E E4 E9 EF 5C 38 F8 56 B7 BE DE EB 89 A9 A7 78 80 FA 50 CB AD 25 93 15 01 28 90 85 0C 2B 1B 17 0C 4A 99 FF 87 1D A4 3F EF 54 0C 1A 3F C2 93 2E FB 81 1B B7 16 40 FF 6C A
5 94 90 94 CA F5 B4 AE 27 20 83 A5 BA D6 A2 87 DF 9D AC 8E 74 E2 BE C0 06 D4 DC 39 4C 87 F6 50 33 21 C3 CC 75 A5 82 73 03 76 0F 2F 63 2D 0A E9 69 8A 20 FA 72 62 61 4D 5D 00 A2 BE 2A 20 BC 14 F5 5D 27 D8 3D 70 1D 6B B5 36 51 F4 21 0D 4F DF 01 0C 58
18 EF 28 C5 6F 12 84 63

******* Resetting core **********
s117 commented 4 years ago

621.wrf_s_ref finished with the aforementioned PK & FESVR.

$ spike -m16384 pk -c wrf_s_base.riscv-m64

Requesting target memory 0x400000000
******* Resetting core ********** 
****Initializing the processor system****
******* Resetting core ********** 
******* Resetting core ********** 
****Initialization complete****
--- WARNING: traj_opt is zero, but num_traj is not zero; setting num_traj to zero.
--- NOTE: sst_update is 0, setting io_form_auxinput4 = 0 and auxinput4_interval = 0 for all domains
--- NOTE: grid_fdda is 0 for domain      1, setting gfdda interval and ending time to 0 for that domain.
--- NOTE: both grid_sfdda and pxlsm_soil_nudge are 0 for domain      1, setting sgfdda interval and ending time to 0 for that domain.
--- NOTE: obs_nudge_opt is 0 for domain      1, setting obs nudging interval and ending time to 0 for that domain.
bl_pbl_physics /= 4, implies mfshconv must be 0, resetting
--- NOTE: num_soil_layers has been set to      4
WRF V3.6.1 MODEL
 *************************************
 Parent domain
 ids,ide,jds,jde            1          74           1          61
 ims,ime,jms,jme           -4          79          -4          66
 ips,ipe,jps,jpe            1          74           1          61
 *************************************
DYNAMICS OPTION: Eulerian Mass Coordinate
   alloc_space_field: domain            1 ,             128355772  bytes allocated
  med_initialdata_input: calling input_input
   Resetting the hypsometric_opt from default value of 2 to 1
Timing for processing wrfinput file (stream 0) for domain        1:    0.16300 elapsed seconds
INPUT LandUse = "USGS"
 LANDUSE TYPE = "USGS" FOUND          33  CATEGORIES           2  SEASONS WATER CATEGORY =           16  SNOW CATEGORY =           24
INITIALIZE THREE Noah LSM RELATED TABLES
 LANDUSE TYPE = USGS FOUND          27  CATEGORIES
 INPUT SOIL TEXTURE CLASSIFICATION = STAS
 SOIL TEXTURE CLASSIFICATION = STAS FOUND          19  CATEGORIES
Timing for processing lateral boundary for domain        1:    0.04600 elapsed seconds
 Tile Strategy is not specified. Assuming 1D-Y
WRF TILE   1 IS      1 IE     74 JS      1 JE     61
WRF NUMBER OF TILES =   1
Timing for main: time 2000-01-24_12:00:10 on domain   1:    6.24700 elapsed seconds
Timing for main: time 2000-01-24_12:00:20 on domain   1:    2.64700 elapsed seconds
......
Timing for main: time 2000-01-25_11:59:50 on domain   1:    2.77500 elapsed seconds
Timing for main: time 2000-01-25_12:00:00 on domain   1:    2.95000 elapsed seconds
Timing for Writing wrfout_d01_2000-01-25_12_00_00 for domain        1:    0.17100 elapsed seconds
d01 2000-01-25_12:00:00 wrf: SUCCESS COMPLETE WRF
cycle = 24420586979968
instret = 24420586979975
******* Resetting core ********** 
s117 commented 4 years ago

Commit d0401da incorporated this patch.