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

您的位置:首頁技術文章
文章詳情頁

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

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

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

#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注意到緩存遍歷整個地方訪問數據的燒錄,并將您的代碼轉換為邏輯上相似但效率更高的順序。

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

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

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

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

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

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

解決方法

我有以下帶有幾個大數組的Java代碼,這些數組永遠不會改變其大小。它在我的計算機上運行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的不同數組。

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

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

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

標簽: java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美a在线观看| 久久久久免费| 欧美精品九九| 久久高清精品| 亚洲国内精品| 日韩视频中文| 国产在线日韩| 性色av一区二区怡红| 国产精品毛片在线看| 国产亚洲毛片在线| 蜜桃视频在线观看一区| 亚洲精品九九| 国产精品久久久一区二区| 免费亚洲婷婷| 欧美日韩国产v| 夜夜嗨一区二区三区| 日本电影久久久| 麻豆91在线播放| 欧美久久天堂| 日韩一级网站| 日韩精品成人| 国产麻豆精品| 91亚洲一区| 性欧美xxxx免费岛国不卡电影| 91久久久精品国产| 性色一区二区| 欧美日韩亚洲一区二区三区在线| 久久久久久久久成人| 天堂网av成人| 蜜臀精品久久久久久蜜臀| 欧美日韩国产v| 日韩福利视频导航| 国产精品久久久久久模特 | 国产精选久久| 高清在线一区| 人人爱人人干婷婷丁香亚洲| 久久久国产精品网站| 四虎4545www国产精品| 亚洲欧美日韩国产一区二区| 国产亚洲高清在线观看| 中文字幕在线视频网站| 亚洲黄色在线| 国产精品久久久久久久久免费高清| 久久女人天堂| 国产农村妇女精品一二区| 欧美私人啪啪vps| 日韩美女一区二区三区在线观看| 免费日韩精品中文字幕视频在线| 欧美一级一区| 色88888久久久久久影院| 美国三级日本三级久久99 | 国产精品99免费看| 日韩超碰人人爽人人做人人添| 国产精品不卡| 日韩有吗在线观看| 在线天堂中文资源最新版| 亚洲免费中文| 丰满少妇一区| 亚洲a级精品| 久久久精品网| 久久国产精品色av免费看| 久久裸体视频| 国产精品videossex| 国产精品88久久久久久| 麻豆91小视频| 蜜桃一区二区三区在线观看| 久久影院午夜精品| 日韩高清在线一区| 日韩影院二区| 国产伦精品一区二区三区千人斩| 激情综合在线| 高清av一区| 国产三级一区| 免费久久99精品国产自在现线| 成人在线免费观看91| 亚洲色图网站| 久久精品主播| 久久精品国产久精国产| 一区二区不卡| 国产精品av久久久久久麻豆网| 美女性感视频久久| 天堂va欧美ⅴa亚洲va一国产| 欧美亚洲国产激情| 久久久久久网| 国产精品白丝久久av网站| 午夜久久tv| av综合电影网站| 久久av网址| 777久久精品| 丝袜美腿高跟呻吟高潮一区| 成人羞羞在线观看网站| 精品国产乱码久久久| 欧美伊人影院| 在线一区二区三区视频| 欧美二区视频| 在线亚洲人成| 久久精品午夜| 国产精品**亚洲精品| 亚州国产精品| 日韩中文欧美在线| 九九久久电影| 欧美成人基地| 蜜臀国产一区| 国产成人免费| 精品视频在线一区二区在线| 亚洲精品女人| 亚洲在线观看| 99日韩精品| 午夜久久黄色| 91久久黄色| 韩日一区二区三区| 久久久夜精品| 99久久九九| 久久精品亚洲欧美日韩精品中文字幕| 高清一区二区三区av| 精品国产美女a久久9999| 国产激情精品一区二区三区| 国产欧美日韩免费观看| 国产亚洲精品美女久久 | 亚洲天堂1区| 日韩不卡在线| 国产麻豆久久| 久久蜜桃精品| 欧美日韩国产传媒| 一区福利视频| 石原莉奈在线亚洲三区| 日韩专区一卡二卡| 美女国产一区| 亚洲三级在线| 欧美天堂一区二区| 麻豆国产一区| 日韩伦理在线一区| 天堂日韩电影| 黄色成人在线网址| 亚洲天堂日韩在线| 日韩精品高清不卡| 国产福利一区二区精品秒拍| 久久久久97| 精品视频在线一区二区在线| 亚洲aa在线| 国产女人18毛片水真多18精品| 国产精品亚洲二区| 精品99久久| 日韩中文视频| 国产精品婷婷| 日韩av中文字幕一区| 国产乱子精品一区二区在线观看| 国产日本久久| 麻豆中文一区二区| 欧洲精品一区二区三区| 九一国产精品| 日韩一二三区在线观看| 三级久久三级久久久| 国产亚洲久久| 四虎国产精品免费观看| 日韩欧美字幕| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲综合图色| 国产精品22p| 一区二区三区视频免费观看 | 色88888久久久久久影院| 午夜国产精品视频免费体验区| 亚洲精品国产精品粉嫩| 欧美aⅴ一区二区三区视频| 日本精品不卡| 免费看黄色91| 久久亚洲人体| 欧美精选一区二区三区| 97精品国产99久久久久久免费| 久久99国产精品视频| 欧美日韩国产免费观看视频| 日韩av不卡一区二区| 福利一区二区免费视频 | 精品三级久久| 视频一区欧美日韩| 国产精品多人| 欧美中文一区二区| 日韩激情啪啪| 欧美日韩精品免费观看视欧美高清免费大片| 香蕉视频成人在线观看| 欧美交a欧美精品喷水| 欧美日韩在线二区| 97成人在线| 99热精品久久| 7m精品国产导航在线| 久久婷婷一区| 欧美日韩伊人| 色婷婷狠狠五月综合天色拍| 日韩不卡一二三区| 欧美一区二区性| 青草综合视频| 亚洲午夜视频| 欧美日韩中出| 99国产精品久久久久久久| 久久一区欧美| 亚洲香蕉久久| 色老板在线视频一区二区| 久久精品999| 亚洲女同一区| 久久精品免费看|