performance 相关问题

有关测量或改进代码和应用程​​序效率的问题。

使用 Python 绘制数据集的性能图

我正在分析一些数据集。好的,它们是这种形式 |产品 | POD |成功率 | |:---- |:------:| -----:| |中国共产党 | 0.85 | 0.85 0.4 | 0.4 |弧 | 0.74 | 0.74 0.34 | 0.34 |谭 | 0.65 | 0.65 0.28 | 0.28 | ...

回答 1 投票 0

寻找一个最简单(也是最快)的 Windows、C 或 C++ 的 TCP 套接字编程示例

我正在寻找一个最简单(也是最快)的Windows TCP套接字编程示例,C或C ++,无论哪种都可以更快地完成,发送简单的数据,例如1个字节,或几个字节...

回答 8 投票 0

如何在使用 React Material ui 对话框时防止重新渲染

我正在一个项目中使用react-material-ui库中的模态,我注意到在尝试打开/关闭对话框组件时出现了副作用。试试这个代码(代码沙箱): 从...导入 { useState }

回答 1 投票 0

有没有办法在torch中用张量替换整数?

说我有 a = torch.tensor([[1,2,3],[2,1,3]]) 我想分别用 [1,2,3],[4,5,6],[7,8,9] 替换整数 1,2,3 。 意义, 我想 结果 = torch.tensor([[1,2,3,4,5,6,7,8,9],[4,5,6,1,2,...

回答 1 投票 0

避免频率缩放以提高 SIMD FMA 性能

以下程序在运行不同次数的迭代时显示出非常可变的性能。原因可能是什么?如何获得一致的测量结果? 该程序描述了最大

回答 1 投票 0

将未更改的计算移出循环会提高程序的性能吗?

在《计算机系统:程序员的视角》中,有一个优化程序性能的示例。将“A”-“a”移出循环会进一步提高程序的性能吗?为什么不是

回答 2 投票 0

如何在 r 中高效地进行两个矩阵的元素乘法

我想对两个大矩阵进行元素乘法,我想尽可能最有效地做到这一点。 目前我正在使用基本运算符 * 例如,如果我有一个如下所示的 DF1: A ...

回答 1 投票 0

提高 R 中迭代的性能

我最初创建了一个 for 循环来计算许多变量,这些变量有时依赖于先前的迭代,例如[i]和[i-1]。 为了提高更大数据集的性能,我尝试...

回答 1 投票 0

如何提高 Iframe 嵌入视频的加载速度?

stackoverflow 上可爱的人们大家好。 我在 Dreamweaver 中使用 html 和 css 创建网站。 我从电视档案库中获取视频,并使用 iframe 将它们嵌入到我的网站上。它...

回答 1 投票 0

为tuntap接口启用GSO似乎会减慢流量

我遇到了与内部制作的VPN相关的相对令人失望的表现。 界面 速度兆比特/秒 恩普5s0 950 屯0 550 我开始相信罪魁祸首(以及其他一些人)......

回答 1 投票 0

RandomSearchCV 和数据泄露

我正在寻找避免数据泄漏的最佳实践。我有 1 个需要模式插补的特征。该模型是XGBoost分类器。 这些是我计划的步骤: 随机分割数据 80%

回答 1 投票 0

内存级别并行性 (MLP) 测量

我需要找到内存级别并行性(MLP)或未命中状态处理寄存器(MSHR)同时持有的内存请求数量/在专业期间填充每个缓存级别的缓冲区...

回答 1 投票 0

如何优化深度嵌套对象搜索以提高性能?

我有一个深度嵌套的 JavaScript 对象结构,表示分层数据模型。该对象可以有多层嵌套子对象,我需要在 t 中搜索特定值...

回答 2 投票 0

UIViewRepresentable 当其 SwiftUI 偏移属性更改导致性能问题时不必要地重新创建视图

我正在为 SwiftUI(最低目标 iOS 15.0)编写一个具有缩放和平移功能的环绕轮播组件。 这个想法如下: 有两个缓冲区:一个包含三个图像...

回答 1 投票 0

NodeJS String.indexOf 缓慢,即使索引为 200/1000000

考虑 API 返回的长字符串化 JSON 对象(数百万个字符)。 因为我只需要根据它的键找到一些值,所以我的第一反应是解析它,然后直接选择它......

回答 1 投票 0

如何在react中拆分大型json fetch

有一个关于从reactjs应用程序获取大型json数据的最佳实践的问题。 假设我们有 fetch url foo.com 并且我们还有 from、to 变量,例如 0 到 6 或我们放在那里的任何内容...

回答 1 投票 0

是否可以验证带或不带key的React渲染列表时对性能的影响

在 React 文档中,它提到当渲染没有键的列表时,React 会改变每个子项,而不是意识到它可以保持项目子树完整。这种低效率可能是一个问题......

回答 1 投票 0

为什么从同一个表中选择特定列会显着降低查询性能?

我有 SELECT 语句从 tblQuotes 查询列。为什么如果我选择列 a.ProducerCompositeCommission 和 a.CompanyCompositeCommission,然后查询会永远旋转。 执行...

回答 1 投票 0

既然 numpy 已经存在,还需要 Python 数组吗?

在发现Python能够通过“导入数组”在没有numpy的情况下使用数组之前,我了解了numpy数组。 《高性能Python》一书介绍了py...

回答 1 投票 0

OpenMP for 循环比串行代码花费更多时间

我尝试使用 OpenMP 并行化代码片段,结果发现使用 OpenMP 需要 25 倍的时间才能完成程序。有什么不对的吗?我该如何优化它? #包括 我尝试使用 OpenMP 并行化代码片段,结果发现使用 OpenMP 需要 25X 时间才能完成程序。有什么不对的吗?我该如何优化它? #include <iostream> #include <cmath> #include <random> #include <chrono> #include <cstdlib> #include <omp.h> using namespace std; int main() { unsigned long long black_square = 1, digit_square = 13; //auto n = ((black_square)<<11) * static_cast<unsigned long long>(pow(digit_square,10)); auto n = static_cast<unsigned long long>(1e9); srand(0); int tmp = 0; std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_int_distribution<> distrib(1, 6); auto tStart = std::chrono::high_resolution_clock::now(); //#pragma omp parallel for schedule(static) reduction(+:tmp) #pragma omp parallel for schedule(static) reduction(+:tmp) num_threads(8) for (unsigned long long i=0; i<n; i++) tmp = (tmp+(5==rand()%6))%static_cast<int>(1e9); //for (unsigned long long i=0; i<n; i++) tmp = (tmp+(5==distrib(gen)))%static_cast<int>(1e9); tmp%=static_cast<int>(1e9); auto tEnd = std::chrono::high_resolution_clock::now(); cout << tmp << " obtained after " << n << " iterations in " << (tEnd-tStart).count()/1e9 << "s." << endl; return 0; } 代码由g++ -o a.out -O3 -std=c++11 -fopenmp tmp.cpp编译,其中g++的版本为8.5.0 20210514。操作系统是RHEL8.9,有20个Intel Xeon CPUs at 2.593GHz。 串行代码平均运行时间为7.4s,而并行代码平均运行时间为180s。选项 -O3、-O2、-O1 具有相似的结果。随机生成器mt19937可以显着缩小性能差距,但并行代码仍然比串行版本慢得多。增加或减少 n 也会导致类似的结果。 rand()函数不需要是线程安全的。因此,像您所做的那样同时从多个线程调用它是不安全的 glibc 的 rand() 版本是线程安全的,但它是通过将整个函数包装在互斥体中来实现的。因此一次只有一个线程可以调用 rand()。由于在 rand 调用之外,您的代码执行的操作非常少,几乎所有执行时间都将在 rand() 内。 所以并行版本并不是真正的并行。每次调用 rand() 时,每个线程轮流一次执行一个。所以它比单线程没有优势。但实际上更糟糕的是,因为线程必须争夺谁获得互斥锁,在每次调用后唤醒和睡眠,并在每个 CPU 核心的缓存之间移动 PRNG 状态。所以比单线程差很多。 您应该做的是创建多个 PRNG 实例。有一个 gen 对象数组,每个线程一个。每个线程应该使用自己的 PRNG。确保每个对象在内存中相距足够远,不会共享缓存行,因此 PRNG 状态不需要在 CPU 缓存之间移动。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.