Antiparallel SIMD dependency
by Daniel Cheung
HTML
<div id="app"></div>
React
function getWork(time, rank, p, a_len, b_len) {
let length = 0;
let coordinates = Array(a_len);
for (let a = rank; a < a_len; a += p) {
const b = time - a;
if (b < 0 || b >= b_len) {
// too early or near end
continue;
}
coordinates[length++] = [a, b];
}
return {
length,
coordinates
};
}
const App = () => {
const [a_len, setALength] = React.useState(6);
const [b_len, setBLength] = React.useState(9);
const time = b_len + a_len - 1;
const Case = ({t, rank, p}) => {
const work = getWork(t, rank, p, a_len, b_len);
return (
<div style={{
border: '1px solid #000',
padding: '0.5em 1em',
margin: '0.5em',
borderRadius: '5px'
}}>
<p><b>t={t}, rank={rank}, p={p}</b></p>
<p>Length: {work.length}</p>
<p>Coords:</p>
<ul>
{[...Array(work.length).keys()].map((i) => (
<li>({work.coordinates[i][0]}, {work.coordinates[i][1]})</li>
))}
</ul>
</div>
)
}
return (
<div>
<div>
<label>A length</label>
<input type='range' min={0} max={20} value={a_len} onChange={e => setALength(parseInt(e.target.value))}/>
<span>({a_len})</span>
</div>
<div>
<label>B length</label>
<input type='range' min={0} max={20} value={b_len} onChange={e => setBLength(parseInt(e.target.value))}/>
<span>({b_len})</span>
</div>
<table>
{[...Array(time).keys()].map((y, i) => {
return (
<tr key={i}>
<td>t={y}</td>
{[...Array(a_len).keys()].map((a, i) => {
const b = y-a;
return(
<td>
{b >= 0 && b < b_len && <b>({a}, {b})</b>}
</td>
)
})}
</tr>
)
})}
</table>
<hr/>
...