이번 실험은 fixed point 연산을 활용한 행렬곱을 진행하여 성능을 평가해본다. #ifdef solution5 typedef float Mat_Dtype; typedef ap_fixed Mat_DtypeOp; #endif 이전 코드에서 달라지는 부분은 행렬을 저장하는 array의 type만 재정의 하는 것이다. ap_fixed이 의미 하는 바는 22비트폭에 정수부분에 13비트, 나머지 9비트를 fractional part로 선언하는 것이다. Fixed point 값을 사용하였을 경우 합성 결과는 다음과 같다. 좀더 자세히 보면, 여기서 살펴볼 것은 DSP 사용이 현저히 줄어든 것을 볼 수 있다. 행렬 연산하는 로직 자체도 FF 및 LUT가 크게 줄어든 것을 볼수 있다. 특이한 것은 입력 loop와 ..
이번에는 행렬곱 연산의 정확도를 줄여 성능을 향상시키는 방법에 대한 실험을 진행한다. 기존의 코드와 비교하여 달라지는 좀은 행렬곱 연산시에 사용되는 array의 타입을 float에서 half (float)로 변환하는 것이다. #ifdef solution4 #include typedef float Mat_Dtype; typedef half Mat_DtypeOp;// 16 bit floating point #endif 이전 코드에서 Array의 타입을 half 타입으로 재정의하고 아래와 같이 input_A와 input_B array의 타입을 수정된 half 타입으로 변경하였다. Mat_DtypeOp input_A[MATSIZE][MATSIZE]; #pragma HLS ARRAY_PARTITION dim=2 ..
