Skip to content

Added Arm Perf Lib v25 support for HPLinpack Workload #491

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,45 @@ await executor.ExecuteAsync(EventContext.None, CancellationToken.None)
}
}

[Test]
[TestCase(PlatformID.Unix, Architecture.Arm64)]
public async Task HPLinpackExecutorExecutesWorkloadAsExpectedWithPerformanceLibraries25OnUbuntuArm64Platform(PlatformID platform, Architecture architecture)
{
this.SetupTest(platform, architecture);
this.mockFixture.Parameters["PerformanceLibrary"] = "ARM";
this.mockFixture.Parameters["PerformanceLibraryVersion"] = "25.04.1";

using (TestHPLExecutor executor = new TestHPLExecutor(this.mockFixture))
{
List<string> expectedCommands = new List<string>()
{
$"sudo chmod +x {this.mockFixture.PlatformSpecifics.Combine(this.mockPackage.Path, "ARM", "arm-performance-libraries_25.04.1.sh")}",
$"sudo ./arm-performance-libraries_25.04.1.sh -a",
$"sudo bash -c \"source make_generic\"",
$"mv Make.UNKNOWN Make.Linux_GCC",
$"ln -s {this.mockFixture.PlatformSpecifics.Combine(executor.GetHPLDirectory, "setup", "Make.Linux_GCC" )} Make.Linux_GCC",
$"make arch=Linux_GCC",
$"sudo runuser -u {Environment.UserName} -- mpirun --use-hwthread-cpus -np {this.mockFixture.Parameters["NumberOfProcesses"] ?? Environment.ProcessorCount} ./xhpl"
};

this.mockFixture.ProcessManager.OnCreateProcess = (command, arguments, workingDirectory) =>
{
expectedCommands.Remove(expectedCommands[0]);
if (arguments == $"runuser -u {Environment.UserName} -- mpirun --use-hwthread-cpus -np {this.mockFixture.Parameters["NumberOfProcesses"] ?? Environment.ProcessorCount} ./xhpl")
{
this.mockFixture.Process.StandardOutput.Append(this.exampleResults);
}

return this.mockFixture.Process;
};

await executor.ExecuteAsync(EventContext.None, CancellationToken.None)
.ConfigureAwait(false);

Assert.AreEqual(expectedCommands.Count, 0);
}
}

private class TestHPLExecutor : HPLinpackExecutor
{
public TestHPLExecutor(MockFixture fixture)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,12 @@ private async Task ConfigurePerformanceLibrary(EventContext telemetryContext, Ca
case "24.10":
this.hplPerfLibraryInfo = "arm-performance-libraries_24.10";
break;
case "25.04.1":
this.hplPerfLibraryInfo = "arm-performance-libraries_25.04.1";
break;
default:
throw new WorkloadException(
$"The HPL workload is currently only supports the perf libraries versions 23.04.1 and 24.10 on the following platform/architectures: " +
$"The HPL workload is currently only supports the perf libraries versions 23.04.1, 24.10 and 25.04.1 on the following platform/architectures: " +
$"'{PlatformSpecifics.LinuxArm64}'.",
ErrorReason.PlatformNotSupported);
}
Expand Down Expand Up @@ -372,9 +375,13 @@ await this.fileSystem.File.ReplaceInFileAsync(
await this.fileSystem.File.ReplaceInFileAsync(
makeFilePath, @"LAlib *= *[^\n]*", "LAlib = /opt/arm/armpl_24.10_gcc/lib/libarmpl.a", cancellationToken);
break;
case "25.04.1":
await this.fileSystem.File.ReplaceInFileAsync(
makeFilePath, @"LAlib *= *[^\n]*", "LAlib = /opt/arm/armpl_25.04.1_gcc/lib/libarmpl.a", cancellationToken);
break;
default:
throw new WorkloadException(
$"The HPL workload is currently only supports the perf libraries versions 23.04.1 and 24.10 on the following platform/architectures: " +
$"The HPL workload is currently only supports the perf libraries versions 23.04.1, 24.10 and 25.04.1 on the following platform/architectures: " +
$"'{PlatformSpecifics.LinuxArm64}'.",
ErrorReason.PlatformNotSupported);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
"SupportedPlatforms": "linux-x64,linux-arm64",
"SupportedOperatingSystems": "Ubuntu22"
},
"Parameters": {
"CompilerVersion": "",
"ProblemSizeN": null,
"BlockSizeNB": "256",
"NumberOfProcesses": "{LogicalCoreCount}",
"BindToCores": false,
"CCFLAGS": "-O3 -march=native"
},
"Parameters": {
"CompilerVersion": "",
"ProblemSizeN": null,
"BlockSizeNB": "256",
"NumberOfProcesses": "{LogicalCoreCount}",
"PerformanceLibrary": null,
"PerformanceLibraryVersion": "",
"BindToCores": false,
"CCFLAGS": "-O3 -march=native"
},
"Actions": [
{
"Type": "HPLinpackExecutor",
Expand Down Expand Up @@ -59,7 +61,7 @@
"Parameters": {
"Scenario": "DownloadHPLPerformanceLibrariesPackage",
"BlobContainer": "packages",
"BlobName": "hplperformancelibraries.1.1.1.zip",
"BlobName": "hplperformancelibraries.1.1.2.zip",
"PackageName": "hplperformancelibraries",
"Extract": true
}
Expand Down
2 changes: 1 addition & 1 deletion website/docs/workloads/hplinpack/hplinpack-profiles.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ This profile is designed to identify general/broad regressions when compared aga
| ProblemSizeN | The order of coefficient matrix of set of linear equations that we want to solve | Convert.ToInt32(Math.Sqrt(totalAvailableMemoryKiloBytes * 1024 * 0.8 / 8)) (This value is dependent on memory of machine, uses 80% of available memory) |
| BlockSizeNB | The partitioning blocking factor | 256 |
| PerformanceLibrary | Optional. This parameter allows you to specify machine-specific performance libraries. You can assign values such as ARM, AMD, and INTEL to utilize the corresponding performance libraries. | null |
| PerformanceLibraryVersion | Required when using PerformanceLibrary parameter. Specify the version of the performance libraries you would like to use.<br/><br/>Curently, the supported configurations are :<br/>ARM - 23.04.1 , 24.10 | null | | CCFLAGS | compiler flags| -O3 -march=native |
| PerformanceLibraryVersion | Optional, but required when using PerformanceLibrary parameter. Specify the version of the performance libraries you would like to use.<br/><br/>Curently, the supported configurations are :<br/>ARM - 23.04.1, 24.10 and 25.04.1 | null | | CCFLAGS | compiler flags| -O3 -march=native |
| BindToCores | If you want to bind the process to single core | false|
| NumberOfProcesses | Number of processes to be launched for the parallel program | No. of logical cores|

Expand Down
Loading