diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/HPLinpack/HPLinpackExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/HPLinpack/HPLinpackExecutorTests.cs index 56b7dde47c..364e17bbc7 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/HPLinpack/HPLinpackExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/HPLinpack/HPLinpackExecutorTests.cs @@ -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 expectedCommands = new List() + { + $"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) diff --git a/src/VirtualClient/VirtualClient.Actions/HPLinpack/HPLinpackExecutor.cs b/src/VirtualClient/VirtualClient.Actions/HPLinpack/HPLinpackExecutor.cs index 7c5a0a38ed..36e7d28d28 100644 --- a/src/VirtualClient/VirtualClient.Actions/HPLinpack/HPLinpackExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/HPLinpack/HPLinpackExecutor.cs @@ -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); } @@ -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); } diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-CPU-HPLINPACK.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-CPU-HPLINPACK.json index 5a77f782b9..29153615b2 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-CPU-HPLINPACK.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-CPU-HPLINPACK.json @@ -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", @@ -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 } diff --git a/website/docs/workloads/hplinpack/hplinpack-profiles.md b/website/docs/workloads/hplinpack/hplinpack-profiles.md index 52048ffb37..4318625948 100644 --- a/website/docs/workloads/hplinpack/hplinpack-profiles.md +++ b/website/docs/workloads/hplinpack/hplinpack-profiles.md @@ -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.

Curently, the supported configurations are :
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.

Curently, the supported configurations are :
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|