ATOM优化之GCC篇

ATOM程序优化利器中,笔者着重讲述了如何使用Intel Compiler对ATOM应用程序的优化,很多网友都比较感兴趣并想知道在GCC编译器下如何优化ATOM。借此,本文将重点于讨论如何使ATOM应用程序在GCC编译器下优化。

细心的网友可能发现GCC4.4.2手册没有讲述如何在ATOM平台优化,所以要通过GCC对ATOM平台优化,一定要从平台的特性出发。为了便于理解,先回顾一下ATOM平台的特点:
1. ATOM平台的指令是顺序执行的。
2. ATOM平台支持超线程技术,也就是我们通常所说的1C:2T。
3. ATOM平台支持SSE3指令集。
如果我们的GCC编译选项能够满足这基本的三大点,那么相应的应用程序性能也将会有很大提升。

讨论1:ATOM应用程序在ATOM计算机上编译。
对于本机编译而言,这种开发环境相对是比较容易优化的。我们只要关心两个基本点:
1. SSE3指令集。
2. 平台环境(32位还是64位?)。
a) 对于32位操作系统,ATOM应用程序的优化设置为:
-mtune=native -m32 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse -O3
说明:
-mtune 表示CPU类型,因为它是本地编译,所以选择native编译选项。
-m32 表示平台是32位OS。
-mmmx -msse -msse2 -msse3 -mssse3 表示它支持MMX和SSE1~3的全部指令,编译器更加代码情况优化。
-mfpmath=sse 表示使用SSE指令浮点库
-O3 表示是第3级别优化

b) 对于64位操作系统,ATOM应用程序的优化设置为:
-mtune=native -m64 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse -O3
和32位系统的唯一差别是:使用-m64替代了-m32,这个比较容易理解,不再鳌述了。

讨论2:ATOM应用程序在非ATOM计算机上编译。
相比与讨论1,这里的主要差别是编译的计算器不是ATOM平台,那么默认的本地优化必须手工设置。按照32位和64位的区别,下文还是分别展开。
a) 对于32位操作系统,ATOM应用程序的优化设置为:
-mtune=pentium -m32 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse -O3
说明
-mtune设置为pentium处理器,主要考虑它的指令是顺序执行。这个和ATOM的执行顺序十分吻合,对于程序的效率和节能方面将有很大帮助。
-m32 表示平台是32位OS。
-mmmx -msse -msse2 -msse3 -mssse3 表示它支持MMX和SSE1~3的全部指令,编译器更加代码情况优化。
-mfpmath=sse 表示使用SSE指令浮点库
-O3 表示是第3级别优化

b) 对于64位操作系统,ATOM应用程序的优化设置为:
-mtune=pentium -m64 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse -O3
和32位系统的唯一差别是:使用-m64替代了-m32,这个比较容易理解,不再鳌述了。

虽然GCC在ATOM应用程序方面也做了相当的工作,但是较Intel编译器而言还是有差距的。比如说,使用Intel 10.0编译出的程序与GCC4.1.1编译出的程序,在电池耐久力方面高~10%,在Renders数量方面要高~18%,所以笔者个人认为:尽量使用 Intel编译器编译ATOM程序,除非非要用GCC来编译才选择。

总之,个人观点,欢迎讨论!

Tags:

How to setup GFS on RHEL/CentOS/Fedora

A clustered file system or SAN file system, is an enterprise storage file system which can be shared (concurrently accessed for reading and writing) by multiple computers. Such devices are usually clustered servers, which connect to the underlying block device over an external storage device. Such a device is commonly a storage area network (SAN).
Examples of such file systems:
* GFS : The Red Hat Global File System
* GPFS : IBM General Parallel File System
* QFS : The Sun Quick File System
* OCFS : Oracle cluster file system
In the rest of tutorial we will focus on GFS2 file system the new version of GFS file system, and how to mount a shared disk on a Fedora, Red Hat or CentOS. GFS (Global File System) is a cluster file system. It allows a cluster of computers to simultaneously use a block device that is shared between them (with FC, iSCSI, NBD, etc…). GFS is a free software, distributed under the terms of the GNU General Public License, was originally developed as part of a thesis-project at the University of Minnesota in 1997.
So, let start this brief configuration.
First install utilities for managing the global filesystem (GFS)
[mezgani@troy ~]$ sudo yum install gfs2-utils
You may use parted to manage partitions on sda disk, and create some partitions.
Parted is an industrial-strength package for creating, destroying, resizing, checking and copying partitions, and the file systems on them. It support big partitions unlike fdisk.
For example here i create a partition of 1T.
[mezgani@troy ~]$ sudo parted /dev/sda
GNU Parted 1.8.1
On utilise /dev/sda
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) p

Model: HP MSA2012fc (scsi)
Disk /dev/sda: 2400GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Fanions
2 1001GB 2400GB 1399GB ext3 primary

(parted) mkpart primary
Type de système de fichiers? [ext2]? ext3
Début? 0
Fin? 1001GB
(parted) print

Model: HP MSA2012fc (scsi)
Disk /dev/sda: 2400GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Fanions
1 17,4kB 1001GB 1001GB ext3 primary
(parted) quit

After creating partition, make gfs2 file system on it, with mkfs.gfs2 like this
[mezgani@troy ~]$ sudo /sbin/mkfs.gfs2 -p lock_dlm -t alpha:gfs2 -j 8 /dev/sda1
This will destroy any data on /dev/sda1.
It appears to contain a ext3 filesystem.

Are you sure you want to proceed? [y/n] y

Device: /dev/sda1
Blocksize: 4096
Device Size 932.25 GB (244384761 blocks)
Filesystem Size: 932.25 GB (244384760 blocks)
Journals: 8
Resource Groups: 3730
Locking Protocol: “lock_dlm”
Lock Table: “alpha:gfs2″

Last, make a directory and mount our gfs file system on it.
[mezgani@troy ~]$ sudo mkdir /home/disk
[mezgani@troy ~]$ sudo mount -o acl -t gfs2 /dev/sda1 /home/disk

However, if a storage device loses power or is physically disconnected, file system corruption may occur.
Well, you can recover the GFS2 file system by using the gfs_fsck command.

[mezgani@troy ~]$ sudo fsck.gfs2 -v -y /dev/sda1
With the -y flag specified, the fsck.gfs2 command does not prompt you for an answer before making changes.

Tags:

My first flex program

flex很有成就感,哈哈

开始我的j2ee之旅

Tags: