Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Intel FPGA Runtime for OpenCL Software Technology の HAL部分のコードを覗いてみた

はじめに

Intel FPGA Runtime for OpenCL Software Technologyは、下記のようび github に公開されています。

github.com

最近、HAL (レジスタ部分)が公開されたので、みてみます。

HAL 部分を眺める

今回更新されたHALの部分は、

です。

下記の部分は、アドレスマップです。

// Address map
// For unit tests to work, these defines must match those in the unit test
// header file
#define OFFSET_KERNEL_VERSION_ID ((dev_addr_t)0x0000)
#define OFFSET_KERNEL_CRA_SEGMENT ((dev_addr_t)0x0020)
#define OFFSET_SW_RESET ((dev_addr_t)0x0030)
#define OFFSET_KERNEL_CRA ((dev_addr_t)0x1000)
#define OFFSET_CONFIGURATION_ROM ((dev_addr_t)0x2000)
  • 0x0000 : KERNEL_VERSION_ID
  • 0x0020 : KERNEL_CRA_SEGMENT
  • 0x0030 : SW_RESET
  • 0x1000 : KERNEL_CRA
  • 0x2000 : CONFIGURATION_ROM

になっています。

CRA の部分は、下記のようなアドレスマップになっています。

// Byte offsets into the CRA:
// For CSR version >= 5 byte offsets are pushed back with the proper
// value except for the CSR later on in the runtime execution
#define KERNEL_OFFSET_CSR 0
#define KERNEL_OFFSET_PRINTF_BUFFER_SIZE 0x4
#define KERNEL_OFFSET_CSR_PROFILE_CTRL 0xC
#define KERNEL_OFFSET_CSR_PROFILE_DATA 0x10
#define KERNEL_OFFSET_CSR_PROFILE_START_CYCLE 0x18
#define KERNEL_OFFSET_CSR_PROFILE_STOP_CYCLE 0x20
#define KERNEL_OFFSET_FINISH_COUNTER 0x28
#define KERNEL_OFFSET_INVOCATION_IMAGE 0x30

// CSR version >= 5 byte offsets
#define KERNEL_OFFSET_START_REG 0x8

KERNEL_OFFSET_CSR のビット割り当ては、下記のようになっています。

// Bit positions
#define KERNEL_CSR_START 0
#define KERNEL_CSR_DONE 1
#define KERNEL_CSR_STALLED 3
#define KERNEL_CSR_UNSTALL 4
#define KERNEL_CSR_PROFILE_TEMPORAL_STATUS 5
#define KERNEL_CSR_PROFILE_TEMPORAL_RESET 6
#define KERNEL_CSR_LAST_STATUS_BIT KERNEL_CSR_PROFILE_TEMPORAL_RESET
#define KERNEL_CSR_STATUS_BITS_MASK                                            \
  ((unsigned)((1 << (KERNEL_CSR_LAST_STATUS_BIT + 1)) - 1))
#define KERNEL_CSR_LMEM_INVALID_BANK 11
#define KERNEL_CSR_LSU_ACTIVE 12
#define KERNEL_CSR_WR_ACTIVE 13
#define KERNEL_CSR_BUSY 14
#define KERNEL_CSR_RUNNING 15
#define KERNEL_CSR_FIRST_VERSION_BIT 16
#define KERNEL_CSR_LAST_VERSION_BIT 31

どのように使っているかは、コードを詳しく解析しないといけませんが、この部分のコードが公開されて、わかりやすくなったと思います。

おわりに

Slideshare なのが、色々申し訳ないのですが、Altera の時の「Altera SDK for OpenCL」の資料を下記にアップしてあります。