Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

260 lines
6.1 KiB
Plaintext

// Copyright (C) 2021 - 2022 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import graph;
import utils;
import stats;
texpreamble("\usepackage{bm}");
size(400, 300, IgnoreAspect);
//scale(Linear,Linear);
scale(Log, Log);
//scale(Log,Linear);
//scale(Linear,Log);
// TODO:
// ai for real/complex transforms
// ai for 2D, 3D transforms
// get list of devices and set hw specs automatically
string[] listfromcsv(string input)
{
string list[] = new string[];
int n = -1;
bool flag = true;
int lastpos;
while(flag) {
++n;
int pos = find(input, ",", lastpos);
string found;
if(lastpos == -1) {
flag = false;
found = "";
}
found = substr(input, lastpos, pos - lastpos);
if(flag) {
list.push(found);
lastpos = pos > 0 ? pos + 1 : -1;
}
}
return list;
}
bool dolegend = true;
string filenames = "";
string legendlist = "";
real[] floatsizes = new real[];
real xmin = -inf;
real xmax = inf;
bool doxticks = true;
bool doyticks = true;
string xlabel = "Arithmetic intensity";
string ylabel = "GFLOPS, [s${}^{-1}$]";
bool normalize = false;
real bw = 1024;
real floatgflops = 13571.47;
real doublegflops = 3426.89;
usersetting();
if(filenames == "")
filenames = getstring("filenames");
else
write("filenames:\"", filenames+"\"");
string[] testlist = listfromcsv(filenames);
if(floatsizes.length == 0) {
for(int i = 0; i < testlist.length; ++i) {
floatsizes.push(getreal("floatsize"));
}
} else {
write("floatsizes: ", floatsizes);
}
bool myleg = ((legendlist == "") ? false: true);
string[] legends=set_legends(legendlist);
bool plotxval(real x) {
return x >= xmin && x <= xmax;
}
real intensity(real n, real floatsize) {
// assumes double-precision, ie 8 bytes per values.
return 5.0 * n * log(n) / (floatsize * n);
}
real[][] x = new real[testlist.length][];
real[][] y = new real[testlist.length][];
real[][] ly = new real[testlist.length][];
real[][] hy = new real[testlist.length][];
real[][][] data = new real[testlist.length][][];
real xmax = 0.0;
real xmin = inf;
real minai = inf;
real maxai = -inf;
for(int n = 0; n < testlist.length; ++n)
{
string filename = testlist[n];
data[n] = new real[][];
write(filename);
int dataidx = 0;
real[] nvals = new real[];
bool moretoread = true;
file fin = input(filename);
while(moretoread) {
int a = fin;
if(a == 0) {
moretoread = false;
break;
}
int N = fin;
if (N > 0) {
xmax = max(a,xmax);
xmin = min(a,xmin);
real ai = intensity(a, floatsizes[n]);
minai = min(ai, minai);
maxai = max(ai, maxai);
x[n].push(ai);
nvals.push(a);
data[n][dataidx] = new real[N];
real vals[] = new real[N];
for(int i = 0; i < N; ++i) {
vals[i] = fin;
}
for(int i = 0; i < N; ++i) {
data[n][dataidx][i] = vals[i];
}
//if(a >= xmin && a <= xmax) {
real[] medlh = mediandev(vals);
y[n].push(medlh[0]);
ly[n].push(medlh[1]);
hy[n].push(medlh[2]);
//}
++dataidx;
}
}
pen p = Pen(n);
if(n == 2)
p = darkgreen;
pair[] z;
pair[] dp;
pair[] dm;
for(int i = 0; i < x[n].length; ++i) {
if(plotxval(x[n][i])) {
z.push((x[n][i] , y[n][i]));
dp.push((0 , y[n][i] - hy[n][i]));
dm.push((0 , y[n][i] - ly[n][i]));
}
}
errorbars(z, dp, dm, p);
if(n == 1)
p += dashed;
if(n == 2)
p += Dotted;
guide g = scale(0.5mm) * unitcircle;
marker mark = marker(g, Draw(p + solid));
bool drawme[] = new bool[x[n].length];
for(int i = 0; i < drawme.length; ++i) {
drawme[i] = true;
if(!plotxval(x[n][i]))
drawme[i] = false;
if(y[n][i] <= 0.0)
drawme[i] = false;
}
draw(graph(x[n], y[n], drawme), p,
myleg ? legends[n] : texify(filename), mark);
for(int i = 0; i < nvals.length; ++i) {
if (i%4 == 0)
label((string)nvals[i], Scale((x[n][i], y[n][i])),NE);
}
}
real floatai = floatgflops/bw;
pair pf0 = (floatai, floatgflops);
pair pf1 = (minai, floatgflops * minai / floatai);
pair pf2 = (maxai, floatgflops);
dot(Scale(pf0));
// dot(Scale(pf1));
// dot(Scale(pf2));
//yequals(floatgflops);
draw(Scale(pf0)--Scale(pf1));
draw(Scale(pf0)--Scale(pf2));
real doubleai = doublegflops/bw;
//dot(Scale((doubleai,doublegflops)));
pair pd0 = (doubleai, doublegflops);
pair pd2 = (maxai, doublegflops);
dot(Scale(pd0));
// dot(Scale(pd2));
//yequals(floatgflops);
draw(Scale(pd0)--Scale(pf1));
draw(Scale(pd0)--Scale(pd2));
//yequals(doublegflops);
if(doxticks)
xaxis(xlabel,BottomTop,LeftTicks);
else
xaxis(xlabel);
yaxis(ylabel,LeftRight, LeftTicks, ymax = max(floatgflops,doublegflops));
if(dolegend)
attach(legend(),point(plain.E),(20*plain.E) );