第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在英特爾Sandybridge系列CPU中取消優(yōu)化管道程序

在英特爾Sandybridge系列CPU中取消優(yōu)化管道程序

C++
慕慕森 2019-12-07 13:30:12
我已經(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的一些缺點:

  1. 缺少SIMD,可能需要更多說明。

  2. 基于堆棧,對于超標(biāo)量和流水線架構(gòu)存在問題。

  3. 單獨的寄存器組非常小,可能需要更多與其他寄存器的轉(zhuǎn)換和更多的存儲器操作。

  4. 在Core i7上,SSE有3個端口,x87只有2個端口,處理器可以執(zhí)行較少的并行指令。


查看完整回答
反對 回復(fù) 2019-12-07
  • 3 回答
  • 0 關(guān)注
  • 480 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號