由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请大牛们帮忙看一段并行c++代码的效率问题
相关主题
[合集] Intel 9编译器在vc 6.0的环境里编译openmp的问题谁在Xeon Phi上用过MKL
一个OpenMP问题求教谁给推荐本parallel programming的入门教材
openMP or boost::thread (pthread) for multithreading ?OpenMP的问题-The process cannot access the file because it is being used by another process
A helloworld OpenMP question?C怪问题一个
我写的C++ ParallelForLoop,感兴趣的来下载测试问个double和long double的问题
在图像算法领域,纯java没戏,用java和c++混合编程很恶心嵌入式编程问题
请大牛们帮忙看一段openmp并行代码的问题visual studio 编译器怎么关掉warning?
c++ thread 求助请问C/C++中跟Matlab image processing library最接近的Librar
相关话题的讨论汇总
话题: pos2话题: pos1话题: szkernel话题: int话题: offset
进入Programming版参与讨论
1 (共1页)
y****n
发帖数: 15
1
在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
程序中的变量分别为
kernel: [-0.5 1 0.5]
szKernel: 3
step: 4
这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
进。
double s = kernel[(szKernel-1)/2];
//#pragma omp parallel for
for (int k = 0; k < m*n; k++)
v_out[k] = v_in[k] * s;
for (int k = 0; k < (szKernel-1)/2; k++)
{
double s = kernel[k];
int offset = ((szKernel-1)/2 - k)*step;
#pragma omp parallel for
for (int x = 0; x < n; x++)
{
long pos1 = x * m;
long pos2 = x * m + m - offset;
for (int y = 0; y < offset; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
pos2 = x * m;
for (int y = offset; y < m; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
}
}
for (int k = (szKernel+1)/2; k < szKernel; k++)
{
double s = kernel[k];
int offset = (k - (szKernel-1)/2)*step;
#pragma omp parallel for
for (int x = 0; x < n; x++)
{
long pos1 = x * m;
long pos2 = x * m + offset;
for (int y = 0; y < m - offset; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
pos2 = x * m;
for (int y = m - offset; y < m; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
}
}
L***n
发帖数: 6727
2
cpu是几个核的?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

t****t
发帖数: 6806
3
不是说了32个核吗?

【在 L***n 的大作中提到】
: cpu是几个核的?
:
: y

t****t
发帖数: 6806
4
每个小任务需要有一定数量/规模的负载. 如果负载太小的话, overhead就太大了. 同
时, cache coherence也成问题. 比如两个CPU同时写相邻的两个字, 那两边都不能使用
cache.

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

N***m
发帖数: 4460
5
大牛,偶像阿,你不光C++精通阿

【在 t****t 的大作中提到】
: 每个小任务需要有一定数量/规模的负载. 如果负载太小的话, overhead就太大了. 同
: 时, cache coherence也成问题. 比如两个CPU同时写相邻的两个字, 那两边都不能使用
: cache.
:
: y

t****t
发帖数: 6806
6
作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
啊, 什么什么的. java一类的东西就离我很遥远了.

【在 N***m 的大作中提到】
: 大牛,偶像阿,你不光C++精通阿
f*****e
发帖数: 2992
7
学好了C++,java就应该很好学了吧?底层的我觉得C比C++好用,C++现在地位好像很尴
尬。

【在 t****t 的大作中提到】
: 作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
: 啊, 什么什么的. java一类的东西就离我很遥远了.

t****t
发帖数: 6806
8
per goodbug, that's not the case. core java maybe, not the framework. i have
no opinion on that, as i don't plan to learn java any time soon.
as for c++'s position, i still insist every language has its unique place as
every language is unique. just to make it clear, i am against one-language-
for-all-work or one-language-is-superior-over-others those kinds of view. i
am not interested in discussing which language is good for job market either
. there may be a best language for a task and that can be discussed.

【在 f*****e 的大作中提到】
: 学好了C++,java就应该很好学了吧?底层的我觉得C比C++好用,C++现在地位好像很尴
: 尬。

b***i
发帖数: 3043
9
m=? n=?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

y**b
发帖数: 10166
10
1. #pragma omp parallel for一般不放在内层循环,而应该放在外层循环,
否则overhead太大(想想外层循环每次都要fork/join threads,不得了)。
放外层循环要注意定义和区分shared/private变量。
2. 对运算量和OpenMP开销可能需要个估计,比如
#pragma omp parallel for if (n > 5000),
n > 5000时才进行多线程并行,具体该多少,得自己测算比较。
3. Scheduling和chunk size组合,有好多种,也得测算比较找出最优的。比如:
#pragma omp parallel for schedule (static)
#pragma omp parallel for schedule (static, C)
#pragma omp parallel for schedule (dynamic)
#pragma omp parallel for schedule (dynamic, C)
我的印象是运算量足够大的时候,dynamic scheduling性能最好。
你这个32核的机器是哪一款?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

相关主题
在图像算法领域,纯java没戏,用java和c++混合编程很恶心谁在Xeon Phi上用过MKL
请大牛们帮忙看一段openmp并行代码的问题谁给推荐本parallel programming的入门教材
c++ thread 求助OpenMP的问题-The process cannot access the file because it is being used by another process
进入Programming版参与讨论
g*****y
发帖数: 7271
11
如果是用intel cpu的话,用IPP library做吧,比你自己优化的简单多了。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

N***m
发帖数: 4460
12
哎,作为一个搞java的,欧被鄙视了

【在 t****t 的大作中提到】
: 作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
: 啊, 什么什么的. java一类的东西就离我很遥远了.

L***n
发帖数: 6727
13
good suggestions,楼主有试过吗,结果如何?

【在 y**b 的大作中提到】
: 1. #pragma omp parallel for一般不放在内层循环,而应该放在外层循环,
: 否则overhead太大(想想外层循环每次都要fork/join threads,不得了)。
: 放外层循环要注意定义和区分shared/private变量。
: 2. 对运算量和OpenMP开销可能需要个估计,比如
: #pragma omp parallel for if (n > 5000),
: n > 5000时才进行多线程并行,具体该多少,得自己测算比较。
: 3. Scheduling和chunk size组合,有好多种,也得测算比较找出最优的。比如:
: #pragma omp parallel for schedule (static)
: #pragma omp parallel for schedule (static, C)
: #pragma omp parallel for schedule (dynamic)

a****l
发帖数: 8211
14
不但简单多了,而且好得多了。

【在 g*****y 的大作中提到】
: 如果是用intel cpu的话,用IPP library做吧,比你自己优化的简单多了。
:
: y

f*******a
发帖数: 663
15
C++的并行不太了解,说点和其他的。
既然是瓶颈,这么一小段代码可以稍微花点心思。你的代码里有太多不必要的乘法运算
,其实都只是加法,或者只需执行一次。另外读写用指针应该更有效率。
另:真想快,用FFT来算卷积。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

s*****e
发帖数: 10
16
对于DLP的运算还是用SIMD比较好。
用openMP如果性能不能接近linear scaling的话,还是用MPI比较好。
当然单就这个问题,用GPU最好。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

y****n
发帖数: 15
17
在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
程序中的变量分别为
kernel: [-0.5 1 0.5]
szKernel: 3
step: 4
这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
进。
double s = kernel[(szKernel-1)/2];
//#pragma omp parallel for
for (int k = 0; k < m*n; k++)
v_out[k] = v_in[k] * s;
for (int k = 0; k < (szKernel-1)/2; k++)
{
double s = kernel[k];
int offset = ((szKernel-1)/2 - k)*step;
#pragma omp parallel for
for (int x = 0; x < n; x++)
{
long pos1 = x * m;
long pos2 = x * m + m - offset;
for (int y = 0; y < offset; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
pos2 = x * m;
for (int y = offset; y < m; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
}
}
for (int k = (szKernel+1)/2; k < szKernel; k++)
{
double s = kernel[k];
int offset = (k - (szKernel-1)/2)*step;
#pragma omp parallel for
for (int x = 0; x < n; x++)
{
long pos1 = x * m;
long pos2 = x * m + offset;
for (int y = 0; y < m - offset; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
pos2 = x * m;
for (int y = m - offset; y < m; y++, pos1++, pos2++)
v_out[pos1] += v_in[pos2] * s;
}
}
L***n
发帖数: 6727
18
cpu是几个核的?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

t****t
发帖数: 6806
19
不是说了32个核吗?

【在 L***n 的大作中提到】
: cpu是几个核的?
:
: y

t****t
发帖数: 6806
20
每个小任务需要有一定数量/规模的负载. 如果负载太小的话, overhead就太大了. 同
时, cache coherence也成问题. 比如两个CPU同时写相邻的两个字, 那两边都不能使用
cache.

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

相关主题
C怪问题一个visual studio 编译器怎么关掉warning?
问个double和long double的问题请问C/C++中跟Matlab image processing library最接近的Librar
嵌入式编程问题请问windows平台下在C++里如何把一张图片旋转一个角度
进入Programming版参与讨论
N***m
发帖数: 4460
21
大牛,偶像阿,你不光C++精通阿

【在 t****t 的大作中提到】
: 每个小任务需要有一定数量/规模的负载. 如果负载太小的话, overhead就太大了. 同
: 时, cache coherence也成问题. 比如两个CPU同时写相邻的两个字, 那两边都不能使用
: cache.
:
: y

t****t
发帖数: 6806
22
作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
啊, 什么什么的. java一类的东西就离我很遥远了.

【在 N***m 的大作中提到】
: 大牛,偶像阿,你不光C++精通阿
f*****e
发帖数: 2992
23
学好了C++,java就应该很好学了吧?底层的我觉得C比C++好用,C++现在地位好像很尴
尬。

【在 t****t 的大作中提到】
: 作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
: 啊, 什么什么的. java一类的东西就离我很遥远了.

t****t
发帖数: 6806
24
per goodbug, that's not the case. core java maybe, not the framework. i have
no opinion on that, as i don't plan to learn java any time soon.
as for c++'s position, i still insist every language has its unique place as
every language is unique. just to make it clear, i am against one-language-
for-all-work or one-language-is-superior-over-others those kinds of view. i
am not interested in discussing which language is good for job market either
. there may be a best language for a task and that can be discussed.

【在 f*****e 的大作中提到】
: 学好了C++,java就应该很好学了吧?底层的我觉得C比C++好用,C++现在地位好像很尴
: 尬。

b***i
发帖数: 3043
25
m=? n=?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

y**b
发帖数: 10166
26
1. #pragma omp parallel for一般不放在内层循环,而应该放在外层循环,
否则overhead太大(想想外层循环每次都要fork/join threads,不得了)。
放外层循环要注意定义和区分shared/private变量。
2. 对运算量和OpenMP开销可能需要个估计,比如
#pragma omp parallel for if (n > 5000),
n > 5000时才进行多线程并行,具体该多少,得自己测算比较。
3. Scheduling和chunk size组合,有好多种,也得测算比较找出最优的。比如:
#pragma omp parallel for schedule (static)
#pragma omp parallel for schedule (static, C)
#pragma omp parallel for schedule (dynamic)
#pragma omp parallel for schedule (dynamic, C)
我的印象是运算量足够大的时候,dynamic scheduling性能最好。
你这个32核的机器是哪一款?

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

g*****y
发帖数: 7271
27
如果是用intel cpu的话,用IPP library做吧,比你自己优化的简单多了。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

N***m
发帖数: 4460
28
哎,作为一个搞java的,欧被鄙视了

【在 t****t 的大作中提到】
: 作为一个硬件工程师, 难道这些不是我每天打交道的东西么. 总线啊, cache啊, 信号
: 啊, 什么什么的. java一类的东西就离我很遥远了.

L***n
发帖数: 6727
29
good suggestions,楼主有试过吗,结果如何?

【在 y**b 的大作中提到】
: 1. #pragma omp parallel for一般不放在内层循环,而应该放在外层循环,
: 否则overhead太大(想想外层循环每次都要fork/join threads,不得了)。
: 放外层循环要注意定义和区分shared/private变量。
: 2. 对运算量和OpenMP开销可能需要个估计,比如
: #pragma omp parallel for if (n > 5000),
: n > 5000时才进行多线程并行,具体该多少,得自己测算比较。
: 3. Scheduling和chunk size组合,有好多种,也得测算比较找出最优的。比如:
: #pragma omp parallel for schedule (static)
: #pragma omp parallel for schedule (static, C)
: #pragma omp parallel for schedule (dynamic)

a****l
发帖数: 8211
30
不但简单多了,而且好得多了。

【在 g*****y 的大作中提到】
: 如果是用intel cpu的话,用IPP library做吧,比你自己优化的简单多了。
:
: y

相关主题
瓶颈在哪儿?一个OpenMP问题求教
按说java也够快了openMP or boost::thread (pthread) for multithreading ?
[合集] Intel 9编译器在vc 6.0的环境里编译openmp的问题A helloworld OpenMP question?
进入Programming版参与讨论
f*******a
发帖数: 663
31
C++的并行不太了解,说点和其他的。
既然是瓶颈,这么一小段代码可以稍微花点心思。你的代码里有太多不必要的乘法运算
,其实都只是加法,或者只需执行一次。另外读写用指针应该更有效率。
另:真想快,用FFT来算卷积。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

s*****e
发帖数: 10
32
对于DLP的运算还是用SIMD比较好。
用openMP如果性能不能接近linear scaling的话,还是用MPI比较好。
当然单就这个问题,用GPU最好。

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

h*******n
发帖数: 82
33
CPU level,可以试试intel TBB,不过最后速度和openmp应该差别不是太大
要blast speed,只有写到GPU里面运行,速度提升100倍以上,如果你的运算需要大规模
parallel computation的话,记得买个好的显卡,差别太大了。一个小的台机,配一个
好的显卡
轻松打败你的32核服务器。
GPGPU有很多选择,
比较火的c++ 11里面c++ AMP,前提有个支持directx11的显卡,那么c++ AMP可以利用
direct compute在显卡上跑C++程序,门槛应该比较低,但是你要跨平台就要另作打算
nvidia cuda也是个不错选择,记得买NV的显卡
openCL也不错
你要是会写opengl,懂点shader的话,也可以用老的technique
http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.

y

【在 y****n 的大作中提到】
: 在32核的服务器上,运行一小段图像卷积的操作。输入是图像矩阵(按列),和一个y
: 方向上的卷积kernel。举例来说,如果kernel是[-0.5 0 0 0 1 0 0 0 0.5],那么下面
: 程序中的变量分别为
: kernel: [-0.5 1 0.5]
: szKernel: 3
: step: 4
: 这段程序中使用了OpenMP对for循环执行并行操作。当使用>4个核时,程序运行速度反
: 而下降。这段程序要运行很多次,是整个程序的性能瓶颈,请大牛们指点一下该如何改
: 进。
: double s = kernel[(szKernel-1)/2];

h*******n
发帖数: 82
34
that guy is nuts, in his mind
programming == make website == a pile of shit design pattern build on top of
fucking JVM,sacrifice speed to get shit

have
as
language-
i
either

【在 t****t 的大作中提到】
: per goodbug, that's not the case. core java maybe, not the framework. i have
: no opinion on that, as i don't plan to learn java any time soon.
: as for c++'s position, i still insist every language has its unique place as
: every language is unique. just to make it clear, i am against one-language-
: for-all-work or one-language-is-superior-over-others those kinds of view. i
: am not interested in discussing which language is good for job market either
: . there may be a best language for a task and that can be discussed.

G*****7
发帖数: 1759
35
c++amp currently has way too much overhead, and way too few utility
libraries compared to cuda.

规模
depends. large satellite/telescope images from geoinformatics or astronomy
are not easily fitted into the limited RAM of the gpu. data transfer over
the bus might kill the speed.
you will need vs 2012 for compilation and preferably windows 8 for
additional debugging advantages.

【在 h*******n 的大作中提到】
: CPU level,可以试试intel TBB,不过最后速度和openmp应该差别不是太大
: 要blast speed,只有写到GPU里面运行,速度提升100倍以上,如果你的运算需要大规模
: parallel computation的话,记得买个好的显卡,差别太大了。一个小的台机,配一个
: 好的显卡
: 轻松打败你的32核服务器。
: GPGPU有很多选择,
: 比较火的c++ 11里面c++ AMP,前提有个支持directx11的显卡,那么c++ AMP可以利用
: direct compute在显卡上跑C++程序,门槛应该比较低,但是你要跨平台就要另作打算
: nvidia cuda也是个不错选择,记得买NV的显卡
: openCL也不错

G*****7
发帖数: 1759
36
+2.
even if you had amd cpu, ipp still works to some extent.
http://software.intel.com/en-us/articles/use-ipp-on-amd-process

【在 g*****y 的大作中提到】
: 如果是用intel cpu的话,用IPP library做吧,比你自己优化的简单多了。
:
: y

d***q
发帖数: 1119
37

of
JVM is very good indeed. many experts have contributed for a decade.

【在 h*******n 的大作中提到】
: that guy is nuts, in his mind
: programming == make website == a pile of shit design pattern build on top of
: fucking JVM,sacrifice speed to get shit
:
: have
: as
: language-
: i
: either

1 (共1页)
进入Programming版参与讨论
相关主题
请问C/C++中跟Matlab image processing library最接近的Librar我写的C++ ParallelForLoop,感兴趣的来下载测试
请问windows平台下在C++里如何把一张图片旋转一个角度在图像算法领域,纯java没戏,用java和c++混合编程很恶心
瓶颈在哪儿?请大牛们帮忙看一段openmp并行代码的问题
按说java也够快了c++ thread 求助
[合集] Intel 9编译器在vc 6.0的环境里编译openmp的问题谁在Xeon Phi上用过MKL
一个OpenMP问题求教谁给推荐本parallel programming的入门教材
openMP or boost::thread (pthread) for multithreading ?OpenMP的问题-The process cannot access the file because it is being used by another process
A helloworld OpenMP question?C怪问题一个
相关话题的讨论汇总
话题: pos2话题: pos1话题: szkernel话题: int话题: offset