Skip to content

[Swift] Reduce swift_beginAccess cost to optimize performance #3460

@chaokunyang

Description

@chaokunyang

Feature Request

Reduce swift_beginAccess cost to optimize performance

Is your feature request related to a problem? Please describe

Baseline Benchmark Numbers (commit In chaokunyang@cd360e2)

Benchmark ns/op ops/sec
Struct Serialize 58.60 17,064,577
Struct Deserialize 66.56 15,024,390
Sample Serialize 300.69 3,325,648
Sample Deserialize 942.51 1,061,000
MediaContent Serialize 686.30 1,457,097
MediaContent Deserialize 1669.27 599,065
StructList Serialize 364.29 2,745,061
StructList Deserialize 406.82 2,458,083
SampleList Serialize 1420.34 704,059
SampleList Deserialize 4986.70 200,533
MediaContentList Serialize 2994.44 333,952
MediaContentList Deserialize 8014.31 124,777

#3457 (HEAD) Performance

Benchmark ns/op ops/sec Regression
Struct Serialize 106.13 9,422,352 1.81x slower
Struct Deserialize 87.18 11,470,519 1.31x slower
Sample Serialize 290.24 3,445,375 OK (slightly faster)
Sample Deserialize 995.39 1,004,627 1.06x slower
MediaContent Serialize 688.33 1,452,791 OK
MediaContent Deserialize 1635.96 611,262 OK (slightly faster)
StructList Serialize 366.24 2,730,416 OK
StructList Deserialize 376.84 2,653,632 OK (faster)
SampleList Serialize 1445.54 691,784 OK
SampleList Deserialize 4992.00 200,320 OK
MediaContentList Serialize 2991.15 334,320 OK
MediaContentList Deserialize CRASH CRASH FATAL ERROR

Key Issues

  1. Struct Serialize: 1.81x regression (58.60 -> 106.13 ns/op)
  2. Struct Deserialize: 1.31x regression (66.56 -> 87.18 ns/op)

The cost are mostly in swift Access checks

Describe the solution you'd like

Find an approach to reduce such costs

Describe alternatives you've considered

#3355
#3457

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions