由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 怎样提高C#计算程序的performance?
相关主题
晕了,多线程,共享内存的问题多线程/进程并发读文件有无开销问题?
请教一个Node.js的疑惑多线程下的gdb core dump问题
Java 多线程:还需要好CPU?[合集] 问个多线程的问题
关于多线程锁:锁代码还是锁资源?关于多线程编程的一个问题
我是一个线程 (转载)多线程有什么优化的方法?
痛恨Python的和当年痛恨Java的一个道理FORTRAN数组越界问题
Python就是爽Java 多线程 的架构如何改进?
拜托推荐多线程和socket的书单线程一般都是历史原因
相关话题的讨论汇总
话题: c#话题: 计算话题: 提高话题: c++话题: 线程
进入Programming版参与讨论
1 (共1页)
s***r
发帖数: 32
1
我有一个C# code,几乎是纯计算。要跑很长时间,现在想提高一下效率。
看了下数据结构和算法,似乎没有什么能提高的了
现在想:
1.多线程。机子有多个CPU.可是分成多线程后效率并没有提高特别多(8 core,
用了7-8个线程,速度只提高了一倍,用4线程只提高25%)。
原因大概是context switch太多了
试过改高priority,把线程的affinity设定在一个core上,似乎都没什么用,
不知道是不是因为是C# code,CLR管的太多了
2.用C++写。但是听说纯计算C#比C++不差太多。
请教还有什么办法?
j*****k
发帖数: 1198
2
纯计算如果是大量的话,为什么不用fortran?

【在 s***r 的大作中提到】
: 我有一个C# code,几乎是纯计算。要跑很长时间,现在想提高一下效率。
: 看了下数据结构和算法,似乎没有什么能提高的了
: 现在想:
: 1.多线程。机子有多个CPU.可是分成多线程后效率并没有提高特别多(8 core,
: 用了7-8个线程,速度只提高了一倍,用4线程只提高25%)。
: 原因大概是context switch太多了
: 试过改高priority,把线程的affinity设定在一个core上,似乎都没什么用,
: 不知道是不是因为是C# code,CLR管的太多了
: 2.用C++写。但是听说纯计算C#比C++不差太多。
: 请教还有什么办法?

b******n
发帖数: 592
3
你可以核心部分用C++。其实优化问题具体很不同,虽然说是纯计算,数据是如何存放的
,数据有什么特点等等。
用C++,然后用SSE2,起码可以提高一倍,跟线程也没什么冲突。很多时候内存是个瓶颈


【在 s***r 的大作中提到】
: 我有一个C# code,几乎是纯计算。要跑很长时间,现在想提高一下效率。
: 看了下数据结构和算法,似乎没有什么能提高的了
: 现在想:
: 1.多线程。机子有多个CPU.可是分成多线程后效率并没有提高特别多(8 core,
: 用了7-8个线程,速度只提高了一倍,用4线程只提高25%)。
: 原因大概是context switch太多了
: 试过改高priority,把线程的affinity设定在一个core上,似乎都没什么用,
: 不知道是不是因为是C# code,CLR管的太多了
: 2.用C++写。但是听说纯计算C#比C++不差太多。
: 请教还有什么办法?

k****f
发帖数: 3794
4
怎么用SSE2??手写汇编码么?

放的

【在 b******n 的大作中提到】
: 你可以核心部分用C++。其实优化问题具体很不同,虽然说是纯计算,数据是如何存放的
: ,数据有什么特点等等。
: 用C++,然后用SSE2,起码可以提高一倍,跟线程也没什么冲突。很多时候内存是个瓶颈
: 。

b******n
发帖数: 592
5
不用,有函数,具体要看平台。gcc和vc的不一样。google一下。

【在 k****f 的大作中提到】
: 怎么用SSE2??手写汇编码么?
:
: 放的

b******n
发帖数: 592
6
也注意一下prefetch,还有数据在内存中的存放方法,对其等等,这些东西在AMD平台非
常重要,Intel好像比较好一些,不用手工优化太多。

【在 b******n 的大作中提到】
: 不用,有函数,具体要看平台。gcc和vc的不一样。google一下。
k****f
发帖数: 3794
7
那种函数基本也是对应于汇编码的
是不是用了这种函数,那个函数的调用代码中,gcc的优化选项就会被暂时禁止呢?
曾经用vc写过mmx的并行,结果还不如用c语言的优化。
肯定是有什么trick在里面,比如内存对齐,交错指令,预读取,
没有用对的话,结果还不如不用

【在 b******n 的大作中提到】
: 不用,有函数,具体要看平台。gcc和vc的不一样。google一下。
b******n
发帖数: 592
8
内存对其和预读取是起码的。这个不影响gcc本身的优化。关键是如果你的计算很核心的
地方。没必要什么都优化。你可以先反汇编一下核心计算函数的源代码,4.3支持SSE2,
看看有什么效果。你做的是什么样的计算?

【在 k****f 的大作中提到】
: 那种函数基本也是对应于汇编码的
: 是不是用了这种函数,那个函数的调用代码中,gcc的优化选项就会被暂时禁止呢?
: 曾经用vc写过mmx的并行,结果还不如用c语言的优化。
: 肯定是有什么trick在里面,比如内存对齐,交错指令,预读取,
: 没有用对的话,结果还不如不用

f*******y
发帖数: 988
9
算法和数据结构都没啥可能提高的话,不如花钱买台好机器

【在 s***r 的大作中提到】
: 我有一个C# code,几乎是纯计算。要跑很长时间,现在想提高一下效率。
: 看了下数据结构和算法,似乎没有什么能提高的了
: 现在想:
: 1.多线程。机子有多个CPU.可是分成多线程后效率并没有提高特别多(8 core,
: 用了7-8个线程,速度只提高了一倍,用4线程只提高25%)。
: 原因大概是context switch太多了
: 试过改高priority,把线程的affinity设定在一个core上,似乎都没什么用,
: 不知道是不是因为是C# code,CLR管的太多了
: 2.用C++写。但是听说纯计算C#比C++不差太多。
: 请教还有什么办法?

b**********y
发帖数: 26
10
先写个log看看那部分最费时间。

【在 s***r 的大作中提到】
: 我有一个C# code,几乎是纯计算。要跑很长时间,现在想提高一下效率。
: 看了下数据结构和算法,似乎没有什么能提高的了
: 现在想:
: 1.多线程。机子有多个CPU.可是分成多线程后效率并没有提高特别多(8 core,
: 用了7-8个线程,速度只提高了一倍,用4线程只提高25%)。
: 原因大概是context switch太多了
: 试过改高priority,把线程的affinity设定在一个core上,似乎都没什么用,
: 不知道是不是因为是C# code,CLR管的太多了
: 2.用C++写。但是听说纯计算C#比C++不差太多。
: 请教还有什么办法?

相关主题
痛恨Python的和当年痛恨Java的一个道理多线程/进程并发读文件有无开销问题?
Python就是爽多线程下的gdb core dump问题
拜托推荐多线程和socket的书[合集] 问个多线程的问题
进入Programming版参与讨论
c*****z
发帖数: 1211
11
profiling先

【在 b**********y 的大作中提到】
: 先写个log看看那部分最费时间。
y*****a
发帖数: 171
12
纯计算的话,你得有话算法。C#和java差不多,如果你的程序消耗内存很多,你去看看
,java virtual machine方面的paper, 有很多内存优化的方法,这个和普通的gcc不一
样的,不过低层原理是一致的。
a******8
发帖数: 46
13
"多线程"运行过程中观察CPU和Memory利用率,看哪个是bottle-neck?
留意一下程序中"lock"的使用, 很多情况都是由资源竞争引起的.
如果方便的话,share一下你的程序,让大家看看.
j*k
发帖数: 109
14
我的C#程序速度是C++的一半,纯计算。VS默认的RELEASE编译。
y*****g
发帖数: 2
15
试一试关键的数据结构用Struct? 个人经验纯计算很大的开销在堆分配上

【在 j*k 的大作中提到】
: 我的C#程序速度是C++的一半,纯计算。VS默认的RELEASE编译。
c****e
发帖数: 1453
16
prejit your program first.
1 (共1页)
进入Programming版参与讨论
相关主题
单线程一般都是历史原因我是一个线程 (转载)
c++posix多线程问题请教痛恨Python的和当年痛恨Java的一个道理
spring 是一个event loop一直在跑么?然后处理各种event?Python就是爽
Python 多线程或多进程如何搞拜托推荐多线程和socket的书
晕了,多线程,共享内存的问题多线程/进程并发读文件有无开销问题?
请教一个Node.js的疑惑多线程下的gdb core dump问题
Java 多线程:还需要好CPU?[合集] 问个多线程的问题
关于多线程锁:锁代码还是锁资源?关于多线程编程的一个问题
相关话题的讨论汇总
话题: c#话题: 计算话题: 提高话题: c++话题: 线程