ARM-software / acle

Arm C Language Extensions (ACLE)
Other
88 stars 54 forks source link

FP8 ACLE specification #323

Closed momchil-velikov closed 3 weeks ago

momchil-velikov commented 4 months ago

name: Pull request about: Technical issues, document format problems, bugs in scripts or feature proposal.


Thank you for submitting a pull request!

If this PR is about a bugfix:

Please use the bugfix label and make sure to go through the checklist below.

If this PR is about a proposal:

We are looking forward to evaluate your proposal, and if possible to make it part of the Arm C Language Extension (ACLE) specifications.

We would like to encourage you reading through the contribution guidelines, in particular the section on submitting a proposal.

Please use the proposal label.

As for any pull request, please make sure to go through the below checklist.

Checklist: (mark with X those which apply)

andrewcarlotti commented 4 months ago

I'd prefer slightly different naming for the intrinsics and new types. Specifically:

  1. Can we call the new types floatm8_t, floatm8x16_t, svfloatm8_t, etc.? This would be more consistent with existing type names while still preserving the "modal" distinction. It also makes the type name more easily distinguishable from FPMR values (which use fpm_t).

  2. Can we drop the _fpm suffix from all the intrinsic names, and instead represent the modality in the type suffix (by replacing _f8 with _fm8 wherever it appears)?

Combining these, my proposal is to replace, for example, float16x4_t vdot_lane_f16_f8_fpm(float16x4_t vd, fpm8x8_t vn, fpm8x8_t vm, __builtin_constant_p(lane), fpm_t fpm) with float16x4_t vdot_lane_f16_fm8(float16x4_t vd, floatm8x8_t vn, floatm8x8_t vm, __builtin_constant_p(lane), fpm_t fpm).

momchil-velikov commented 3 months ago
  1. Can we call the new types floatm8_t, floatm8x16_t, svfloatm8_t, etc.?
  2. Can we drop the _fpm suffix from all the intrinsic names, and instead represent the modality in the type suffix (by replacing _f8 with _fm8 wherever it appears)?

I am in favour of both proposals.

rsandifo-arm commented 3 months ago

This might have been mentioned already, but the new vector types should also be added to svset_neonq, svget_neonq and svdup_neonq.

momchil-velikov commented 3 months ago
  1. Can we call the new types floatm8_t, floatm8x16_t, svfloatm8_t, etc.?
  2. Can we drop the _fpm suffix from all the intrinsic names, and instead represent the modality in the type suffix (by replacing _f8 with _fm8 wherever it appears)?

I am in favour of both proposals.

Coming up Soon(tm).

momchil-velikov commented 3 months ago

This might have been mentioned already, but the new vector types should also be added to svset_neonq, svget_neonq and svdup_neonq.

My next step is to add intrinsics for the untyped SVE/SME instructions, that would include these too.

momchil-velikov commented 2 months ago

I'd prefer slightly different naming for the intrinsics and new types. Specifically:

  1. Can we call the new types floatm8_t, floatm8x16_t, svfloatm8_t, etc.? This would be more consistent with existing type names while still preserving the "modal" distinction. It also makes the type name more easily distinguishable from FPMR values (which use fpm_t).

This part done.

paulwalker-arm commented 2 months ago
  1. Can we call the new types floatm8_t, floatm8x16_t, svfloatm8_t, etc.? This would be more consistent with existing type names while still preserving the "modal" distinction. It also makes the type name more easily distinguishable from FPMR values (which use fpm_t).

As an amendment that follows the scheme used when going from float16 -> bfloat16 what about mfloat8_t, mfloat8x16_t, svmfloat8_t with "m" meaning "modal"?

momchil-velikov commented 2 months ago

Things renamed according to the above naming scheme.

momchil-velikov commented 1 month ago

Squished everything and rebased, not supposed to contain content changes.

momchil-velikov commented 1 month ago

Last update was completely botched, now fixed.