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];
|
|
|
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];
|
|
|
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
|
|
|
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
|