|
发表于 2014-10-23 02:35:14
|
显示全部楼层
m_
本帖最后由 Super169 于 2014-10-23 02:38 编辑
樓主很認真的研究, 我也有興趣想多了解一下, 先謝謝樓主的分享.
對於32bit processor 用兩個指令去處理 64bit 的資料, 這方面不難理解.
但之後的例子, 有點疑問. 在以下句式當中,
angleControl = (ANGLE_OFFSET - angle) * ANGLE_P +
(GYRO_OFFSET - gyro) * ANGLE_D;
樓主提到 "如果对目标的变量写入时,势必可能分多次写入, ...." 所以先用一個 local variable 處理.
這點好像有問題, 以我所知, 一般的 compiler, 遇上類似的算式, 轉變出來的 machine code, 應該會先用內部的 register 去儲蓄數值, 每次的結果都保留, 最後才把最終的值放到程式中的 variable, 並不會把中途的給果 copy 到目標的記憶體中. 這樣可大大減少數值 copy 的工序 (因為電腦的計算, 是不會在記憶體中直接進行, 而是在內部的 register 中計算的), 對運行速度有很大幫助.
所以, 即使沒有用一個 local variable 先儲起來, 也不會有大分別. 個人覺得, 那個 float value 的存在, 對樓主所說中斷的情況, 應該是沒有幫助的.
不知我的理解是否有錯誤? 因為我已很久沒碰 machine code 了, 現在是否有新一代的 cpu 指令, 可以直接在 記憶體中進行運算, 我還是不太肯定. 但從效能上看, 應該不會有這樣的改變吧.
|
|