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