Skip to content

Latest commit

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CU Library Benchmarks

Benchmark results for Solana runtime operations.

Table of Contents

1. Baseline

2. Collections

3. Conversions

4. Math

5. Option

6. Partial Eq

7. Pinocchio Crates

8. Serialization

9. Solana Crates

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

FunctionCU ConsumedCU Adjusted
baseline_empty_function6N/A

2. Collections

2.1 Array

FunctionCU ConsumedCU Adjusted
new104
with_capacity_1082
with_capacity_1002721
assign_u893
assign_u641610
assign_pubkey108102
assign_10_u893
assign_10_u641610
assign_10_pubkey108102
array_u8_32_index93
array_u8_32_get60
array_u8_32_get_ok_or60
array_u8_32_if_let_get93
array_u64_10_index93
array_u64_10_get60
array_u64_10_get_ok_or60
array_u64_10_if_let_get93

2.2 Arrayvec

FunctionCU ConsumedCU Adjusted
u8_new71
push_pubkey2923
push_u642216
push_u82014
u8_with_capacity_1071
u8_with_capacity_10071
push_10_u8104
push_10_u641711
push_10_pubkey8781
get_first_pubkey60
get_10th_pubkey60
find_pubkey_1_iters1812
find_pubkey_10_iters3832
position_pubkey_1_iters4236
position_pubkey_10_iters8781
update_index148
update_get_mut159
update_iter_mut_find2519

2.3 Heapless

FunctionCU ConsumedCU Adjusted
u8_new60
u8_with_capacity_1060
u8_with_capacity_10060
push_u882
push_u6482
push_pubkey159
push_10_u8104
push_10_u641711
push_10_pubkey8882
get_first_pubkey60
get_10th_pubkey60
find_pubkey_1_iters1812
find_pubkey_10_iters3832
position_pubkey_1_iters4236
position_pubkey_10_iters8781
update_index159
update_get_mut159
update_iter_mut_find2418

2.4 Smallvec

FunctionCU ConsumedCU Adjusted
u8_new60
u8_with_capacity_1060
u8_with_capacity_12860
push_u82519
push_u642721
push_pubkey3327
push_10_u8104
push_10_u641711
push_10_pubkey8781
get_first_pubkey60
get_10th_pubkey60
find_pubkey_1_iters2115
find_pubkey_10_iters3832
position_pubkey_1_iters4438
position_pubkey_10_iters8781
update_index148
update_get_mut148
update_iter_mut_find2721

2.5 Tinyvec

FunctionCU ConsumedCU Adjusted
u8_new60
u8_with_capacity_1060
u8_with_capacity_10060
push_u882
push_u6482
push_pubkey159
push_10_u8104
push_10_u641711
push_10_pubkey8781
get_first_pubkey60
get_10th_pubkey60
find_pubkey_1_iters1812
find_pubkey_10_iters3832
position_pubkey_1_iters4236
position_pubkey_10_iters8781
update_index148
update_get_mut148
update_iter_mut_find2519

2.6 Tinyvec Heap

FunctionCU ConsumedCU Adjusted
u8_new60
push_u882
push_u6482
push_pubkey159
push_10_u8159153
push_10_u64151145
push_10_pubkey256250

2.7 Vec

FunctionCU ConsumedCU Adjusted
u8_new93
u8_with_capacity_10113107
u8_with_capacity_100113107
push_u87367
push_u647872
push_pubkey8478
push_10_u8200194
push_10_u64308302
push_10_pubkey376370
push_u8_with_capacity120114
push_u64_with_capacity120114
push_pubkey_with_capacity127121
push_10_u8_with_capacity154148
push_10_u64_with_capacity150144
push_10_pubkey_with_capacity219213
vec_u8_32_index93
vec_u8_32_get82
vec_u8_32_get_ok_or82
vec_u8_32_if_let_get93
vec_u64_10_index93
vec_u64_10_get82
vec_u64_10_get_ok_or82
vec_u64_10_if_let_get93

3. Conversions

3.1 Cast U16

FunctionCU ConsumedCU Adjusted
u16_as_u871
u16_as_u3271
u16_as_u6471
u16_as_usize71

3.2 Cast U32

FunctionCU ConsumedCU Adjusted
u32_as_u871
u32_as_u1671
u32_as_u6471
u32_as_usize71

3.3 Cast U64

FunctionCU ConsumedCU Adjusted
u64_as_u871
u64_as_u1671
u64_as_u3271
u64_as_usize71

3.4 Cast U8

FunctionCU ConsumedCU Adjusted
u8_as_u1671
u8_as_u3271
u8_as_u6471
u8_as_usize71

3.5 From Usize

FunctionCU ConsumedCU Adjusted
try_into_usize_to_u64_unwrap71
try_into_usize_to_u64_map_err60

3.6 Slice To Array

FunctionCU ConsumedCU Adjusted
try_into_slice_to_array_32_unwrap148
try_into_slice_to_array_32_map_err60

3.7 To Usize

FunctionCU ConsumedCU Adjusted
try_into_u64_to_usize_unwrap71
try_into_u64_to_usize_map_err60
try_into_u32_to_usize_unwrap71
try_into_u32_to_usize_map_err60
try_into_u16_to_usize_unwrap71
try_into_u16_to_usize_map_err60
try_into_u8_to_usize_unwrap71
try_into_u8_to_usize_map_err60

4. Math

4.1 Checked Math

FunctionCU ConsumedCU Adjusted
add_u871
add_u1671
add_u3282
add_u6482
add_u128104
sub_u871
sub_u1671
sub_u3282
sub_u6482
sub_u128104
mul_u871
mul_u1671
mul_u3282
mul_u6482
mul_u128104
div_u871
div_u1671
div_u3282
div_u6482
div_u128104

4.2 Saturating Math

FunctionCU ConsumedCU Adjusted
add_u871
add_u1671
add_u3271
add_u6471
add_u12882
sub_u871
sub_u1671
sub_u3271
sub_u6471
sub_u12882
mul_u871
mul_u1671
mul_u3271
mul_u6471
mul_u12882

4.3 Std Math

FunctionCU ConsumedCU Adjusted
add_u860
add_u1660
add_u3260
add_u6460
add_u12860
sub_u860
sub_u1660
sub_u3260
sub_u6460
sub_u12860
mul_u860
mul_u1660
mul_u3260
mul_u6460
mul_u12860
div_u860
div_u1660
div_u3260
div_u6460
div_u12860
add_assign_u871
add_assign_u1671
add_assign_u3271
add_assign_u6471
add_assign_u12893
sub_assign_u871
sub_assign_u1671
sub_assign_u3271
sub_assign_u6471
sub_assign_u12893

5. Option

5.1 Option Checked Add

FunctionCU ConsumedCU Adjusted
checked_add_u8_unwrap71
checked_add_u8_ok_or60
checked_add_u8_ok_or_else60
checked_add_u8_unwrap_or_default71
checked_add_u8_unwrap_or71

5.2 Option If Let

FunctionCU ConsumedCU Adjusted
if_let_some_u860
if_let_some_array148
if_let_some_pubkey148
if_let_some_array_ref60

5.3 Option Pubkey Ref

FunctionCU ConsumedCU Adjusted
pubkey_ref_map_deref60
pubkey_as_ref_map_convert60

5.4 Option Slice Get

FunctionCU ConsumedCU Adjusted
slice_get_array_unwrap148
slice_get_array_ok_or60
slice_get_array_ok_or_else60
slice_get_array_unwrap_or_default148
slice_get_array_unwrap_or148

6. Partial Eq

6.1 Partial Eq Arrays

FunctionCU ConsumedCU Adjusted
array_u8_32_ref71
array_u8_3260
array_u16_3271
array_u32_3271
array_u64_3271

6.2 Partial Eq Neq

FunctionCU ConsumedCU Adjusted
u8_neq93
u16_neq104
u32_neq104
u64_neq104
u128_neq137
array_u8_32_neq_ref2317
array_u8_32_neq2014
array_u8_32_neq_deref2317
array_u16_32_neq3428
array_u32_32_neq3428
array_u64_32_neq3428

6.3 Partial Eq Primitives

FunctionCU ConsumedCU Adjusted
u871
u1671
u3271
u6471
u12871

7. Pinocchio Crates

7.1 Account Info

FunctionCU ConsumedCU Adjusted
key93
owner93
is_signer126
is_writable115
executable126
data_len93
lamports93
data_is_empty126
is_owned_by2115
assign159
is_borrowed126
borrow_lamports_unchecked93
borrow_mut_lamports_unchecked93
borrow_data_unchecked82
borrow_mut_data_unchecked82
try_borrow_lamports159
try_borrow_mut_lamports104
can_borrow_lamports82
can_borrow_mut_lamports82
try_borrow_data148
try_borrow_mut_data115
can_borrow_data82
can_borrow_mut_data82
realloc1610

7.2 Account Meta

FunctionCU ConsumedCU Adjusted
account_meta_array_1060
account_info_array_10_ref60
account_info_array_10_clone60
account_info_array_10_move60
arrayvec_push_account_meta_10179173
arrayvec_push_account_info_10_ref60
arrayvec_push_account_info_10_clone71
arrayvec_push_account_info_10_move71
account_meta_array_10_loop201195
account_info_array_10_ref_loop60
account_info_array_10_clone_loop71
account_info_array_10_move_loop71

7.3 Msg

FunctionCU ConsumedCU Adjusted
msg10_chars110104

7.4 Sysvar Clock

FunctionCU ConsumedCU Adjusted
clock_get_slot169163

7.5 Sysvar Rent

FunctionCU ConsumedCU Adjusted
sysvar_rent_exemption_165150144

8. Serialization

8.1 Bytemuck Deser

FunctionCU ConsumedCU Adjusted
try_pod_read_unaligned2620
pod_read_unaligned2519
try_from_bytes60

8.2 Compressed Account Info

FunctionCU ConsumedCU Adjusted
borsh_deserialize396390
zero_copy_deserialize10296
wincode_deserialize260254
bincode_deserialize32393233
borsh1_deserialize396390
rkyv_zero_copy_deserialize172166
wincode_shortvec_deserialize264258

9. Solana Crates

9.1 Msg

FunctionCU ConsumedCU Adjusted
msg10_chars110104

9.2 Msg Program Id

FunctionCU ConsumedCU Adjusted
msg_program_id70317025

9.3 Pubkey New From Array

FunctionCU ConsumedCU Adjusted
pubkey_new_from_array148

9.4 Pubkey To Bytes

FunctionCU ConsumedCU Adjusted
pubkey_to_bytes148

9.5 Seed References

FunctionCU ConsumedCU Adjusted
collect_vec_1_seed1812
collect_vec_3_seeds5751
collect_vec_16_seeds161155
collect_arrayvec_1_seed93
collect_arrayvec_3_seeds2721
collect_arrayvec_16_seeds156150
collect_arrayvec_3_seeds_16_capacity125119
array_3_seeds2317
array_3_seeds_maybeuninit2014
array_3_seeds_maybeuninit_no_transmute1812
array_3_seeds_ptr1913

About

No description, website, or topics provided.

Resources

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages