我已經(jīng)花了一個星期的時間來嘗試完成這項任務(wù),我希望這里有人可以帶領(lǐng)我走上正確的道路。讓我從講師的指示開始:您的分配與我們的第一個實驗室分配相反,后者是優(yōu)化素數(shù)程序。您在此作業(yè)中的目的是簡化程序,即使其運行緩慢。這兩個都是占用大量CPU的程序。他們需要幾秒鐘才能在我們的實驗室PC上運行。您可能無法更改算法。要優(yōu)化程序,請使用有關(guān)Intel i7管道運行方式的知識。想像一下重新排序指令路徑以引入WAR,RAW和其他危險的方法。想辦法最大限度地減少緩存的有效性。令人作嘔的無能。作業(yè)中選擇了油石或蒙特卡洛程序。緩存效率注釋大部分僅適用于Whetstone,但我選擇了蒙特卡洛模擬程序:// Un-modified baseline for pessimization, as given in the assignment#include <algorithm> // Needed for the "max" function#include <cmath>#include <iostream>// A simple implementation of the Box-Muller algorithm, used to generate// gaussian random numbers - necessary for the Monte Carlo method below// Note that C++11 actually provides std::normal_distribution<> in // the <random> library, which can be used instead of this functiondouble gaussian_box_muller() { double x = 0.0; double y = 0.0; double euclid_sq = 0.0; // Continue generating two uniform random variables // until the square of their "euclidean distance" // is less than unity do { x = 2.0 * rand() / static_cast<double>(RAND_MAX)-1; y = 2.0 * rand() / static_cast<double>(RAND_MAX)-1; euclid_sq = x*x + y*y; } while (euclid_sq >= 1.0); return x*sqrt(-2*log(euclid_sq)/euclid_sq);}// Pricing a European vanilla call option with a Monte Carlo methoddouble monte_carlo_call_price(const int& num_sims, const double& S, const double& K, const double& r, const double& v, const double& T) { double S_adjust = S * exp(T*(r-0.5*v*v)); double S_cur = 0.0; double payoff_sum = 0.0; for (int i=0; i<num_sims; i++) { double gauss_bm = gaussian_box_muller(); S_cur = S_adjust * exp(sqrt(v*v*T)*gauss_bm); payoff_sum += std::max(S_cur - K, 0.0); } return (payoff_sum / static_cast<double>(num_sims)) * exp(-r*T);}}我所做的更改似乎使代碼的運行時間增加了一秒鐘,但是我不確定要更改哪些內(nèi)容以停止管道而不添加代碼。指向正確方向的指示非常棒,我感謝您的任何答復(fù)。
3 回答

一只萌萌小番薯
TA貢獻(xiàn)1795條經(jīng)驗 獲得超7個贊
您可以long double
用于計算。在x86上,它應(yīng)該是80位格式。只有舊的x87 FPU支持此功能。
x87 FPU的一些缺點:
缺少SIMD,可能需要更多說明。
基于堆棧,對于超標(biāo)量和流水線架構(gòu)存在問題。
單獨的寄存器組非常小,可能需要更多與其他寄存器的轉(zhuǎn)換和更多的存儲器操作。
在Core i7上,SSE有3個端口,x87只有2個端口,處理器可以執(zhí)行較少的并行指令。
- 3 回答
- 0 關(guān)注
- 480 瀏覽
添加回答
舉報
0/150
提交
取消