이 논문에서는 FPGA에서 OpenCL을 이용하여 LSTM을 최적화하는 방법 두 가지를 제안한다.
첫 번째 방법은 LSTM 신경망의 각 층을 순차로 처리하지만 한 층을 여러CU(compute unit)로 병렬 처리해서 성능을 향상시킨다.
LSTM 각 층을 처리하기위해 입력, 계산, 출력을 담당하는 세 개의 커널을 사용한다.
계산을 담당하는 커널이 대부분의 처리시간을 소모하기 때문에 이 커널에 여러 CU를 할당한다.
두 번째 방법은 LSTM 각 층별로 독립적인 커널을 생성한다.
동일한 계산을 수행하는 커널을 층별로 따로 생성하는 방법은 중복 코드를 사용해서 소프트웨어공학에서 별로 선호하지는 않지만 신경망의 처리를 파이프라인으로 만들 수 있다.
FPGA에서는 각 커널마다 하나 이상의 CU가 할당되기 때문에 이 방법을 사용하여 LSTM 각 층을 병렬 처리할 수 있다.
두 가지 방법을 비교 실험한 결과로는 두 개 층 정도의 얕은 LSTM 신경망에서는 첫 번째 방법의 성능이 좋게 나오고 그 이상의 깊은 LSTM 신경망에서는 두번째 방법의 성능이 좋게 나온다.