由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
CS版 - 请教windows下多线程程序的优化.
相关主题
哪位做过GPU Computing请教:Speed UP CPU
GPU 编程有没有钱途?在CPU上编译好的程序(exe 文件)能在GPU上直接运行么?
computer graphics求职业规划CPU Archiecture 和OS fundmantal容易快速掌握吗?
多核CPU对单线程程序有加速作用吗?急问一关入fortran的初级问题。谢谢!
[转载] 急问: 怎么看程序运行的 cpu time (fortran)[gfortran]procedures must be either all SUBROUTINEs or all
有谁需要GPU Programmer 的么GPGPU Desktop/Laptop
问个单cpu下的并行处理速度问题关于perl xs,菜鸟想在这里问问
如何确保多线程程序在 multicore server 上 用所有的 coreCS 的基础知识主要有哪些? (转载)
相关话题的讨论汇总
话题: cpu话题: include话题: int话题: 多线程话题: 程序
进入CS版参与讨论
1 (共1页)
h**********c
发帖数: 4120
1
问题是这样的.
我的机器是vista 32,q 6600 单CPU
大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
6个线程,1756.93700秒.
问题:
1.怎么解释这一现象,多线程反倒慢了?
2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
是没有必要的?
3.如果是多个cpu的话,多线程程序能否就会比单线程快?
有没有什么软件能模拟多个cpu环境?
搞科学计算没办法.多个cpu的机器太贵.
谢谢!
h**********c
发帖数: 4120
2
\\单线程程序
#include
#include
#include
#include
#include
void parsePermutation (int n, int m, int * rindx,int *results) {
int * data = new int[n];
int i =0,j=0;
for (i=0; i data[i] = i+1;
for (i=0; i results[i] = data[rindx[i]-1];
for (j=rindx[i]-1; j data[j] = data[j+1];
}
}
delete [] data; data = NULL;
}
bool getXs(int n,int *inputs, int * rs) {
bool
h**********c
发帖数: 4120
3
//多线程程序,改自MSDN
#include
#include
//#include "Thread.h"
#include
#include
#include
#include
#include
//for timer
#include
#include
#include
#define MAX_THREADS 6
#define BUF_SIZE 255
///////////////////////////////////////////
void parsePermutation (int n, int m, int * rindx,int *results) {
int * data = new int[n];
int i =0,j=0;
for (i=0; i data[i] = i+1;
for (i=
z*****n
发帖数: 7639
4
what about the result in XP, linux?

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

h**********c
发帖数: 4120
5
1. I don't have XP available.
2. Later I will try linux.

【在 z*****n 的大作中提到】
: what about the result in XP, linux?
s*x
发帖数: 3328
6
一个cpu,跑多线程,时间应该是越来越多,光是载入载出开销就不小。

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

l********o
发帖数: 33
7
不太擅长多线程,没看代码瞎扯几句:如果你的线程体只是简单运算,那就要看看线程
管理的开销,如果是独立的任务,不要做同步的管理,否则线程会在主线程里面干等。
多线程你还是得试一试unix下的编程,另外如果不是做服务器为什么你要用多线程在单
机上做这个事情呢?

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

h**********c
发帖数: 4120
8
在科学计算中,符合某些特征的sparse matrices,可以分块进行多路处理,
这个在linux下,多cpu的performance提高相当大的,(老板有一个东西,他的博后用
fortran写的mpi).
linux 多核,也提高很大,我观察过,在linux下,单线程只有一个核在跑,老板的的东西运
行时,四个核都在跑.(梢后我会把上面的程序在linux上再试验试验).
这样的程序我没写过,想试验一下,大体的思路就是让独立的运算让每个核承担一部分,
for vista我观察system monitor,单线程的时候,四个核都在跑,但每个都不满,多线程
的时候,四个核也都在跑,而且跑满了,那么说明,vista只是简单把运算平均分给各个核,
但多核用来context switch(thread 不知道是不是context switch)的开销thread越多
越大.
看来最初想法和具体的架构有相当的出入.

【在 l********o 的大作中提到】
: 不太擅长多线程,没看代码瞎扯几句:如果你的线程体只是简单运算,那就要看看线程
: 管理的开销,如果是独立的任务,不要做同步的管理,否则线程会在主线程里面干等。
: 多线程你还是得试一试unix下的编程,另外如果不是做服务器为什么你要用多线程在单
: 机上做这个事情呢?

x**y
发帖数: 10012
9
一个cpu的话
你就得考虑线程建立和终止的开销了
因为只有一个cpu
多线程没有特别大价值

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

k********e
发帖数: 702
10
拜托。Q6600是4核 CPU的嘛,当4个 CPU用的
有点基础知识好不好。个 个 都在说单CPU怎样怎样 ...
相关主题
有谁需要GPU Programmer 的么请教:Speed UP CPU
问个单cpu下的并行处理速度问题在CPU上编译好的程序(exe 文件)能在GPU上直接运行么?
如何确保多线程程序在 multicore server 上 用所有的 coreCPU Archiecture 和OS fundmantal容易快速掌握吗?
进入CS版参与讨论
x**y
发帖数: 10012
11
windows没对多核cpu进行优化
so...
用一下多核的linux吧
这下明白了?

【在 k********e 的大作中提到】
: 拜托。Q6600是4核 CPU的嘛,当4个 CPU用的
: 有点基础知识好不好。个 个 都在说单CPU怎样怎样 ...

l***e
发帖数: 450
12
did not have time to look into your program, but generally speaking, unless
your thread has blocking calls (waiting for something else, for example,
disk, i/o, etc), multiple threads working on the task set on a single cpu is
always slower than single thread working on the same task set because of the overhead of swapping in and out threads (register swap, L2 cache pollution, etc)
the maximum parallelism you can get is the number of CPUs in the system.
With one CPU, there is really no advantage
x**y
发帖数: 10012
13
人家是四核。。。
最关键是windows没对多核cpu做优化
其实当成一个在用

unless
is
the

【在 l***e 的大作中提到】
: did not have time to look into your program, but generally speaking, unless
: your thread has blocking calls (waiting for something else, for example,
: disk, i/o, etc), multiple threads working on the task set on a single cpu is
: always slower than single thread working on the same task set because of the overhead of swapping in and out threads (register swap, L2 cache pollution, etc)
: the maximum parallelism you can get is the number of CPUs in the system.
: With one CPU, there is really no advantage

k********e
发帖数: 702
14
看,我没说错吧?
除了你明白,其他人都以为一个物理CPU就没有并行能力。
把4核CPU不当回事。

【在 x**y 的大作中提到】
: 人家是四核。。。
: 最关键是windows没对多核cpu做优化
: 其实当成一个在用
:
: unless
: is
: the

k****u
发帖数: 43
15
随便看了下
首先用clock来计时就是不正确的
它计算是CPU cycle数量,一个process有一个,计算所有thread的
其次,像这种matrix形状的计算,还要考虑到cache的影响,google一下
tiling
并行程序很能写得有linear的scalability
z***e
发帖数: 5393
16
奇怪,不晓得你们都从哪里看到说windows没对多核做优化,凭空YY?有空多看看
windows internal之类的书去。以为还是win98年代啊?
回到lz的问题,如果你的任务分配得当,multi-threading在quad core上面肯定会快些
,你可以从这几个方面测试:
1. 把你那复杂的矩阵运算换成简单容易测试的,比如算10k个数相乘之类的,然后看多
线程和单线程的比较,这个主要是先让你把程序框架弄对,然后再把你自己的什么算法
换进去。
2. 把线程中的输出都关掉,还有StringCchprintf那个---不要在多现程的thread当中
搞.
3. 还不确信,用setaffinity把线程跟单个CPU绑定,如果quad core的每个CPU算1000
个数还不如一个cpu算4000个数来得快,你可以给intel或者ms file bug了。

【在 x**y 的大作中提到】
: 人家是四核。。。
: 最关键是windows没对多核cpu做优化
: 其实当成一个在用
:
: unless
: is
: the

x**y
发帖数: 10012
17
Windows和微软目前的编程语言对于1-4核处理器的电脑来说非常适用,毕竟现在的
最新Windows vista系统本身最多只能利用到两颗物理处理器的资源,只有特定软件优
化之后才能利用多核心的效能,而且设计的时候最高只考虑了四核心设计。

1000

【在 z***e 的大作中提到】
: 奇怪,不晓得你们都从哪里看到说windows没对多核做优化,凭空YY?有空多看看
: windows internal之类的书去。以为还是win98年代啊?
: 回到lz的问题,如果你的任务分配得当,multi-threading在quad core上面肯定会快些
: ,你可以从这几个方面测试:
: 1. 把你那复杂的矩阵运算换成简单容易测试的,比如算10k个数相乘之类的,然后看多
: 线程和单线程的比较,这个主要是先让你把程序框架弄对,然后再把你自己的什么算法
: 换进去。
: 2. 把线程中的输出都关掉,还有StringCchprintf那个---不要在多现程的thread当中
: 搞.
: 3. 还不确信,用setaffinity把线程跟单个CPU绑定,如果quad core的每个CPU算1000

z***e
发帖数: 5393
18
奇怪,什么叫最多只能利用到两个physical cpu的资源?虽然很俗,我还是想问一下这
个来源是哪里,我是从来没听说过。
而特定软件的“优化”又具体是指什么优化??唯一一个可以利用的api就是
SetAffinity,但这个并不比自动分配有任何好处。
实际应用中,一般线程数是CPU # x2,这个范围内可以看到明显的效果,再多就没啥差
别了。

【在 x**y 的大作中提到】
: Windows和微软目前的编程语言对于1-4核处理器的电脑来说非常适用,毕竟现在的
: 最新Windows vista系统本身最多只能利用到两颗物理处理器的资源,只有特定软件优
: 化之后才能利用多核心的效能,而且设计的时候最高只考虑了四核心设计。
:
: 1000

z*****n
发帖数: 7639
19
因为有多核?

【在 l********o 的大作中提到】
: 不太擅长多线程,没看代码瞎扯几句:如果你的线程体只是简单运算,那就要看看线程
: 管理的开销,如果是独立的任务,不要做同步的管理,否则线程会在主线程里面干等。
: 多线程你还是得试一试unix下的编程,另外如果不是做服务器为什么你要用多线程在单
: 机上做这个事情呢?

O*******d
发帖数: 20343
20
multi thread scientific programming does not have much advantage on 单CPU
相关主题
急问一关入fortran的初级问题。谢谢!关于perl xs,菜鸟想在这里问问
[gfortran]procedures must be either all SUBROUTINEs or allCS 的基础知识主要有哪些? (转载)
GPGPU Desktop/Laptop【求助】Fortran多线程执行效率问题
进入CS版参与讨论
l******n
发帖数: 4
21
I did not read your code, but this article might give you some idea
http://msdn.microsoft.com/en-us/magazine/cc850829.aspx

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

w*********l
发帖数: 1337
22
如果你是单cpu,而且你的workload是cpu-bound(就是基本没有i/o),那多线程一定会
慢。慢多少就要看系统管理线程的开销有多少了。
p.s. 你这个code贴得太烂,格式都没了,没人有心思看。

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

b***i
发帖数: 3043
23
同意楼上说的,写得太乱。
你应该抽象一下,贴你的改过的主程序,就是包含生成和结束线程的一个函数就可以了
。你说你生成了几亿个,就是那个。

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

z***e
发帖数: 5393
24
他只有6个thread,每个thread好像是在算一个matrix之类的东西。
建议他还是学点基本的调试技巧,好歹先验证自己的code结构是正确的,不要光copy&
paste就完了。

【在 b***i 的大作中提到】
: 同意楼上说的,写得太乱。
: 你应该抽象一下,贴你的改过的主程序,就是包含生成和结束线程的一个函数就可以了
: 。你说你生成了几亿个,就是那个。

x****u
发帖数: 44466
25
有几个核就开N的倍数的线程,你的科学计算保持线程数等于核的数量就行。
不过在假多核上,可能出现多线程慢于单线程的问题,这个不是你的错。

【在 h**********c 的大作中提到】
: 问题是这样的.
: 我的机器是vista 32,q 6600 单CPU
: 大概有两亿个左右的任务,互相独立,其实都是简单的数学运算.
: 我首先用最普通的c++ 写了个单线程程序,跑了大概994.77100秒.
: 然后照着一个msdn上的例题,改为3个线程,跑了1729.13400秒;
: 6个线程,1756.93700秒.
: 问题:
: 1.怎么解释这一现象,多线程反倒慢了?
: 2.程序贴在楼下,请高人帮分析分析,如何优化,还是vista对这种问题已经优化,多线程
: 是没有必要的?

b***i
发帖数: 3043
26
你应该用4个线程,因为是4核。
n****9
发帖数: 45
27
试试用CUDA编吧
h**********c
发帖数: 4120
28
my g-card is ATI, I don't know if it supports CUDA.

【在 n****9 的大作中提到】
: 试试用CUDA编吧
h**********c
发帖数: 4120
29
贴的code,行首的空格和tab都被吃了回扣了,
不过visual studio下把code, CTRL-K,CTRL-F很容易就从新FORMAT
根据liuhulan 同志介绍的MSDN上, KEN KERR的文章,
对单线程做了一些改动,主要还是基于LOCALITY的思想:
1. 不在SUBROUTINE 中使用NEW, DELETE,能不用DYNAMIC MEMALLOC尽量不用,坚决不要
在循环体中使用.
基于这一点,原来单线程900秒,提高到300秒!!
2. 所有SUBROUTINE 改成INLINE,300->287秒.
3. 在循环体内不进行console print,影响不大.
因为我把程序改成把要输出的结果存到一个array,并且要一个counter,因此会有race
condition,需要cs or mutex. multithreading 测试待续.
h**********c
发帖数: 4120
30
在单线程程序的for 前面加了一句,
#pragma omp parallel for
performance 略有提高,285.905950秒,
1. 无法证实performance提高了,还是今天晚上运行的程序少了,monitor上显示,一个核
负载比较大,其他的核少,比较均匀.
2. 没有实现cs or mutex,#pragma omp parallel for估计不能处理race condition(有
待查证).
相关主题
多线程优化求助!GPU 编程有没有钱途?
Matlab开多线程真爽啊 (转载)computer graphics求职业规划
哪位做过GPU Computing多核CPU对单线程程序有加速作用吗?
进入CS版参与讨论
n****9
发帖数: 45
31
Why not change your g-card to NVIDIA

【在 h**********c 的大作中提到】
: my g-card is ATI, I don't know if it supports CUDA.
h**********c
发帖数: 4120
32
Cost control.

【在 n****9 的大作中提到】
: Why not change your g-card to NVIDIA
h**********c
发帖数: 4120
33
As we experiment previously a same machine (dell xps 420, QUAD 6600, 8gb .
same c program, single thread programming.
Vista 32 : 287 Seconds
Fedora 64: 247 Secondss
It seems Fedora 64 faster than vista 32.
p**l
发帖数: 616
34
试试ms现在的 parallel extension 和 intel得 parallel studio 吧
h**********c
发帖数: 4120
35
Total time elapsed: 1730.176792
The sparcv9 processor operates at 900 MHz,
A solaris 4 cpu server,
single thread 1730.176792 seconds,
I have been long not written threading program.
Try later.
h**********c
发帖数: 4120
36
I did try
#pragma omp parallel for
Is this what you propose?
I never wrote .net program. my world is simple c++ or linux c++.

【在 p**l 的大作中提到】
: 试试ms现在的 parallel extension 和 intel得 parallel studio 吧
P********e
发帖数: 2610
37
应该是有优化,不过和LINUX有点区别就是
WIN是 1个KERNEL thread对multi user thread, right? 还是有改进?
linux是multi-kernel thread <-> multi user thread, right?

1000

【在 z***e 的大作中提到】
: 奇怪,不晓得你们都从哪里看到说windows没对多核做优化,凭空YY?有空多看看
: windows internal之类的书去。以为还是win98年代啊?
: 回到lz的问题,如果你的任务分配得当,multi-threading在quad core上面肯定会快些
: ,你可以从这几个方面测试:
: 1. 把你那复杂的矩阵运算换成简单容易测试的,比如算10k个数相乘之类的,然后看多
: 线程和单线程的比较,这个主要是先让你把程序框架弄对,然后再把你自己的什么算法
: 换进去。
: 2. 把线程中的输出都关掉,还有StringCchprintf那个---不要在多现程的thread当中
: 搞.
: 3. 还不确信,用setaffinity把线程跟单个CPU绑定,如果quad core的每个CPU算1000

P********e
发帖数: 2610
38
刚才看前边人发的Kenny Kerr的windows with c++
我相信做图象的人都用过他的这种方法,不过也没想到这种也可以上MSDN
INTEL再牛B也就4CORE,去看看nvidia多少个core,你就知道GPGPU了
估计就不是1700多秒,是几百秒了

【在 h**********c 的大作中提到】
: I did try
: #pragma omp parallel for
: Is this what you propose?
: I never wrote .net program. my world is simple c++ or linux c++.

h**********c
发帖数: 4120
39
msdn 主要是科普的吧,
如果没学过系统,架构(我记得主要是架构里讲hit rate), Kerr的文章还是不那么容易
吃透的.
GPGPU主要的问题太依赖硬件,
搞应用开发,象我要写程序,必须在LINUX和WINDOWS下都能跑,
有时候还要求在UNIX,APPLE上也能跑,
有一些搞数学的老头子,可能连笔记本都没用过.

【在 P********e 的大作中提到】
: 刚才看前边人发的Kenny Kerr的windows with c++
: 我相信做图象的人都用过他的这种方法,不过也没想到这种也可以上MSDN
: INTEL再牛B也就4CORE,去看看nvidia多少个core,你就知道GPGPU了
: 估计就不是1700多秒,是几百秒了

c******a
发帖数: 600
40
不懂为什么这是不用CUDA的理由

【在 h**********c 的大作中提到】
: msdn 主要是科普的吧,
: 如果没学过系统,架构(我记得主要是架构里讲hit rate), Kerr的文章还是不那么容易
: 吃透的.
: GPGPU主要的问题太依赖硬件,
: 搞应用开发,象我要写程序,必须在LINUX和WINDOWS下都能跑,
: 有时候还要求在UNIX,APPLE上也能跑,
: 有一些搞数学的老头子,可能连笔记本都没用过.

相关主题
多核CPU对单线程程序有加速作用吗?问个单cpu下的并行处理速度问题
[转载] 急问: 怎么看程序运行的 cpu time (fortran)如何确保多线程程序在 multicore server 上 用所有的 core
有谁需要GPU Programmer 的么请教:Speed UP CPU
进入CS版参与讨论
M*****a
发帖数: 2054
41
cuda对于存在数据依赖的情况下的并行化并不好

【在 c******a 的大作中提到】
: 不懂为什么这是不用CUDA的理由
h**********c
发帖数: 4120
42
如果一个程序非常依赖于一种特别的硬件,
对于非计算机专业用户来讲,是非常头痛的吧.

【在 c******a 的大作中提到】
: 不懂为什么这是不用CUDA的理由
s*****g
发帖数: 5159
43
所有的程序都依赖CPU,CPU两家厂商,AMD/Intel,两者一般都行。
CUDA程序依赖GPU,GPU两家厂商,nVidia/ATI,nVidia最近二年的显卡都行。
CUDA是个通用接口,支持CUDA的GPU占到市场大半,所以没啥问题,不是那么硬件
specific。

【在 h**********c 的大作中提到】
: 如果一个程序非常依赖于一种特别的硬件,
: 对于非计算机专业用户来讲,是非常头痛的吧.

M*****a
发帖数: 2054
44
vvs大牛今年搞不搞google code jam?

30
M*****a
发帖数: 2054
45
好啊,多多指导,我还要多和你请教
h**********c
发帖数: 4120
46
这个程序的目的是解一个叫'六角幻方'数字游戏(可以google,有详细介绍),在mitbbs最
早是在数学的leonanny提出征求解题思路,仁者见仁...
如果把m和n改了,就没有什么意义了,
这个程序可以在没有字典的情况下,进行brutal attack(don't do that illegally).我
个人命名其为,index permutation,如果已经有人提出,恕鄙人寡闻了.
我之前对这个程序做过改动,
就是把你改的局部变量全设为全局变量,不再在循环中使用 new, delete.
我稍后把改动过的程序贴上来,在我的q6600,m=7,n=19,上跑300秒.

30
h**********c
发帖数: 4120
47
我正在写linux下的多线程,
可以把你的code 贴上来吗?
行家一伸手,便知有没有.
h**********c
发帖数: 4120
48
It is fantastic!
I copy your code and compile.
2 threads: 85.2 seconds
4 threads: 44.9 seconds
8 threads: 43.5 seconds
my OS is vista 32 + visual c++ 2008 express.

2
10-
h**********c
发帖数: 4120
49
重新在release 下跑了一下,
// 4 threads
//Total time elapsed: 11.27700
// 8 threads
//Total time elapsed: 10.67000
//16 threads
//Total time elapsed: 10.79100
偶以前所有的程序几乎都是在debug下跑的,我还在读你的code,看如果在linux下写,有
什么能借鉴的地方.
Thanks!

slower than Release.
h**********c
发帖数: 4120
50
这个六角幻方给人的第一直觉-- 象有限元的网格,
而且的确有限,19!很大,但毕竟有限,但是最后下决心做试一下,还是serawang的几个贴
子(在数学版)比较有启迪的意义.
这个题可以列十五个线性方程,19个未知数,按线性代数的知识,有无穷多解,但是是有代
数表达的.考虑未知数不同,且为1~19.当时没有google,还不知道能不能找到答案,只想
试一下线性代数的知识.
后来用matlab分析发现,十五个线性方程,有十二个是非线性相关,遗憾的是,按matlab例
题,无法给出正确的代数表达式,而且计算的reduced echlon matrix也是错误的.最后花
了两个小时,手工算出来十二个线性方程,那么,知道七个未知数,其他十二个未知数可
得.
matlab是一种科普工具,最后写code还得c/c++.先写了单线程,1700秒居然得出答案!后来照
msdn的多线程又写了一个多线程版本,没有提高,反而更慢.大概是liuhulan转了ken kerr 关于locality的文章,茅
涩顿开.
中间又去干了别的事情,没来得及对windows多线程更多优化,跑到300秒.
在我自己机器上,
1 (共1页)
进入CS版参与讨论
相关主题
CS 的基础知识主要有哪些? (转载)[转载] 急问: 怎么看程序运行的 cpu time (fortran)
【求助】Fortran多线程执行效率问题有谁需要GPU Programmer 的么
多线程优化求助!问个单cpu下的并行处理速度问题
Matlab开多线程真爽啊 (转载)如何确保多线程程序在 multicore server 上 用所有的 core
哪位做过GPU Computing请教:Speed UP CPU
GPU 编程有没有钱途?在CPU上编译好的程序(exe 文件)能在GPU上直接运行么?
computer graphics求职业规划CPU Archiecture 和OS fundmantal容易快速掌握吗?
多核CPU对单线程程序有加速作用吗?急问一关入fortran的初级问题。谢谢!
相关话题的讨论汇总
话题: cpu话题: include话题: int话题: 多线程话题: 程序