Skip to content

sonicfromnewyoke/cu-library

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CU Library Benchmarks

Benchmark results for Solana runtime operations.

Table of Contents

1. Baseline

2. Access

3. Account Info

4. Array

5. Arrayvec

6. Checked Math

7. Conversions

8. Cpi

9. Option

10. Partial Eq

11. Pinocchio Ops

12. Saturating Math

13. Serialization

14. Solana Ops

15. Std Math

16. Vec

Definitions

  • CU Consumed: Total compute units consumed by the profiled function
  • CU Adjusted: Actual operation cost with baseline profiling overhead subtracted (CU Consumed - Baseline CU)
  • Baseline CU: CU consumed by an empty profiled function (#[profile] macro overhead)

1. Baseline

1.1 Lib

Function CU Consumed CU Adjusted
baseline_empty_function 6 N/A

2. Access

2.1 Array U64 10

Function CU Consumed CU Adjusted
array_u64_10_index 9 3
array_u64_10_get 6 0
array_u64_10_get_ok_or 6 0
array_u64_10_if_let_get 9 3

2.2 Array U8 32

Function CU Consumed CU Adjusted
array_u8_32_index 9 3
array_u8_32_get 6 0
array_u8_32_get_ok_or 6 0
array_u8_32_if_let_get 9 3

2.3 Vec U64 10

Function CU Consumed CU Adjusted
vec_u64_10_index 9 3
vec_u64_10_get 8 2
vec_u64_10_get_ok_or 8 2
vec_u64_10_if_let_get 9 3

2.4 Vec U8 32

Function CU Consumed CU Adjusted
vec_u8_32_index 9 3
vec_u8_32_get 8 2
vec_u8_32_get_ok_or 8 2
vec_u8_32_if_let_get 9 3

3. Account Info

3.1 Account Borrows

Function CU Consumed CU Adjusted
is_borrowed 13 7
borrow_lamports_unchecked 10 4
borrow_mut_lamports_unchecked 10 4
borrow_data_unchecked 9 3
borrow_mut_data_unchecked 9 3
try_borrow_lamports 16 10
try_borrow_mut_lamports 11 5
can_borrow_lamports 9 3
can_borrow_mut_lamports 9 3
try_borrow_data 15 9
try_borrow_mut_data 12 6
can_borrow_data 9 3
can_borrow_mut_data 9 3

3.2 Account Checks

Function CU Consumed CU Adjusted
is_signer 13 7
is_writable 12 6
executable 13 7
data_is_empty 13 7

3.3 Account Data

Function CU Consumed CU Adjusted
data_len 10 4
lamports 10 4

3.4 Account Key

Function CU Consumed CU Adjusted
key 10 4

3.5 Account Owner

Function CU Consumed CU Adjusted
owner 10 4

3.6 Account Ownership

Function CU Consumed CU Adjusted
is_owned_by 31 25
assign 17 11

3.7 Account Realloc

Function CU Consumed CU Adjusted
realloc 17 11

4. Array

4.1 Array Assign

Function CU Consumed CU Adjusted
assign_u8 9 3
assign_u64 16 10
assign_pubkey 108 102
assign_10_u8 9 3
assign_10_u64 16 10
assign_10_pubkey 108 102

4.2 Array New

Function CU Consumed CU Adjusted
new 10 4

4.3 Array With Capacity

Function CU Consumed CU Adjusted
with_capacity_10 8 2
with_capacity_100 27 21

5. Arrayvec

5.1 Vec New

Function CU Consumed CU Adjusted
u8_new 7 1

5.2 Vec Push

Function CU Consumed CU Adjusted
push_pubkey 50 44
push_u64 43 37
push_u8 25 19
push_10_u8 10 4
push_10_u64 17 11
push_10_pubkey 88 82

5.3 Vec With Capacity

Function CU Consumed CU Adjusted
u8_with_capacity_10 7 1
u8_with_capacity_100 7 1

6. Checked Math

6.1 Checked Add

Function CU Consumed CU Adjusted
add_u8 7 1
add_u16 7 1
add_u32 8 2
add_u64 8 2
add_u128 10 4

6.2 Checked Div

Function CU Consumed CU Adjusted
div_u8 7 1
div_u16 7 1
div_u32 8 2
div_u64 8 2
div_u128 10 4

6.3 Checked Mul

Function CU Consumed CU Adjusted
mul_u8 7 1
mul_u16 7 1
mul_u32 8 2
mul_u64 8 2
mul_u128 10 4

6.4 Checked Sub

Function CU Consumed CU Adjusted
sub_u8 7 1
sub_u16 7 1
sub_u32 8 2
sub_u64 8 2
sub_u128 10 4

7. Conversions

7.1 Cast U16

Function CU Consumed CU Adjusted
u16_as_u8 7 1
u16_as_u32 7 1
u16_as_u64 7 1
u16_as_usize 7 1

7.2 Cast U32

Function CU Consumed CU Adjusted
u32_as_u8 7 1
u32_as_u16 7 1
u32_as_u64 7 1
u32_as_usize 7 1

7.3 Cast U64

Function CU Consumed CU Adjusted
u64_as_u8 7 1
u64_as_u16 7 1
u64_as_u32 7 1
u64_as_usize 7 1

7.4 Cast U8

Function CU Consumed CU Adjusted
u8_as_u16 7 1
u8_as_u32 7 1
u8_as_u64 7 1
u8_as_usize 7 1

7.5 From Usize

Function CU Consumed CU Adjusted
try_into_usize_to_u64_unwrap 7 1
try_into_usize_to_u64_map_err 6 0

7.6 Slice To Array

Function CU Consumed CU Adjusted
try_into_slice_to_array_32_unwrap 15 9
try_into_slice_to_array_32_map_err 6 0

7.7 To Usize

Function CU Consumed CU Adjusted
try_into_u64_to_usize_unwrap 7 1
try_into_u64_to_usize_map_err 6 0
try_into_u32_to_usize_unwrap 7 1
try_into_u32_to_usize_map_err 6 0
try_into_u16_to_usize_unwrap 7 1
try_into_u16_to_usize_map_err 6 0
try_into_u8_to_usize_unwrap 7 1
try_into_u8_to_usize_map_err 6 0

8. Cpi

8.1 Cpi Array Loop

Function CU Consumed CU Adjusted
account_meta_array_10_loop 201 195
account_info_array_10_ref_loop 6 0
account_info_array_10_clone_loop 8 2
account_info_array_10_move_loop 8 2

8.2 Cpi Arrays

Function CU Consumed CU Adjusted
account_meta_array_10 6 0
account_info_array_10_ref 6 0
account_info_array_10_clone 6 0
account_info_array_10_move 6 0

8.3 Cpi Arrayvec

Function CU Consumed CU Adjusted
arrayvec_push_account_meta_10 182 176
arrayvec_push_account_info_10_ref 6 0
arrayvec_push_account_info_10_clone 8 2
arrayvec_push_account_info_10_move 8 2

9. Option

9.1 Option Checked Add

Function CU Consumed CU Adjusted
checked_add_u8_unwrap 7 1
checked_add_u8_ok_or 6 0
checked_add_u8_ok_or_else 6 0
checked_add_u8_unwrap_or_default 8 2
checked_add_u8_unwrap_or 8 2

9.2 Option If Let

Function CU Consumed CU Adjusted
if_let_some_u8 6 0
if_let_some_array 15 9
if_let_some_pubkey 15 9
if_let_some_array_ref 6 0

9.3 Option Pubkey Ref

Function CU Consumed CU Adjusted
pubkey_ref_map_deref 6 0
pubkey_as_ref_map_convert 6 0

9.4 Option Slice Get

Function CU Consumed CU Adjusted
slice_get_array_unwrap 15 9
slice_get_array_ok_or 6 0
slice_get_array_ok_or_else 6 0
slice_get_array_unwrap_or_default 15 9
slice_get_array_unwrap_or 15 9

10. Partial Eq

10.1 Partial Eq Arrays

Function CU Consumed CU Adjusted
array_u8_32_ref 7 1
array_u8_32 6 0
array_u16_32 7 1
array_u32_32 7 1
array_u64_32 7 1

10.2 Partial Eq Neq

Function CU Consumed CU Adjusted
u8_neq 9 3
u16_neq 9 3
u32_neq 10 4
u64_neq 10 4
u128_neq 13 7
array_u8_32_neq_ref 35 29
array_u8_32_neq 31 25
array_u8_32_neq_deref 35 29
array_u16_32_neq 33 27
array_u32_32_neq 34 28
array_u64_32_neq 34 28

10.3 Partial Eq Primitives

Function CU Consumed CU Adjusted
u8 7 1
u16 7 1
u32 7 1
u64 7 1
u128 7 1

11. Pinocchio Ops

11.1 Msg

Function CU Consumed CU Adjusted
msg10_chars 110 104

11.2 Sysvar Clock

Function CU Consumed CU Adjusted
clock_get_slot 171 165

11.3 Sysvar Rent

Function CU Consumed CU Adjusted
sysvar_rent_exemption_165 151 145

12. Saturating Math

12.1 Saturating Add

Function CU Consumed CU Adjusted
add_u8 7 1
add_u16 7 1
add_u32 7 1
add_u64 7 1
add_u128 8 2

12.2 Saturating Mul

Function CU Consumed CU Adjusted
mul_u8 7 1
mul_u16 7 1
mul_u32 7 1
mul_u64 7 1
mul_u128 8 2

12.3 Saturating Sub

Function CU Consumed CU Adjusted
sub_u8 7 1
sub_u16 7 1
sub_u32 7 1
sub_u64 7 1
sub_u128 8 2

13. Serialization

13.1 Compressed Account Info

Function CU Consumed CU Adjusted
borsh_deserialize 427 421
zero_copy_deserialize 130 124
wincode_deserialize 594 588
bincode_deserialize 3230 3224
borsh1_deserialize 427 421
rkyv_zero_copy_deserialize 178 172
wincode_shortvec_deserialize 612 606

14. Solana Ops

14.1 Msg

Function CU Consumed CU Adjusted
msg10_chars 110 104

14.2 Msg Program Id

Function CU Consumed CU Adjusted
msg_program_id 6954 6948

14.3 Pubkey New From Array

Function CU Consumed CU Adjusted
pubkey_new_from_array 15 9

14.4 Pubkey To Bytes

Function CU Consumed CU Adjusted
pubkey_to_bytes 15 9

15. Std Math

15.1 Add Assign

Function CU Consumed CU Adjusted
add_assign_u8 7 1
add_assign_u16 7 1
add_assign_u32 7 1
add_assign_u64 7 1
add_assign_u128 9 3

15.2 Std Add

Function CU Consumed CU Adjusted
add_u8 6 0
add_u16 6 0
add_u32 6 0
add_u64 6 0
add_u128 6 0

15.3 Std Div

Function CU Consumed CU Adjusted
div_u8 6 0
div_u16 6 0
div_u32 6 0
div_u64 6 0
div_u128 6 0

15.4 Std Mul

Function CU Consumed CU Adjusted
mul_u8 6 0
mul_u16 6 0
mul_u32 6 0
mul_u64 6 0
mul_u128 6 0

15.5 Std Sub

Function CU Consumed CU Adjusted
sub_u8 6 0
sub_u16 6 0
sub_u32 6 0
sub_u64 6 0
sub_u128 6 0

15.6 Sub Assign

Function CU Consumed CU Adjusted
sub_assign_u8 7 1
sub_assign_u16 7 1
sub_assign_u32 7 1
sub_assign_u64 7 1
sub_assign_u128 9 3

16. Vec

16.1 Vec New

Function CU Consumed CU Adjusted
u8_new 9 3

16.2 Vec Push

Function CU Consumed CU Adjusted
push_u8 73 67
push_u64 78 72
push_pubkey 85 79
push_10_u8 202 196
push_10_u64 313 307
push_10_pubkey 380 374
push_u8_with_capacity 120 114
push_u64_with_capacity 120 114
push_pubkey_with_capacity 128 122
push_10_u8_with_capacity 153 147
push_10_u64_with_capacity 149 143
push_10_pubkey_with_capacity 218 212

16.3 Vec With Capacity

Function CU Consumed CU Adjusted
u8_with_capacity_10 113 107
u8_with_capacity_100 113 107

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%