日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java使用數(shù)組的速度比C ++中std :: vector快8倍。我做錯什么了?

瀏覽:243日期:2024-04-29 17:33:27
如何解決Java使用數(shù)組的速度比C ++中std :: vector快8倍。我做錯什么了??

這是C ++版本,其中每個節(jié)點的數(shù)據(jù)收集到一個結(jié)構(gòu)中,并使用該結(jié)構(gòu)的單個向量:

#include <vector>#include <cmath>#include <iostream>class Floodisolation {public: Floodisolation() : numberOfCells(20000), data(numberOfCells) { } ~Floodisolation(){ } void isUpdateNeeded() { for (int i = 0; i < numberOfCells; ++i) { data[i].h = data[i].h + 1; data[i].floodedCells = !data[i].floodedCells; data[i].floodedCellsTimeInterval = !data[i].floodedCellsTimeInterval; data[i].qInflow = data[i].qInflow + 1; data[i].qStartTime = data[i].qStartTime + 1; data[i].qEndTime = data[i].qEndTime + 1; data[i].lowerFloorCells = data[i].lowerFloorCells + 1; data[i].cellLocationX = data[i].cellLocationX + 1; data[i].cellLocationY = data[i].cellLocationY + 1; data[i].cellLocationZ = data[i].cellLocationZ + 1; data[i].levelOfCell = data[i].levelOfCell + 1; data[i].valueOfCellIds = data[i].valueOfCellIds + 1; data[i].h0 = data[i].h0 + 1; data[i].vU = data[i].vU + 1; data[i].vV = data[i].vV + 1; data[i].vUh = data[i].vUh + 1; data[i].vVh = data[i].vVh + 1; data[i].vUh0 = data[i].vUh0 + 1; data[i].vVh0 = data[i].vVh0 + 1; data[i].ghh = data[i].ghh + 1; data[i].sfx = data[i].sfx + 1; data[i].sfy = data[i].sfy + 1; data[i].qIn = data[i].qIn + 1; for(int j = 0; j < nEdges; ++j) {data[i].flagInterface[j] = !data[i].flagInterface[j];data[i].typeInterface[j] = data[i].typeInterface[j] + 1;data[i].neighborIds[j] = data[i].neighborIds[j] + 1; } } }private: const int numberOfCells; static const int nEdges = 6; struct data_t { bool floodedCells = 0; bool floodedCellsTimeInterval = 0; double valueOfCellIds = 0; double h = 0; double h0 = 0; double vU = 0; double vV = 0; double vUh = 0; double vVh = 0; double vUh0 = 0; double vVh0 = 0; double ghh = 0; double sfx = 0; double sfy = 0; double qInflow = 0; double qStartTime = 0; double qEndTime = 0; double qIn = 0; double nx = 0; double ny = 0; double floorLevels = 0; int lowerFloorCells = 0; bool floorCompleteleyFilled = 0; double cellLocationX = 0; double cellLocationY = 0; double cellLocationZ = 0; int levelOfCell = 0; bool flagInterface[nEdges] = {}; int typeInterface[nEdges] = {}; int neighborIds[nEdges] = {}; }; std::vector<data_t> data;};int main() { std::ios_base::sync_with_stdio(false); Floodisolation isolation; clock_t start = clock(); for (int i = 0; i < 400; ++i) { if(i % 100 == 0) { std::cout << i << 'n'; } isolation.isUpdateNeeded(); } clock_t stop = clock(); std::cout << 'Time: ' << difftime(stop, start) / 1000 << 'n';}

現(xiàn)場例子

現(xiàn)在的時間是Java版本速度的2倍。(846比1631)。

奇怪的是,JIT注意到緩存遍歷整個地方訪問數(shù)據(jù)的燒錄,并將您的代碼轉(zhuǎn)換為邏輯上相似但效率更高的順序。

我還關(guān)閉了stdio同步,這僅在將printf/ scanf與C std::cout和混合使用時才需要std::cin。碰巧的是,您只打印了一些值,但是C 的默認打印行為過于偏執(zhí)且效率低下。

如果nEdges不是實際的常數(shù)值,則必須從中刪除3個“數(shù)組”值struct。那不應(yīng)該造成巨大的性能損失。

struct通過減小大小對值進行排序,從而減少內(nèi)存占用量(并在無關(guān)緊要的情況下對訪問進行排序),可能還可以提高性能。但是我不確定。

一條經(jīng)驗法則是,單個高速緩存未命中的開銷比指令高100倍。安排數(shù)據(jù)具有緩存一致性具有很多價值。

如果struct無法將數(shù)據(jù)重新排列到中,則可以將迭代更改為依次遍歷每個容器。

順便說一句,請注意Java和C 版本在它們之間有一些細微的差異。我發(fā)現(xiàn)的一個問題是Java版本在“ for each edge”循環(huán)中有3個變量,而C只有2個變量。我使我的代碼與Java匹配。不知道還有沒有

解決方法

我有以下帶有幾個大數(shù)組的Java代碼,這些數(shù)組永遠不會改變其大小。它在我的計算機上運行1100毫秒。

我在C ++中實現(xiàn)了相同的代碼并使用std::vector。

在我的計算機上,運行完全相同的代碼的C ++實現(xiàn)的時間為8800 ms。我做錯了什么,所以運行緩慢?

基本上,代碼執(zhí)行以下操作:

for (int i = 0; i < numberOfCells; ++i) {h[i] = h[i] + 1;floodedCells[i] = !floodedCells[i];floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i];qInflow[i] = qInflow[i] + 1;}

它遍歷大小約為20000的不同數(shù)組。

您可以在以下鏈接下找到這兩種實現(xiàn):

Java:https://ideone.com/R8KqjTC ++:https://ideone.com/Lu7RpE

(由于時間限制,在ideone上,我只能運行400次而不是2000次循環(huán)。但是即使在這里,也有3次相差)

標簽: java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日日夜夜免费精品视频| 日韩中文一区二区| 国产午夜久久av| 国产调教精品| 国产成人1区| 国产成年精品| 青青久久av| 国产亚洲在线| 69堂精品视频在线播放| 麻豆免费精品视频| 日韩在线中文| 亚洲综合中文| 精品一区av| 久久久人人人| 亚洲另类av| 国产欧美欧美| 91精品韩国| 亚洲丝袜啪啪| 久久中文字幕一区二区三区| 日韩黄色大片| 欧美日韩日本国产亚洲在线 | 国产综合色产| 中文无码日韩欧| 精品黄色一级片| 久久久久久久久丰满| 综合激情网站| 国产一区二区三区国产精品| 国产精品88久久久久久| 日韩国产精品久久久| 日韩在线第七页| 亚洲精品日本| 91精品xxx在线观看| 日韩专区一卡二卡| 国产精品视频首页| 免费成人网www| 国产欧美日韩影院| 亚洲精品91| 精品亚洲精品| 亚洲麻豆一区| 久久在线视频免费观看| 国产欧美一区二区三区精品观看| 亚洲性视频h| 国产精品久久久久久模特| 欧美va天堂| 久久影院一区二区三区| 亚洲一区二区三区免费在线观看 | 蜜桃91丨九色丨蝌蚪91桃色| 久久精品三级| 午夜视频一区二区在线观看| 亲子伦视频一区二区三区| 日韩黄色免费网站| 美女少妇全过程你懂的久久| 美腿丝袜亚洲三区| 亚洲乱码久久| 黄色av日韩| 电影亚洲精品噜噜在线观看 | 男女激情视频一区| 国产 日韩 欧美一区| 国产精品多人| 免费观看在线综合色| 色综合www| 久久精品国产99国产| 日本在线一区二区三区| 欧美精品一线| 99久久久久国产精品| 精品一级视频| 国产精东传媒成人av电影| 亚洲精品伊人| 在线免费观看亚洲| 午夜欧美精品久久久久久久| 日韩一区三区| 福利一区二区三区视频在线观看| 97久久中文字幕| 亚洲我射av| 香蕉成人久久| 五月天久久网站| 久久免费大视频| 日本免费久久| 国产欧洲在线| 精品美女在线视频| 精品一区二区三区中文字幕视频| 欧美影院视频| 国产亚洲观看| 国产精品地址| 久久精品日韩欧美| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 日韩欧美2区| 亚洲综合小说| 中文字幕一区日韩精品| 亚洲免费毛片| 欧美日韩夜夜| 精品中文在线| 日韩精品dvd| 日韩三区免费| 亚洲网站视频| 午夜一级在线看亚洲| 视频一区视频二区中文字幕| 中文字幕成人| 青青伊人久久| 久久激五月天综合精品| 欧美精品中文字幕亚洲专区| 欧美日韩一区二区三区不卡视频| 日本午夜精品一区二区三区电影| 欧美日韩亚洲一区在线观看| 国产精品欧美一区二区三区不卡| 麻豆中文一区二区| 久久久久久一区二区| 韩国三级一区| 女同性一区二区三区人了人一| 99热精品在线观看| 日韩影院免费视频| 欧美日韩一区二区三区不卡视频 | 亚洲自啪免费| 日本一不卡视频| 精品一区二区三区中文字幕在线| 国产高清不卡| 欧美在线综合| 国产精品国产三级在线观看| 91一区二区三区四区| 亚洲第一区色| 亚洲精品影视| 精品日本视频| 2023国产精品久久久精品双| 亚洲欧美在线综合| 麻豆国产精品| 一级欧洲+日本+国产| 天堂va欧美ⅴa亚洲va一国产| 久久国产生活片100| 六月婷婷综合| 亚洲天堂日韩在线| 精品久久免费| 尤物在线精品| 国产精品115| 欧美午夜不卡影院在线观看完整版免费| 中文字幕一区日韩精品| 精品一区二区三区在线观看视频| 欧美精品一二| 国产精品久av福利在线观看| 欧美肉体xxxx裸体137大胆| 亚洲综合五月| 日韩欧美视频专区| 天堂久久av| 亚洲国产福利| 视频一区日韩精品| 免费看av不卡| 日韩精品免费观看视频| 日韩国产一区二区三区| 亚洲精品影院在线观看| 日韩国产欧美| 欧美日本三区| 激情婷婷久久| 精品女同一区二区三区在线观看| 乱人伦精品视频在线观看| 国际精品欧美精品| 中文在线日韩| 久久婷婷久久| 国产精成人品2018| 久久福利毛片| 日韩欧美精品| 久久狠狠久久| 爽爽淫人综合网网站| 三级在线看中文字幕完整版| 日韩av一区二区三区| 激情久久五月| 成人国产精品久久| 欧美自拍一区| 亚洲天堂免费| 欧美午夜精彩| 国产福利91精品一区二区| 日韩高清一区在线| 99视频在线精品国自产拍免费观看| 久久久久久色| 影院欧美亚洲| 麻豆国产在线| 国产精品任我爽爆在线播放| 蜜芽一区二区三区| 一区二区亚洲精品| 成人免费网站www网站高清| 精品资源在线| 国产日产精品_国产精品毛片 | 精品三区视频| 国产日韩欧美一区二区三区在线观看 | 亚洲一区欧美激情| 天堂√8在线中文| 国产一区二区三区四区五区 | 伊人久久高清| jizzjizz中国精品麻豆| 欧美激情视频一区二区三区免费 | 国模 一区 二区 三区| 国产一区二区精品福利地址| 国产精品一区二区三区av麻| 日本欧美在线| 日本国产欧美| 日韩国产成人精品| 日韩一二三区在线观看| 蜜桃视频免费观看一区| 蜜桃伊人久久| 久久国产福利| 一区二区三区四区在线观看国产日韩| 亚洲综合三区|