Floating point registers are not preserved
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 38/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Quiet
- Domain
- hpc, operating-systems
Research direction
Start at the jump_fcontext implementation and compare its history around v1.61, when the floating-point preservation argument was removed. Read the linked POWER9 register-usage specification, focusing on nonvolatile FP14-FP31. Done means the context-switch behavior correctly preserves those registers on PPC64 and the reason for the historical change is understood.
Written by the indexing model from the issue text.
Description
Our project (https://github.com/DARMA-tasking/vt) uses Boost context for our task-based runtime system for scientific applications in HPC. Recently, we found a bug in a scientific application that uses our library after a context switch that we finally figured was due to not preserving nonvolatile floating point registers (in this case we were running on PPC64, but I think the problem is more prevalent). According to the POWER9 specification, FP14-FP31 are nonvolatile and must be preserved for correct context switching (https://www.ibm.com/docs/en/aix/7.2?topic=overview-register-usage-conventions).
I've noticed looking back in the history that floating point preservation was dropped around v1.61. The argument for preserving in jump_fcontext was dropped. I'm trying to understand why this functionality was lost.
@olk
- Dominant language
- Assembly
- Stars
- 371
- Forks
- 185
- Avg merge
- 4d 13h
- Merged PRs (30d)
- 1
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from boostorg/context
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Support for the PAC Open
Difficulty 5/5 Over a week Newbie friendliness 25/100
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
Difficulty 3/5 1-2 days Newbie friendliness 42/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
All issues in boostorg/context
Similar issues
-
src/mergeVS-omp/kernels.h: Violates OpenMP restriction (break statement used with OpenMP for loop) Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
C++ Enhancement Examples
Difficulty 2/5 1-3 hours Newbie friendliness 84/100