スライドは、ここ
この発表でシミュレーション環境があるのを説明しましたが、その環境がリリースされました。
アナウンスによると、0.9.0 のようです。リリースノート
引用 System Compatibility ・Hardware: tightly coupled FPGA products and programmable FPGA acceleration cards for Intel(R) Xeon(R) processors (to be released) ・Operating System: tested on RedHat 7.3, Linux kernels 3.10 through 4.7 ・FIM (FPGA Interface Manager): 6.3.0
sysfs files ; ドキュメント
ホワイトペーパーも公開されています。
ホワイトペーハーを読んだんだけど、最後のサンプルコード、アクセラレータを制御するのは、
CSR_CTLレジスタにコマンドを書き込むだけなんだよね。その前におまじないが多過ぎるよ。
ホワイトペーハーを読んだんだけど、最後のサンプルコード、アクセラレータを制御するのは、
CSR_CTLレジスタにコマンドを書き込むだけなんだよね。その前におまじないが多過ぎるよ。
引用します #include <opae/fpga.h> int main(int argc, char *argv[]) { fpga_properties filter; fpga_token afu_token; fpga_handle afu_handle; fpga_guid guid; uint32_t num_matches = 1; volatile uint64_t *mmio_ptr; volatile void *buf_ptr; uint64_t buf_handle; /* Enumerate */ fpgaCreateProperties(&filter); fpgaPropertiesSetObjectType(filter, FPGA_AFU); /* (GUID 'guid' defined elsewhere) */ fpgaPropertiesSetGUID(filter, guid); fpgaEnumerate(&filter, 1, &afu_token, &num_matches); fpgaDestroyProperties(&filter); /* Open and access */ fpgaOpen(afu_token, &afu_handle, 0); fpgaMapMMIO(afu_handle, 0, &mmio_ptr); fpgaPrepareBuffer(afu_handle, BUF_SIZE, &buf_ptr, &buf_handle, 0); fpgaReset(afu_handle); fpgaWriteMMIO64(afu_handle, 0, CSR_BUF_ADDR, buf_ptr); fpgaWriteMMIO32(afu_handle, 0, CSR_CTL, 1); /* start */ /* other accelerator logic */ fpgaWriteMMIO32(afu_handle, 0, CSR_CTL, 7); /* stop */ fpgaReleaseBuffer(afu_handle, buf_handle); fpgaClose(afu_handle); return 0; }
このFPGA APIを呼び出すアクセラレータというクラスを使うともっと楽になるらしい。
そのアクセラレータクラスのコードは、ここ
このアクセラレータクラスは、libopae-c++.so をリンクすればいいと。
そのアクセラレータクラスのコードは、ここ
このアクセラレータクラスは、libopae-c++.so をリンクすればいいと。