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/>
     ...