【发布时间】:2017-08-20 21:34:50
【问题描述】:
假设我有一个函数,它对一个向量进行对数变换,乘以一个常数,因此我定义了一个映射函数,给定向量和常数......
vector<double> logtransform(vector<double> &data, int constant){
vector<double> image;
for (int i = 0; i < data.size(); i++){
image.push_back(constant*log(data[i]));
}
return image;
}
给定一个名为“data”的向量,我需要对包含在双精度数组中的不同数量的常量应用“logtransform”函数,但是如果函数不是void类型吗?
【问题讨论】:
-
类型与什么有什么关系?
-
首先,你应该在向量中至少有
reservedata.size() 元素。这里最好将向量resize,然后只需将转换后的值分配给向量中的每个位置。这现在可以并行化(使用 OpenMP 或实际创建一个辅助函数来进行就地转换。 -
在多线程中执行此函数时,您遇到的具体问题是什么?
-
您可能更愿意剖析您的
for()循环以由多个内核并行执行,每个内核负责计算log[data]的特定范围。
标签: c++ multithreading function concurrency parallel-processing