�x���¹�������ֱ�ӳ���
�gӭ���R�ЈD�W(w��ng) Ո | ע��

���] OpenCL����(g��u)Ӌ��

�����磺���A��W(xu��)����������r�g��2021-12-01
�_���� 16�_ 퓔�(sh��)�� 223
�� �D �r:¥43.5(7.4��) ���r  ¥59.0 ��䛺�ɿ������T�r
����ُ��܇ �ղ�
�_������ ȫ�����]
?�½������س���
������Ǖ�����>

OpenCL����(g��u)Ӌ�� ���(qu��n)��Ϣ

OpenCL����(g��u)Ӌ�� ������ɫ

FPGA�ڬF(xi��n)�����ϵ�y(t��ng)�O(sh��)Ӌ�а���Խ��Խ��Ҫ�Ľ�ɫ���؄e�ǽ������w�ٰl(f��)չ���˹����ܡ��C(j��)���W(xu��)��(x��)��Ӳ�����ٵ��I(l��ng)�����cGPU���F(xi��n)��ʽ��ȣ�F(xi��n)PGA�����^�õ���Ч�������Ԍ��F(xi��n)�͹��ĺ͵��ӕr�����ЏV韵đ�(y��ng)��ǰ����OpenCL����һ�N�I(y��)�箐��(g��u)Ӌ���(bi��o)��(zh��n)����FPGA�đ�(y��ng)��������Ҫ���Ƅ����ã���δ������FPGAϵ�y(t��ng)�O(sh��)Ӌ����Ҫ���������˱����_չ����FPGAƽ�_��OpenCL�̌W(xu��)�����̲ĽY(ji��)���˹������I(l��ng)���е���(j��ng)�W(w��ng)�j(lu��)�錍�F(xi��n)Ŀ��(bi��o)��ͨ�^�W(xu��)��(x��)TensorFlow����µ���(j��ng)�W(w��ng)�j(lu��)Ӗ(x��n)������(j��ng)�W(w��ng)�j(lu��)�㷨��OpenCL��������(j��ng)�W(w��ng)�j(lu��)��FPGA���F(xi��n)�ȃ�(n��i)��������FPGA���F(xi��n)��(j��ng)�W(w��ng)�j(lu��)�㷨������������������������˹��������㷨������FPGA�_�l(f��)�����P(gu��n)�I(l��ng)�����춨���A(ch��)��

OpenCL����(g��u)Ӌ�� ��(n��i)�ݺ���

������ͨ�^FPGA���F(xi��n)������(j��ng)�W(w��ng)�j(lu��)���������̞���������Ҫ�������ƒ�(n��i)�ݣ� ��TensorFlow�W(xu��)��(x��)����Œ��F(xi��n)��(j��ng)�W(w��ng)�j(lu��)Ӗ(x��n)��������Ӗ(x��n)���õę�(qu��n)ֵ��ƫ������TensorFlow�����Ӗ(x��n)������(j��ng)�W(w��ng)�j(lu��)ʹ��OpenCL�Z�Ԍ��F(xi��n)�������g���ɿɈ�(zh��)���ļ���FPGA�����ļ�����ݔ�딵(sh��)��(j��)����(qu��n)ֵ��ƫ�õȔ�(sh��)��(j��)ͨ�^��̫�W(w��ng)�ڂ�ݔ?sh��)�FPGA�_�l(f��)������FPGA�_�l(f��)�����\(y��n)����(j��ng)�W(w��ng)�j(lu��)�� ���������c������(j��ng)�W(w��ng)�j(lu��)�㷨��OpenCL����������FPGA���F(xi��n)������������(j��ng)�W(w��ng)�j(lu��)�㷨���H����׌�x��������(j��ng)�W(w��ng)�j(lu��)�Ĺ���ԭ�������������߀����ʹ���^�ٵ�OpenCL���a���������ڷ�����(j��ng)�W(w��ng)�j(lu��)�㷨�c���a�Č���(y��ng)�P(gu��n)ϵ�����F(xi��n)OpenCL�Z�ԵČW(xu��)��(x��)�� ������Ubuntu����ϵ�y(t��ng)���\(y��n)�Эh(hu��n)������***�ߵ�FPGA�_�l(f��)��DE10_nano�錍�F(xi��n)ƽ�_��ԓ�_�l(f��)��ߴ��^С�����ڔy��������������r���^�����m������ُ�I���_չ���P(gu��n)�̌W(xu��)��򞡣 �������������Ϣ��Ӌ��C(j��)���Ԅӻ������P(gu��n)���I(y��)�ı��������о�����FPGA�_�l(f��)�ˆT��

OpenCL����(g��u)Ӌ�� Ŀ�

Ŀ�



��1�¾wՓ1

1.1����(g��u)Ӌ��ϵ�y(t��ng)1

1.2OpenCL2

1.3FPGA3

1.4FPGA+CPU����(g��u)Ӌ��ϵ�y(t��ng)5

1.5HDL��OpenCL6

1.5.1OpenCL�ă�(y��u)�c7

1.5.2OpenCL��ȱ�c7

1.6�˹���(j��ng)�W(w��ng)�j(lu��)8

1.6.1�˹���(j��ng)�W(w��ng)�j(lu��)�Ļ�������8

1.6.2�˹���(j��ng)�W(w��ng)�j(lu��)�Ļ�������9

1.6.3�˹���(j��ng)�W(w��ng)�j(lu��)�đ�(y��ng)��10

��(x��)�}112��2��TensorFlow���A(ch��)֪�R���\(y��n)�Эh(hu��n)���14

2.1TensorFlow����14

2.2TensorFlow�ɲ�����ģʽ14

2.3TensorFlow �ɲ�����ģʽ����15

2.3.1���xӋ��D�Ļ�������15

2.3.2�\(y��n)��Ӌ��D�Ļ�������18

2.4TensorFlow�h(hu��n)���23

2.4.1ܛ�����b23

2.4.2TensorFlowܛ���\(y��n)��25

2.4.3Ӌ��D�����\(y��n)�Ќ���25

��(x��)�}230��3��TensorFlow���F(xi��n)��(j��ng)�W(w��ng)�j(lu��)ģ��Ӗ(x��n)���c�yԇ31

3.1��(j��ng)�W(w��ng)�j(lu��)Ӗ(x��n)���c�yԇ�Ļ�������31

3.1.1��(j��ng)�W(w��ng)�j(lu��)��Ӗ(x��n)��31

3.1.2��(j��ng)�W(w��ng)�j(lu��)�Ĝyԇ32

3.2����TensforFlowӖ(x��n)����(j��ng)�W(w��ng)�j(lu��)���F(xi��n)MNIST��(sh��)��(j��)���R�e32

3.2.1MNSIT��(sh��)��(j��)��32

3.2.2Softmax Regressionģ��33

3.2.3MNIST��(sh��)��(j��)�R�e��Softmax Regression��(j��ng)�W(w��ng)�j(lu��)ģ��35

3.2.4MNIST��(sh��)��(j��)�R�e�ľ��e��(j��ng)�W(w��ng)�j(lu��)ģ��40

3.3MNIST��(sh��)��(j��)���D(zhu��n)�Q49

3.3.1����(sh��)��(j��)���D(zhu��n)�Q����txt�ļ�����Ĕ�(sh��)��(j��)49

3.3.2����(sh��)��(j��)���D(zhu��n)�Q����bmp�ļ�����ĈDƬ50

3.3.3��bmp�D(zhu��n)�Q��tfrecords��ʽ54

3.4�xȡtfrecords��ʽ��(sh��)��(j��)���F(xi��n)MNIST�֌����w�R�e56

3.4.1Softmax Regressionģ��56

3.4.2���e��(j��ng)�W(w��ng)�j(lu��)ģ��58

��(x��)�}361��4��OpenCL���A(ch��)63

4.1OpenCL��(bi��o)��(zh��n)���63

4.2OpenCL����������A(ch��)64

4.3OpenCL����ĽM�ɲ���65

4.4OpenCL��ܵ�4�Nģ��66

4.5����**��OpenCL����71

4.5.1kernel����71

4.5.2host����72

4.6OpenCL����֪�R�c78

4.6.1kernel����(sh��)��ʽ78

4.6.2kernel����ģʽ79

4.6.3kernel��ַ�޶���79

4.6.4kernel�Z������80

4.6.5kernel��(sh��)��(j��)���80

4.6.6kernel��������80

��(x��)�}480��5������Intel FPGA��OpenCL�\(y��n)��ƽ�_�82

5.1�OpenCLƽ�_��ܛӲ��Ҫ��82

5.2����OpenCL��(y��ng)�õ�DE10_nano�_�l(f��)�庆��83

5.3ƽ�_����ܛ�����d84

5.3.1Quartus Prime Standard���d84

5.3.2Intel FPGA SDK for OpenCL���d85

5.3.3Intel SoC FPGA EDS���d85

5.4ƽ�_����ܛ�����b86

5.4.1���bQuartus Prime Standard Edition+Intel FPGA SDK for

OpenCL86

5.4.2���bSoCEDS91

5.4.3���bDE10_nano BSP95

5.5�h(hu��n)��׃���O(sh��)��96

5.5.1�h(hu��n)��׃���O(sh��)�ò��E96

5.5.2�h(hu��n)��׃���yԇ97

5.6���gOpenCL kernel98

5.7���ghost ����98

5.8����img�ļ���SD������Windowsϵ�y(t��ng)����ɣ�99

5.9minicom�(q��)�Ӱ��b�c�yԇ101

5.9.1minicom�(q��)�Ӱ��b101

5.9.2minicom ʹ�Üyԇ102

5.10hello world kernel�\(y��n)�Мyԇ103

5.11DE10_nano�cPC���Q��(sh��)��(j��)104

��(x��)�}5108��6�†Ό���(j��ng)�W(w��ng)�j(lu��)�㷨ģ�͵�FPGA���F(xi��n)����109

6.1����OpenCL����(j��ng)�W(w��ng)�j(lu��)�㷨�O(sh��)Ӌ�cFPGA���F(xi��n)�Ļ�������109

6.2�o�[�Όӵĺ�����(j��ng)�W(w��ng)�j(lu��)�㷨ԭ��110

6.3��(j��ng)�W(w��ng)�j(lu��)��TensorFlow���F(xi��n)��Ӗ(x��n)��111

6.4TensorFlow �����ݔ�딵(sh��)��(j��)���D(zhu��n)�Q114

6.5��(j��ng)�W(w��ng)�j(lu��)�㷨��OpenCL���F(xi��n)115

6.5.1kernel���a���������g115

6.5.2host���a���������g116

6.6��(sh��)��(j��)��ֲ��(f��)�Ƶ�FPGA�_�l(f��)��120

6.7FPGA�\(y��n)����(j��ng)�W(w��ng)�j(lu��)123

6.8kernel report.html�ļ��鿴124

6.8.1�ߌ��O(sh��)Ӌ��沼��124

6.8.2ϵ�y(t��ng)��Ҫ125

6.8.3��������127

6.8.4�YԴ����128

6.8.5ϵ�y(t��ng)ҕ�D131

6.9log�ļ��鿴FPGA�YԴʹ�ù�Ӌ��Ϣ133

��(x��)�}6133��7�†Ό���(j��ng)�W(w��ng)�j(lu��)�㷨��kernel����?q��)��F(xi��n)��ʽ�������^135

7.1�����xȡݔ�딵(sh��)��(j��)��OpenCL����135

7.1.1kernel����135

7.1.2host����136

7.1.3��(zh��)�нY(ji��)��142

7.2��(j��ng)�W(w��ng)�j(lu��)�㷨�IJ�ͬkernel���a���F(xi��n)����142

7.2.1single work item��NDRange(private)142

7.2.2local��private(single work item)145

7.2.3local��private(NDRange)148

7.2.4single work item��NDRange(local)150

7.2.5float��char(single work item��local)154

7.2.6float��char(NDRange��private)156

7.3��(j��ng)�W(w��ng)�j(lu��)�㷨��ARM�cFPGA���F(xi��n)��ʽ����159

7.3.1ARM��FPGA(float ��(sh��)��(j��)���)159

7.3.2ARM��FPGA(char��(sh��)��(j��)���)162

7.4host���a�ckernel����(y��ng)165

��(x��)�}7165��8�¾���һ���[�Όӵ���(j��ng)�W(w��ng)�j(lu��)�㷨ģ�͵�OpenCL���F(xi��n)166

8.1һ���[�Όӵĺ�����(j��ng)�W(w��ng)�j(lu��)�㷨ԭ��166

8.2����һ���[�Όӵ���(j��ng)�W(w��ng)�j(lu��)��TensorFlow���F(xi��n)��Ӗ(x��n)��168

8.3����һ���[�Όӵ���(j��ng)�W(w��ng)�j(lu��)�㷨��OpenCL���F(xi��n)171

8.3.1ARM���F(xi��n)171

8.3.2single work item��ʽ��һ��kernel171

8.3.3NDRange��ʽ��һ��kernel174

8.3.4single work item��ʽ���ɂ�kernel176

8.3.5NDRange��ʽ���ɂ�kernel178

8.3.6single work item��ʽ���ɂ�kernel��channel181

8.3.7single work item��ʽ���ɂ�kernel��pipe182

��(x��)�}8186��9�º��׾��e��(j��ng)�W(w��ng)�j(lu��)��OpenCL���F(xi��n)187

9.1���׾��e��(j��ng)�W(w��ng)�j(lu��)�㷨�Y(ji��)��(g��u)�cԭ��187

9.2���׾��e��(j��ng)�W(w��ng)�j(lu��)��TensorFlow���F(xi��n)��Ӗ(x��n)��189

9.3���׾��e��(j��ng)�W(w��ng)�j(lu��)�㷨��OpenCL���F(xi��n)194

9.3.1NDRange���F(xi��n)194

9.3.2single work item���F(xi��n)206

��(x��)�}9218��10���ϙC(j��)���219

���1TensorFlow���A(ch��)����219

���2TensorFlow���F(xi��n)������(j��ng)�W(w��ng)�j(lu��)ģ�͵�Ӗ(x��n)���c�yԇ219

���3TensorFlow���F(xi��n)���e��(j��ng)�W(w��ng)�j(lu��)ģ�͵�Ӗ(x��n)���c�yԇ220

���4TensorFlow���F(xi��n)MNIST��(sh��)��(j��)���D(zhu��n)�Q220

���5�xȡtfrecords��ʽ��(sh��)��(j��)�����F(xi��n)MNIST�֌����w�R�e220

���6DE10_nano�_�l(f��)���\(y��n)��OpenCL����220

���7DE10_nano�cPC��(sh��)��(j��)���Q221

���8OpenCL�����g221

���9����һ��OpenCL����221

���10�Ό���(j��ng)�W(w��ng)�j(lu��)�㷨ģ�͵�FPGA���F(xi��n)����221

���11�Ό���(j��ng)�W(w��ng)�j(lu��)�㷨��kernel����IJ�ͬ���F(xi��n)��ʽ221

���12����һ���[�Όӵ���(j��ng)�W(w��ng)�j(lu��)�㷨ģ�͵�OpenCL���F(xi��n)222

���13���׾��e��(j��ng)�W(w��ng)�j(lu��)�㷨ģ�͵�OpenCL���F(xi��n)223


�����īI(xi��n)224


չ�_ȫ��

OpenCL����(g��u)Ӌ�� ���ߺ���

������,��ʿ���v������Ҫ����FPGA�̌W(xu��)���аl(f��)�ȹ��������ж����FPGA�_�l(f��)��(j��ng)�����ɶ���FPGA�����Ŀ���_�l(f��)�O(sh��)Ӌ�����c�A�鼼�g(sh��)���޹�˾�����_�l(f��)����FPGA��������y��ϵ�y(t��ng)�������Ї���������硰ʮ���塱����Ҏ(gu��)���̲ġ�����O(sh��)Ӌ�Ԅӻ�����

��Ʒ�uՓ(0�l)
���o�uՓ����
�������]
��݋���]
����픲�
�ЈD�W(w��ng)
�ھ��ͷ�