hipBLASLt icon indicating copy to clipboard operation
hipBLASLt copied to clipboard

Add sample code for A_SCALE_POINTER and B_SCALE_POINTER

Open brianchooou opened this issue 1 year ago • 3 comments

Title:

Add sample code for HIPBLASLT_MATMUL_DESC_A_SCALE_POINTER and HIPBLASLT_MATMUL_DESC_B_SCALE_POINTER

Description:

This PR introduces sample code that demonstrates the usage of HIPBLASLT_MATMUL_DESC_A_SCALE_POINTER and HIPBLASLT_MATMUL_DESC_B_SCALE_POINTER for scaling matrices A and B, respectively, during matrix multiplication operations. The purpose of this code is to showcase how these scaling factors can be applied independently to matrices A and B, as well as to ensure their correct implementation when used together.

Key Highlights:

  • Independent Scaling of Matrices A and B: The provided sample code allows the user to apply different scaling factors to matrices A and B, which is crucial for fine-tuning matrix multiplication operations in various scenarios.

  • Combined Scaling Verification: After validating the individual effects of scale A and scale B, the sample code also demonstrates the combined usage of both scaling factors to ensure they work correctly together.

Validation Process:

The validation process was divided into three main parts to ensure the correctness of the scaling operations:

1. Validation on Matrix A with scale A:

  • The matrix A scaling factor was tested with values 0.5, 1.0, and 2.0. The results confirmed that the scaling factor for matrix A was correctly applied, as evidenced by the changes in the resulting matrix after multiplication.

  • Command executed: root@bfb46c6707f5:/Workspace/briachou/hipBLASLt/build/release# ./clients/staging/sample_hipblaslt_scale_a

  • Example Output:

Running with Scale A = 0.5

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 0.0000 64.0000 64.0000 200.0000 0.0000 76.0000 0.0000 204.0000 200.0000 192.0000 76.0000 200.0000 64.0000 192.0000 204.0000 64.0000 76.0000 76.0000 192.0000 200.0000 0.0000 204.0000 204.0000 64.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 200.0000 192.0000 72.0000 192.0000 192.0000 64.0000 192.0000 72.0000 192.0000 200.0000 76.0000 192.0000 64.0000 64.0000 76.0000 76.0000 0.0000 192.0000 204.0000 192.0000 72.0000 64.0000 192.0000 192.0000 76.0000

Matrix D after multiplication (128x128), showing top-left 5x5: -36.5000 25.0000 7.0000 12.0000 -36.0000 -1.0000 7.5000 -21.0000 3.0000 16.0000 -16.0000 -36.0000 43.5000 -25.5000 5.0000 -17.0000 8.5000 50.0000 42.5000 13.0000 12.5000 -14.0000 3.5000 -2.0000 -29.5000

Scale A on device: 0.5000 Matrix multiplication completed successfully.

Running with Scale A = 1.0000

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 0.0000 64.0000 64.0000 200.0000 0.0000 76.0000 0.0000 204.0000 200.0000 192.0000 76.0000 200.0000 64.0000 192.0000 204.0000 64.0000 76.0000 76.0000 192.0000 200.0000 0.0000 204.0000 204.0000 64.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 200.0000 192.0000 72.0000 192.0000 192.0000 64.0000 192.0000 72.0000 192.0000 200.0000 76.0000 192.0000 64.0000 64.0000 76.0000 76.0000 0.0000 192.0000 204.0000 192.0000 72.0000 64.0000 192.0000 192.0000 76.0000

Matrix D after multiplication (128x128), showing top-left 5x5: -73.0000 50.0000 14.0000 24.0000 -72.0000 -2.0000 15.0000 -42.0000 6.0000 32.0000 -32.0000 -72.0000 87.0000 -51.0000 10.0000 -34.0000 17.0000 100.0000 85.0000 26.0000 25.0000 -28.0000 7.0000 -4.0000 -59.0000

Scale A on device: 1.0000 Matrix multiplication completed successfully.

Running with Scale A = 2.0000

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 0.0000 64.0000 64.0000 200.0000 0.0000 76.0000 0.0000 204.0000 200.0000 192.0000 76.0000 200.0000 64.0000 192.0000 204.0000 64.0000 76.0000 76.0000 192.0000 200.0000 0.0000 204.0000 204.0000 64.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 200.0000 192.0000 72.0000 192.0000 192.0000 64.0000 192.0000 72.0000 192.0000 200.0000 76.0000 192.0000 64.0000 64.0000 76.0000 76.0000 0.0000 192.0000 204.0000 192.0000 72.0000 64.0000 192.0000 192.0000 76.0000

Matrix D after multiplication (128x128), showing top-left 5x5: -146.0000 100.0000 28.0000 48.0000 -144.0000 -4.0000 30.0000 -84.0000 12.0000 64.0000 -64.0000 -144.0000 174.0000 -102.0000 20.0000 -68.0000 34.0000 200.0000 170.0000 52.0000 50.0000 -56.0000 14.0000 -8.0000 -118.0000

Scale A on device: 2.0000 Matrix multiplication completed successfully.

2. Validation on Matrix B with scale B:

  • Similarly, the scaling factor for matrix B was tested with values 0.5, 1.0, and 2.0. The results confirmed that the scaling factor for matrix B was correctly applied, with corresponding changes in the output matrix.

  • Command executed: root@bfb46c6707f5:/Workspace/briachou/hipBLASLt/build/release# ./clients/staging/sample_hipblaslt_scale_b

  • Example Output:

Running with Scale B = 0.5

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 192.0000 200.0000 72.0000 192.0000 200.0000 192.0000 200.0000 204.0000 64.0000 72.0000 76.0000 64.0000 0.0000 204.0000 76.0000 72.0000 0.0000 192.0000 0.0000 64.0000 64.0000 0.0000 204.0000 72.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 64.0000 64.0000 64.0000 204.0000 192.0000 72.0000 200.0000 204.0000 76.0000 204.0000 192.0000 76.0000 64.0000 72.0000 72.0000 192.0000 76.0000 0.0000 192.0000 0.0000 76.0000 204.0000 76.0000 64.0000 0.0000

Matrix D after multiplication (128x128), showing top-left 5x5: 5.0000 3.0000 -21.0000 -7.0000 -1.0000 20.0000 29.5000 -10.5000 9.0000 -10.0000 11.5000 25.0000 39.0000 -15.5000 -10.0000 -18.0000 13.5000 4.0000 -5.0000 13.5000 -9.5000 11.5000 31.5000 -35.0000 0.0000

Scale B on device: 0.5000 Matrix multiplication completed successfully.

Running with Scale B = 1.0000

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 192.0000 200.0000 72.0000 192.0000 200.0000 192.0000 200.0000 204.0000 64.0000 72.0000 76.0000 64.0000 0.0000 204.0000 76.0000 72.0000 0.0000 192.0000 0.0000 64.0000 64.0000 0.0000 204.0000 72.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 64.0000 64.0000 64.0000 204.0000 192.0000 72.0000 200.0000 204.0000 76.0000 204.0000 192.0000 76.0000 64.0000 72.0000 72.0000 192.0000 76.0000 0.0000 192.0000 0.0000 76.0000 204.0000 76.0000 64.0000 0.0000

Matrix D after multiplication (128x128), showing top-left 5x5: 10.0000 6.0000 -42.0000 -14.0000 -2.0000 40.0000 59.0000 -21.0000 18.0000 -20.0000 23.0000 50.0000 78.0000 -31.0000 -20.0000 -36.0000 27.0000 8.0000 -10.0000 27.0000 -19.0000 23.0000 63.0000 -70.0000 0.0000

Scale B on device: 1.0000 Matrix multiplication completed successfully.

Running with Scale B = 2.0000

Returned Algorithm Count: 2 Using workspace size: 33554432 Solution 0: state=SUCCESS Solution 1: state=SUCCESS

Matrix A before multiplication (128x128), showing top-left 5x5: 64.0000 192.0000 200.0000 72.0000 192.0000 200.0000 192.0000 200.0000 204.0000 64.0000 72.0000 76.0000 64.0000 0.0000 204.0000 76.0000 72.0000 0.0000 192.0000 0.0000 64.0000 64.0000 0.0000 204.0000 72.0000

Matrix B before multiplication (128x128), showing top-left 5x5: 64.0000 64.0000 64.0000 204.0000 192.0000 72.0000 200.0000 204.0000 76.0000 204.0000 192.0000 76.0000 64.0000 72.0000 72.0000 192.0000 76.0000 0.0000 192.0000 0.0000 76.0000 204.0000 76.0000 64.0000 0.0000

Matrix D after multiplication (128x128), showing top-left 5x5: 20.0000 12.0000 -84.0000 -28.0000 -4.0000 80.0000 118.0000 -42.0000 36.0000 -40.0000 46.0000 100.0000 156.0000 -62.0000 -40.0000 -72.0000 54.0000 16.0000 -20.0000 54.0000 -38.0000 46.0000 126.0000 -140.0000 0.0000

Scale B on device: 2.0000 Matrix multiplication completed successfully.

3. Combined Validation of scale A and scale B:

  • Finally, the combined application of scale A = 0.5 and scale B = 2.0 was tested. The results verified that both scaling factors were correctly applied simultaneously, and the matrix multiplication produced the expected results.

  • Command executed: root@splinter-126-wr-d6:/src/hipBLASLt/build/release# ./clients/staging/sample_hipblaslt_gemm_with_scale_a_b

  • Example Output:

Running with Scale A = 0.5 and Scale B = 2 Matrix multiplication completed successfully.

This PR provides a clear and comprehensive demonstration of how to use the HIPBLASLT_MATMUL_DESC_A_SCALE_POINTER and HIPBLASLT_MATMUL_DESC_B_SCALE_POINTER descriptors in HIPBLASLt. The validation results confirm the correct implementation and functionality of these scaling operations, both independently and in combination.

brianchooou avatar Aug 12 '24 03:08 brianchooou

Need to update description and test result for sample_hipblaslt_gemm_with_scale_a_b

jichangjichang avatar Aug 12 '24 09:08 jichangjichang

Need to update description and test result for sample_hipblaslt_gemm_with_scale_a_b

I've updated the PR with an improved description and the latest test results for sample_hipblaslt_gemm_with_scale_a_b. The update now clearly explains the simultaneous use of scale A and scale B and includes detailed validation for both independent and combined scaling effects.

Please review and let me know if any further changes are needed.

brianchooou avatar Aug 13 '24 02:08 brianchooou

Please resolve merge conflicts or close this PR to complete the task of importing PRs from this repo to the monorepo.

jayhawk-commits avatar Jun 20 '25 18:06 jayhawk-commits