wisefree

wisefree

V2EX 第 56037 号会员,加入于 2014-02-16 09:38:49 +08:00
今日活跃度排名 27863
根据 wisefree 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
wisefree 最近回复了
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@mightybruce 多谢啦,我调整了一下,发现自己对高性能运算,确实没有了解太多
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@CedarChen 好的,多谢
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@lzoje 多谢,是这样的,我调整了用例,new 之后全部赋值
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@neocanable 同意,我重新写了一个例子,也应该是缓存导致速度差异
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@jark006 是的,重新写了一个例子,发现应该是缓存起作用
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
@awenxjtu 重新写了一个例子,应该就可以用你的说法解释了,附言没有发送没有用 markdown 语法,格式有点混乱
24 天前
回复了 wisefree 创建的主题 C++ 请教一个 C++性能问题
``` c++

#include <iostream>
#include <chrono>


int I = 360;
int J = 280;
int K = 3;

int idealI = 512;

void func1(int* arr, float* transArr)
{
auto startTime = std::chrono::steady_clock::now();

for (int i = 0; i < I; i++) {
for (int j = 0; j < J; j++) {
for (int k = 0; k < K; k++) {

int realIdx = (i * (K * J) + j * K + k) * 2;
int imagIdx = realIdx + 1;

int transRealIdx = (k * (J * I) + j * I + i) * 2;
int transImagIdx = transRealIdx + 1;

transArr[transRealIdx] = arr[realIdx] * 0.1f;
transArr[transImagIdx] = arr[imagIdx] * 0.1f;
}
}
}

auto endTime = std::chrono::steady_clock::now();

std::chrono::duration<double> diffTime = endTime - startTime;

std::cout << diffTime.count() << std::endl;
}


void func2(int* arr, float* transArr)
{
auto startTime = std::chrono::steady_clock::now();

for (int i = 0; i < I; i++) {
for (int j = 0; j < J; j++) {
for (int k = 0; k < K; k++) {
int realIdx = (i * (K * J) + j * K + k) * 2;
int imagIdx = realIdx + 1;

int transRealIdx = (k * (J * idealI) + j * idealI + i) * 2;
int transImagIdx = transRealIdx + 1;

transArr[transRealIdx] = arr[realIdx] * 0.1f;
transArr[transImagIdx] = arr[imagIdx] * 0.1f;
}
}
}

auto endTime = std::chrono::steady_clock::now();

std::chrono::duration<double> diffTime = endTime - startTime;

std::cout << diffTime.count() << std::endl;
}

int main(void)
{

// i j k
int* arr = new int[I * J * K * 2];
for (int i = 0; i < I; i++) {
for (int j = 0; j < J; j++) {
for (int k = 0; k < K; k++) {
int realIdx = (i * (K * J) + j * K + k) * 2;
int imagIdx = realIdx + 1;

arr[realIdx] = k;
arr[imagIdx] = k;
}
}
}

// k j i
float* transArr = new float[idealI * J * K * 2];

for (int i = 0; i < idealI; i++) {
for (int j = 0; j < J; j++) {
for (int k = 0; k < K; k++) {
int realIdx = (i * (K * J) + j * K + k) * 2;
int imagIdx = realIdx + 1;

transArr[realIdx] = 0;
transArr[imagIdx] = 0;
}
}
}

func1(arr, transArr);
func2(arr, transArr);


delete[] arr;
delete[] transArr;

return 0;
}
```
169 天前
回复了 wisefree 创建的主题 C++ 请教大家一个 C++线程池的问题
@ysc3839 是的,我也想过 RVO 最有可能
169 天前
回复了 wisefree 创建的主题 C++ 请教大家一个 C++线程池的问题
@zhaoloving 嗯嗯,我也想这么干,只是这个例子能编译通过,我没想明白
169 天前
回复了 wisefree 创建的主题 C++ 请教大家一个 C++线程池的问题
@ysc3839 SubmitTask 函数返回了 Result 这个动作,是有 copyable 语义的,我也不太懂这个例子
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1557 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 17:04 · PVG 01:04 · LAX 09:04 · JFK 12:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.