為高頻交易(High Frequency Trading,HFT)公司開發(fā)硬件一直是 FPGA 工程師最熱門的職位之一。由于該行業(yè)提供的高薪,甚至可以被稱為該領(lǐng)域許多人的“夢想職業(yè)”。本文根據(jù)自己和其他人的親身經(jīng)歷,寫了一篇關(guān)于測試職位是什么樣子以及如何準(zhǔn)備面試的文章。
HFT 世界是什么樣的
為了理解這些術(shù)語并以更合適的方式做好準(zhǔn)備,我們首先來談?wù)?HFT 是什么,以及為什么 FPGA 在交易行業(yè)中占有一席之地。
高頻交易是算法交易(https://www.investopedia.com/articles/active-trading/101014/basics-algorithmic-trading-concepts-and-examples.asp)的一種變體,算法交易本身是自動(dòng)日間交易的一種變體,從根本上講,是由算法而不是人來下訂單。人編寫和監(jiān)控算法,但不手動(dòng)下交易。在 HFT 中,所有這些都被推向極致,利用可能只持續(xù)幾毫秒的機(jī)會,通常是套利機(jī)會。為了有效地利用這樣的機(jī)會并賺錢,人們需要在極短的時(shí)間內(nèi)消化市場數(shù)據(jù)、做出決策并下大量訂單。這就是比賽的開始。
在那本令人驚嘆的書《Trading at the speed of Light,光速交易》中,唐納德·麥肯齊解釋了即使在芝加哥場內(nèi)交易的日子里,人們也通過創(chuàng)建系統(tǒng)來適應(yīng)環(huán)境,使某些人的交易速度比其他人快得多。本質(zhì)上,設(shè)計(jì)交易是一個(gè)可以利用信息不對稱的游戲,如果此時(shí)你有一些信息尚未傳達(dá)給其他人,那么就存在一種不對稱,你可以預(yù)測其他人在獲得這些信息后會做什么,并據(jù)此做出決定。這種不對稱是套利機(jī)會和許多其他可以賺錢的復(fù)雜場景的基礎(chǔ)。由于交易所本身所使用的技術(shù)的重大進(jìn)步,這些不對稱的機(jī)會已經(jīng)變得極為罕見且短暫。
然而,事實(shí)是,僅僅因?yàn)殡x交易所較近的人比離交易所較遠(yuǎn)的人獲取數(shù)據(jù)的速度更快,也就無法消除這種不對稱現(xiàn)象。那些能夠更快傳輸數(shù)據(jù)的人也是如此(微波塔、租用光纖線路)。同樣,那些能夠在收到數(shù)據(jù)后做出更快決策的人也可以在這場競爭中領(lǐng)先。這正是 HFT 公司聘請 FPGA 工程師來幫助解決的問題。
交易所允許公司在附近的特定建筑物中設(shè)置計(jì)算機(jī)。無論與哪個(gè)股票經(jīng)紀(jì)人交易,那里可能都有一臺機(jī)器。這稱為主機(jī)托管。交易所確保從這些機(jī)器到交易所計(jì)算機(jī)的光纖長度對于主機(jī)托管中的每個(gè)參與者來說都是完全相同的。
在這種情況下,再靠近交易所的空間已經(jīng)不大了。不過,我們可以做的是盡量減少消化數(shù)據(jù)和發(fā)出訂單所需的時(shí)間。為了實(shí)現(xiàn)這一點(diǎn),這些服務(wù)器在處理速度、內(nèi)存速度和延遲方面都擁有極高的規(guī)格。它們被超頻并優(yōu)化到了它們所能提供的極限。
盡管進(jìn)行了這些優(yōu)化,但 CPU 從根本上來說仍存在兩個(gè)對 HFT 不太友好的”怪癖“。
更高的執(zhí)行延遲
CPU 需要將算法分解為 ISA 并按順序執(zhí)行,盡管速度可能很快,由于關(guān)鍵路徑中有幾個(gè)交互元素,在處理交互元素的過程會產(chǎn)生很大的開銷。
不確定的執(zhí)行延遲
交易算法并不是 CPU 上運(yùn)行的唯一程序。操作系統(tǒng)同時(shí)管理著許多進(jìn)程和線程。這可能導(dǎo)致同一程序在不同執(zhí)行中花費(fèi)的時(shí)間不同。對于那些押注大量資金并保證該過程將花費(fèi)一定時(shí)間的人來說,這可能是一個(gè)巨大的問題。如果只是這一次花費(fèi)的時(shí)間長,就可能意味著巨額損失。
FPGA 如何提供幫助
FPGA 可幫助解決上述兩個(gè)主要問題。它們能解決不確定性問題??梢灶A(yù)先知道某種操作在 FPGA 中需要多少個(gè)時(shí)鐘周期,并確保在整個(gè)操作過程中它不會發(fā)生變化。
FPGA 還經(jīng)常(并非總是)幫助解決高處理延遲的問題。在解碼市場數(shù)據(jù) -> 做出決策 -> 發(fā)送訂單的整個(gè)流程中,多個(gè)子功能可以使用基于 FPGA 的加速。
FPGA 不能很好地處理復(fù)雜的數(shù)學(xué)運(yùn)算,因此工程師們仔細(xì)分析了它們的處理管道,并找出了實(shí)現(xiàn)選擇性過程大幅加速的方法。以下是與 FPGA 連接的交易機(jī)的處理流程:
截至今天,市場上有許多流行的開發(fā)板,通過處理諸如以太網(wǎng)和 PCIe 之類的一些棘手的模塊,為 HFT 相關(guān)的 FPGA 開發(fā)提供工作臺。
面試準(zhǔn)備
現(xiàn)在,對HFT世界有了一個(gè)很好的印象,我希望對使用這些尖端工具的興趣會越來越濃厚。讓我們來談?wù)勛鳛?HFT FPGA 工程師在日常工作中需要具備的技能。
數(shù)字電路和 RTL 設(shè)計(jì)
精通數(shù)字邏輯、Verilog 和微架構(gòu)開發(fā)。
這些是基礎(chǔ)。應(yīng)聘者需要具備編寫 RTL、調(diào)試和在板上部署 RTL 的經(jīng)驗(yàn)。面試通常要求應(yīng)聘者當(dāng)場編寫 RTL。
問題陳述也可能相當(dāng)復(fù)雜和令人費(fèi)解,與傳統(tǒng)的 FPGA 工作(例如網(wǎng)絡(luò)或國防工業(yè))不同。這既考驗(yàn)應(yīng)聘者的智商,也考驗(yàn)應(yīng)聘者的 RTL 技能。
公司非常重視編寫花費(fèi)更少時(shí)間來完成某項(xiàng)任務(wù)的代碼,這通常需要集思廣益,想出完成同一件事的不同方法,并提出一種低延遲的替代方案,同時(shí)保持足夠合理以便在限制時(shí)間內(nèi)實(shí)現(xiàn)。
狀態(tài)機(jī)編碼:狀態(tài)機(jī)是FPGA中另一個(gè)非常常見的模塊。
先進(jìn)先出(FIFO):FIFO 無處不在,同步、異步等各種類型。
驗(yàn)證基礎(chǔ)知識:
如前所述,F(xiàn)PGA 團(tuán)隊(duì)在 HFT 中規(guī)模很小,因此單個(gè)開發(fā)人員必須身兼數(shù)職才能完成一個(gè)項(xiàng)目。此外,由于交易規(guī)模巨大(一次數(shù)百萬美元),設(shè)計(jì)中的一個(gè)錯(cuò)誤就可能導(dǎo)致?lián)p失大量資金,損失金額可能相當(dāng)于幾年的年薪。
因此驗(yàn)證成為一項(xiàng)非常重要的任務(wù)。盡管 FPGA 可以多次重新編程,但風(fēng)險(xiǎn)很高,必須小心謹(jǐn)慎,確保不會出現(xiàn)任何錯(cuò)誤。
為代碼編寫高效的測試臺和測試用例是一項(xiàng)寶貴的技能。對于經(jīng)驗(yàn)更豐富的人,了解 System Verilog 和 UVM 可能是一個(gè)加分點(diǎn)。
網(wǎng)絡(luò)基礎(chǔ)知識:
工作中實(shí)際實(shí)施的項(xiàng)目通常圍繞網(wǎng)絡(luò)展開。
傳入的市場數(shù)據(jù)通過 TCP 通道傳輸,交易機(jī)器需要維護(hù) TCP 連接,這可能是另一個(gè)潛在加速的領(lǐng)域。
類似地,可能需要過濾一些數(shù)據(jù),并將其打包成數(shù)據(jù)包發(fā)送到不同的地方(通常是另一個(gè)交換機(jī))。TCP 或 UDP 可用于通信的這一部分,這也是一種很好的加速方式。
掌握以太網(wǎng)協(xié)議及其細(xì)節(jié)的基本知識在競爭中保持領(lǐng)先大有幫助。
以太網(wǎng)、PCIe 和網(wǎng)絡(luò)架構(gòu)(可選、高級):
許多資金雄厚的大公司自己實(shí)現(xiàn)相關(guān)的協(xié)議棧。但大多數(shù)其他公司直接使用經(jīng)過驗(yàn)證的 IP。只有少數(shù)大公司才需要以下技能。
對于以太網(wǎng),需要掌握的知識非常豐富,包括對 SERDES、PHY 與 PCS 層功能、MAC 層功能以及針對特定目的的潛在優(yōu)化的理解。如果沒有在行業(yè)環(huán)境中進(jìn)行過相關(guān)實(shí)踐,很難獲得這些知識和經(jīng)驗(yàn)。
推薦下面的文章:
https://support.ixiacom.com/sites/default/files/resources/whitepaper/PCS_white_paper.pdf
PCIe 屬于同一類別。它是另一種廣泛的協(xié)議,包含大量細(xì)節(jié)和文檔。除非初學(xué)者使用過它,否則幾乎不可能知道這些。但是,有一些宏觀概念總是好的。
同樣,F(xiàn)PGA 并不是網(wǎng)絡(luò)上唯一的機(jī)器,還有許多其他東西,如交換機(jī)、NIC、其他交易機(jī)器等,它們可以在做出決策時(shí)進(jìn)行交互操作。對網(wǎng)絡(luò)架構(gòu)有充分的了解,并且知道可以調(diào)整哪些方面以獲得那一點(diǎn)點(diǎn)延遲優(yōu)勢,這可能是一個(gè)很大的優(yōu)勢。
實(shí)用技巧:
靜態(tài)時(shí)序分析(STA)
對于初學(xué)者來說,靜態(tài)時(shí)序分析是一種測試邏輯是否滿足 FPGA 時(shí)序約束和可靠功能的方法。如上所述,推薦下面的文章
https://thedatabus.io/interview_list
這一點(diǎn)非常重要。通常,由于對延遲極其敏感,HFT 應(yīng)用的 RTL 是用非常低的流水線編寫的,可以在更少的時(shí)鐘內(nèi)完成大量工作。這顯然會導(dǎo)致綜合、布局布線工具將 LUT 放置得非常近,以改善延遲。
一旦完成并驗(yàn)證了 RTL 編碼,由于這種擁塞,工具可能無法滿足設(shè)計(jì)的 FPGA 的時(shí)序,這種情況很常見。這就需要對 STA 有很深的了解,才能處理邏輯并重新構(gòu)建它以嘗試滿足時(shí)序。
跨時(shí)鐘域 (CDC)
這是任何 RTL 設(shè)計(jì)師都需要的一項(xiàng)基本技能,無論是否需要 HFT。幾乎每個(gè)面試官在完成 STA 后都會詢問你所了解的不同 CDC 技術(shù)。他們甚至可能會問你為什么一種方法比另一種更好,甚至可能讓你編寫一些代碼。
去讀一下關(guān)于 CDC 的這篇文章,或許對你有所幫助
https://thedatabus.in/cdc_complete_guide
假設(shè)使用雙觸發(fā)同步器執(zhí)行 CDC,你會為該元素向 .xdc 文件(約束文件)添加哪些約束?ASFIFO 呢?
區(qū)域優(yōu)化
這與前面提到的時(shí)序優(yōu)化密切相關(guān)。
HFT 應(yīng)用的設(shè)計(jì)通常不是很大,它們不會占據(jù) FPGA 的大部分空間,但邏輯元件彼此之間距離太近,導(dǎo)致?lián)砣l(fā)各種問題。解決此問題的唯一方法是準(zhǔn)確了解 RTL 推斷的內(nèi)容,以及如何對其進(jìn)行修改以減少擁塞。
通常,對 FPGA 架構(gòu)及其基本元素(LUT、BRAM、DSP 等)的良好了解可以很好的做出決策。
此外,與其只是編寫 RTL 并對其進(jìn)行仿真,不如將其貫穿整個(gè)實(shí)施流程(綜合、布局和布線等),這樣可以更深入地了解 RTL 在到達(dá)硅片時(shí)最終會發(fā)生什么。下一步是嘗試以一種能夠減少資源利用率和設(shè)備區(qū)域擁塞的方式控制這種“推斷”。
硬件測試
網(wǎng)絡(luò)知識
https://beej.us/guide/bgnet/html/#intro
把這本書從頭到尾讀一遍,然后嘗試在基于 Linux 的計(jì)算機(jī)上練習(xí)所有內(nèi)容。
以太網(wǎng)實(shí)踐知識
以太網(wǎng)知識是HFT工作的必需品。學(xué)會一些調(diào)試工具(如wireshark等工具)的使用。
在此過程中,還將使用許多 Linux 命令。
C++ 和驅(qū)動(dòng)程序
在任何類型的嵌入式系統(tǒng)中,例如帶有 FPGA 的交易機(jī),都需要編寫與硬件對話的驅(qū)動(dòng)程序。作為 FPGA 開發(fā)人員,需要至少在一定程度上完成這項(xiàng)工作,這足以在真實(shí)硬件上測試設(shè)計(jì),并為實(shí)際軟件人員提供概念驗(yàn)證。
金融和交易知識
這不是必需的,也不會要求了解或?qū)W習(xí)這一點(diǎn)。
DSA/計(jì)算機(jī)科學(xué)技能
通常在編寫任何代碼時(shí),為了處理數(shù)據(jù)或測試硬件,將編寫大量軟件。編寫良好的代碼可以大大減少使其運(yùn)行并完成手頭任務(wù)所需的時(shí)間。本著這種精神,如果面試官問你幾個(gè)與數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的問題,也不要感到驚訝。
總結(jié)
本文是國外的一個(gè)朋友在準(zhǔn)備相關(guān)行業(yè)面試的時(shí)候總結(jié)的一篇文章,和國內(nèi)可能會有所差異,但是可以作為參考,有從事相關(guān)行業(yè)的大佬可以在評論區(qū)聊聊從事該行業(yè)的注意點(diǎn)~
PS:前面提到的《光速交易》這本書非常有趣,即使沒有在相關(guān)行業(yè)工作,它也能讓你對這個(gè)世界有很深的了解。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21792瀏覽量
605096 -
cpu
+關(guān)注
關(guān)注
68文章
10901瀏覽量
212631 -
Linux
+關(guān)注
關(guān)注
87文章
11338瀏覽量
210104
原文標(biāo)題:高頻交易中 FPGA 的作用及面試指南
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論