Search This Blog

Thursday, August 11, 2011

-o 表示产生目标文件。
-c 表示只编译代码但不进行链接,加改参数生成的目标文件是不能执行的(我们常用的链接库就是这样得来的)。

通常在只有一个源文件的情况下不需要加-c。但实际上大多数情况下C程序远不止1个源文件,当main函数需要调用不在同一源文件下的函数时就需要链接到包含该函数的目标文件。
举个例子:
/*main.c*/
#include<stdio.h>
int main(){
      test();
}

/*test.c*/
#include<stdio.h>
extern void test(){
}
gcc -c test.c -o test
   gcc test main.c -o main 
-c只编译不链接,生成object文件
如果不加-c只使用-o选项,gcc会调用ld来链接生成可执行的二进制文件
与-c类似的选项有-E只预处理,-s生成汇编文件 
 
    if main function is in the same .c file:
gcc -c test.c -o test
   gcc test -o test 
 
gcc -c traverse.c
生成.o文件 
gcc -o traverse  traverse.o(注意.o在后面)
生成可执行文件

如何写好外刊论文

如何写好外刊论文

有人归纳了外刊论文撰写的五个基本要求,即5C:正确(correctness)、清楚(clarity)、简洁(concision)、完整(completion)和一致性(consistency) 。只有满足这5点,才算是一篇合格的外刊文章。
1. Introduction:
Introduction是外刊文章最难写的部分之一(另外就是Discussion)。中文文章的缺陷就在于Introduction没有内涵,过于简 单,没有真正体现论文的研究起初和创新要素。外刊论文对于Introduction的要求是非常高的,一个好的Introduction相当于文章成功了 一半。所以大家应该在Introduction的撰写上下功夫。要写好Introduction,最重要的是要保持鲜明的层次感和极强的逻辑性,这两点是 紧密结的,即在符合逻辑性的基础上建立层层递进的关系。
A. 阐述自己研究领域的基本内容。要尽量简洁明了,不罗嗦;须知看文章者都是该领域的专家,所以一些显而易见的知识要用概括性的而不是叙述性的语言来描述。
B. 文献总结回顾。是Introduction的 重头戏之一,要特别着重笔墨来描写。一方面要把该领域内过去和现在的状况全面概括总结出来,不能有丝毫的遗漏,特别是最新的进展和过去经典文献的引用(这 是两个最容易出问题的地方,要极力避免;一旦审稿人指出这两个毛病,很可能意味着表明你做的不够深入或全面,负面作用非常明显)。另一方面,文献引用和数 据提供一定要准确,切记避免片面摘录部分结果而不反映文献的总体结果;引用的数据也要正确,特别是间接引用的数据(即不是从原文献中查到,而是从别人文献 中发现的另一篇文献的数据);数据出错会导致文章的印象特差!此外,引用文献时注意防止造成抄袭的印象,即不要原文抄录,要用自己的话进行总结描述。如果 审稿人正好是文献的引用者的话,原文照抄的结果一定会很糟糕。
C. 分析过去研究的局限性并阐明自己研究的创新点。这是整个Introduction的高潮,因而要慎之又慎。阐述局限性时,需要客观公正评价别人的工作,不 要把抬高自己研究的价值建立在贬低别人的工作之上(这是中文文章易犯的毛病),外刊论文写作万万不可如此,一定要遵循实事求是的原则来分析。在阐述自己的 创新点时,要紧紧围绕过去研究的缺陷性来描述,完整而清晰地描述自己的解决思路。需要注意文章的摊子不要铺的太大,要抓住一点进行深入的阐述。只要能够很 好的解决一个问题,就是篇好文章;创新性描述的越多越大,越容易被审稿人抓住把柄。中文文章的特点是创新性要多要大,而英文文章的特点恰恰相反,深入系统 的解决一到两个问题就算相当不错。
D. 总结性描述论文的研究内容,可以分为一二三四等几个方面来描述,为Introduction做最后的收尾工作。 至此,Introduction的写作算是大功告成。但是写完之后,还是要慎之又慎的仔细修改,琢磨每一个句子是否表达得恰当准确,这对 Introduction的修改完善至关重要。
2. Methods:
Methods部分描述论文实验过程,这一过程的写作相对较为简单,但是需注意的问题不少,重要的在于完整和科学。完整就是实验当中的每一个环节都要注意 到,不要顾此失彼,遗漏一些重要内容。Methods部分可按实验对象、实验设备、实验材料、实验记录、实验分析方法等来组织行文。只要能在以下4个方面 做到完整和科学的描述,相信写好Methods不是主要问题。
A. 实验对象一般是人、动物或一些组织等,它们的基本信息要描述明确;此外要注意国外刊物大多对牵扯到人或动物的实验都有一些特定要求,有些是不允许在人或动 物身上进行的实验操作,这需要认真阅读投稿刊物中关于实验的详细规定;如果违反这一规定,可能会不接受评审或发表。
B. 实验设备,要对仪器型号、生产厂家、实验过程中的用途等作详细说明;实验设备之间的连接要科学正确,不要给人混乱或操作错误的感觉。设备使用时一些必要的 步骤不可或缺,尤其是可能对实验结果造成特定影响的操作更要详细说明。这样做的好处是为了在Discussion中能够进行对应的分析。比如,一些设备在 使用前要校正(calibration),有的要求每阶段实验之后都要重新校正,以保证结果的正确性;一定要详细说明你的操作步骤或校正过程,便于评审人 分析你的结果。
C. 实验材料,不同学科有不同要求。总体上来说要注意说明材料选择的必要性,也就是对为什么要选择这种材料,最好有一定的说明。如果这点描述不清,可能会导致整个实验过程不成立。
D. 实验过程,就是清楚描述实验的整个操作流程,一般要附以实验流程图进行说明。流程图的画法很多,有文字式的,有文字和示意图结合的,不同实验有不同做法。 一般来说,可能后者多一些(实验性学科尤其如此),因为这样能使评审人对实验过程一目了然。如果示意图画得漂亮,还可以增加一些印象分。描述时要有鲜明的 层次感,对每个步骤之间的顺序和关联要描述清楚,不要造成实验过程混乱不堪的印象,因为评审人最终判断你的实验是否合理,是从这个过程描述得来的。
3. Results:
有人把Results和Discussion放在一起写,但是大多数论文都是分开的。这两种做法取决于文章的类型。如果你的结果在分析的同时进行讨论更加 合适,并不适合单独拿出来分析(或者是那样做很困难,导致Discussion成为鸡肋时),合在一起是合适的;反之就应该分开写。
A. Results的要求是翔实准确。准确是结果必须是真实的,不能伪造和篡改。翔实是提供最全面的分析结果,把一切从实验中得到的结果都提供给读者,不要故 意隐瞒或遗漏某些重要结果。从某种意义上来说,结果不够翔实并不导致论文直接被拒,但结果的真实性被怀疑文章就肯定被拒。
B. 结果提供一般是表和图。不同杂志对图表要求不完全一致,应根据杂志要求分别对待。表格能清晰展示论文获得的第一手结果,便于后人在研究时进行引用和对比。 图示能将数据的变化趋势灵活的表现出来,更直接和富于感染力。图表结合,能取长补短,使结果展现更丰富。目前,大家越来越喜欢提供各种各样的图,但杂志却 要尽量限制图的个数;因为会增加排版的困难,版面费和出版社的支出也就会增加。因此,建议大家在提供图时,尽量用最少的图提供最多的信息,最多不超过8 个。图片太多显得罗索和累赘,主编不会欣赏;必要时可用表格替代一些图。图片格式要求每个杂志不同,用tif格式较多,不推荐用bmp(jpg更不能 用)。有人说用矢量图清楚些,其实和tif没什么区别,只要足够清晰就行。黑白图片可免费,彩色图片绝对要收费,而且价格不菲。
C. Results和Discussion分开写时,Results部分尽量不要涉及对结果的评论,最多是总结陈述结果就可以了。否则造成这两部分的内容重 叠,显得累赘,从而对Discussion不利。结果的描述也要注意层次安排,要按照条理性要求分别描述,显得逻辑性较强。不要乱七八糟,降低论文的可读 性。
D. Results中大多要提供统计结果。方差分析的结果形式要根据刊物的格式给出,有的要求对分析值、自由度和概率都要详细的给出,有的只要分析值和概率就 可以了。概率可以用p=0.02或者p<0.03等形式给出,自由度的表达也有特殊要求。这些细节问题虽然关系不大,但是注意格式统一,不要乱七八 糟各自为战。统计分析结果过多时,可用表格给出,具体可参照SPSS软件分析之后的结果。如果论文结果部分通篇都是统计分析的数据,会显得凌乱不堪,表格 可以避免这种情况。
4. Discussion:
Introduction和Discussion是最难写的两部分。Discussion之所以难写,是因为这里面最能够显示一个作者研究问题的深度和广 度。深度就是论文对于提出问题的研究到了一个什么样的程度,广度指是否能够从多个角度来分析解释实验结果。要写好Discussion,大概可以分为下面 两个步骤:
A. 选择要深入讨论的问题。Results中有的结果是重要的,有的则可一笔带过。选择合适的结果在Discussion部 分进行深入讨论,是写好该部分首先要面临的问题。一般来说,可根据如下原则来判断:如果你的结果体现了实验的独特性,是其他研究中没有得到的,那这个结果 就是要重点讨论的问题;有些结果和前人的研究一致,并没有显著性差异,就应该一笔带过而无需深入讨论。Discussion的一个重要作用就是要突出自己 研究的创新性,并体现出显著区别于他人的特点,区别大和小是另外一个问题,重要的是要有区别、区别就是创新。
B. 对选中的问题按一定层次从多个角度进行讨论,说理要有根据、问题要讲清楚、讲透彻。选择的问题有时不只一个(多数情况是2个以上),因此要按一定层次描述 清楚。一般来说,把最重要的放在中间,次之的放开头和末尾。放在中间能将评审人的情绪带至高潮,前面是铺垫,后面是总结。这样的顺序似乎更合适。问题无论 大小,是否重要,都要从多个角度展开深入讨论:(1)首先要有类似结果的对比,说明自己结论的独特性;(2)其次要系统阐述为什么会有这样的结果,方法有 多种(从实验设计角度,从理论原理角度,从分析方法角度,或借鉴别人分析方法等等)。重要的是将这个问题深入阐述清楚,不能让人有意犹未尽之感(要做到这 点的确很困难,因为评审人总会提出新的问题,我们只可能尽量做到这一点罢了)。
C. Discussion部分还要注意保持和Results的一致性!就是结果和讨论要一一对应。千万不要出现按讨论的内容可以推出与实验相反的结论这种情 形,那证明你的讨论思路是彻底的失败或你的实验压根儿就是失败的。所以Discussion的文字描述和语言表达的精确性尤为重要。由于中英文表达的不 同,在投稿之前要尽量避免出现表达上的误解,如果论文因此被拒是很冤枉的。

5. Acknowledge & References:

Acknowledge主要分为两个:第一是表明研究的基金来源,中国一般都是Nature Science Foundation of China(NSFC,国家自然科学基金),美国大多是National Institute of Health(NIH, 美国国家卫生研究院)。写基金时一般要标注清楚基金号码(Grant Number),只有这样才算是该项基金的研究成果,也可以算做实验室的研究成果。须知没有任何一项研究成果是在没有资金资助的情况下完成的,所以这一点 非常必要。第二是对参与人员(没有列在作者中的研究人员)和单位表示感谢,如果通过一审和最终接受发表,还要添上对editor和anonymous reviewers的感谢,这是基本礼貌。
References重要在于格式。不同杂志对参考文献格式要求不一样,具体下来有所区别的可以分为:作者的写法,有的是简写在前,有的简写在后, 有的简写有点,有的简写没有点;文章的名字,有的要加上引号,有的没有引号;期刊的写法,有的要简写,有的要全称,有的要斜体,有的则不需要;年和期卷号 的顺序,有的是年在前,有的是年在后;期刊论文、书、学位论文、会议论文,四种引用的格式各不相同;文献的排列顺序,有的是按照字母的顺序,有的则是按照 在论文中出现的顺序用阿拉伯数字排序。基本上就是这些问题,看来很是琐碎,但是如果你的参考文献排列的乱七八糟,那就会使得评审人对你论文的印象很差,认 为你没有认知组织和撰写论文,造成一定的负面影响。所以,事情虽小,影响却大,还是要认真组织为好。
此外,论文在撰写时要自始至终都用英语写,千万不要先写中文再译成英文。这样写出来的文章肯定是中不中,英不英,而且极大浪费精力。宁可一开始写得 语法差一些,慢慢修改都比这种写法好。如果有同专业英语比较好的人帮助的话,这样写还会更省事。写作时行文时态要注意,中文没有时态问题,英文有,而且要 求还相当严格。一般来说,大多数情况下是过去时态,在Introduction文献回顾,Methods整个部分,Results结果总 结,Discussion中的大部分,都用过去时态陈述。其他情况下可以用一般时态来描述。时态之间的界限是比较严格的,最好是仔细的通读国外的论文,好 好分析一下,或者让有经验的人帮你把把关,这样比较好一些。
二、Writing Skills in English for Research Paper
写paper 注意九个环节:Preparation, Structure, Title, Abstracts, Introduction, Conclusion, Body of Paper, Recision, Acknowledgement。Preparation就是收集资料,找出灵感和方向,主要依靠的是journal in library。Structure是重点,paper的structure应该是两个triangle组成的:上面一个倒三角,下面一个正三角,意思就 是选题要宽(wide),研究方向要窄,然后最后的conclusion又发散开来。在paper的body前后都必须有declarative statement,用最少的字句表达出自己的观点,吸引读者。
Title必须清晰简短(clear,short),表达出自己唯一的topic以提升读者的兴趣(promote the interest of reader),然而title中切记不能出现abbreviation和自己的result。
Abstracts 是paper的一个缩写(miniature of whole paper),一定要简明扼要(less than 200 words,one paragraph),按照paper的顺序介绍主要研究对象(subject)、实验设计(design)、实验步骤(procedures)以及最后 结果(results),这种介绍必须让非专业的人员 (non-specialist) 能够看懂。
Introduction 同样要保证简短,顺序是一般背景介绍、别人工作成果、自己的研究目的及工作简介,其中介绍别人工作时只需介绍和自己最相关的方面(very relevant),而对自己的工作介绍不用说明细节,因为这个要放到body中去。不要忘记在介绍自己工作之前要有一个declarative statement。
Body部分可以分为methods、result和discussion三个部分:①Methods,详尽的介绍自己的实验方案以便于他人能够重 复自己的实验过程,对于通用的实验方案可以简略,重点要放到自己的独创方案上面(own procedures),按照实验的先后顺序介绍,为了文章的阅读方便,不要使用过多层次的subheadings,比如 subsubsubsection等等。②Result,使用text、table、figure等手段表达出来,其中table不要使用过多,而 figure必须保证图线清楚、注解明确,必要的时候还要对于自己的result中的一些结论进行解释说明。③Discussion,这个部分是为了以后 的study,在其中提出自己的problem或者是hypothesis,和别人的成果进行比较,暗示自己的主要收获,为后面的conclusion做 准备。
Conclusion中不要包含body以外的information,保持brief、neat和concise,一定要舍得结束自己的 paper;如果自己的paper只是project的一部分,稍做说明。Revison是在写完之后回头看看是否有逻辑上的错误,是否考虑到了读者兴 趣,自己的declarative statement是否令人满意,Brevity is the soul of literary construction。Acknowledgement,不要忘记,这个反应了一个人的个人品质。

Wednesday, August 10, 2011

cudaError_t cudaHostAlloc ( void **  ptr,


size_t  size,


unsigned int  flags 

)


Allocates count bytes of host memory that is page-locked and accessible to the device. The driver tracks the virtual memory ranges allocated with this function and automatically accelerates calls to functions such as cudaMemcpy(). Since the memory can be accessed directly by the device, it can be read or written with much higher bandwidth than pageable memory obtained with functions such as malloc(). Allocating excessive amounts of pinned memory may degrade system performance, since it reduces the amount of memory available to the system for paging. As a result, this function is best used sparingly to allocate staging areas for data exchange between host and device.
The flags parameter enables different options to be specified that affect the allocation, as follows.
  • cudaHostAllocDefault: This flag's value is defined to be 0 and causes cudaHostAlloc() to emulate cudaMallocHost().
  • cudaHostAllocPortable: The memory returned by this call will be considered as pinned memory by all CUDA contexts, not just the one that performed the allocation.
  • cudaHostAllocMapped: Maps the allocation into the CUDA address space. The device pointer to the memory may be obtained by calling cudaHostGetDevicePointer().
  • cudaHostAllocWriteCombined: Allocates the memory as write-combined (WC). WC memory can be transferred across the PCI Express bus more quickly on some system configurations, but cannot be read efficiently by most CPUs. WC memory is a good option for buffers that will be written by the CPU and read by the device via mapped pinned memory or host->device transfers.
All of these flags are orthogonal to one another: a developer may allocate memory that is portable, mapped and/or write-combined with no restrictions.
cudaSetDeviceFlags() must have been called with the cudaDeviceMapHost flag in order for the cudaHostAllocMapped flag to have any effect.
The cudaHostAllocMapped flag may be specified on CUDA contexts for devices that do not support mapped pinned memory. The failure is deferred to cudaHostGetDevicePointer() because the memory may be mapped into other CUDA contexts via the cudaHostAllocPortable flag.
Memory allocated by this function must be freed with cudaFreeHost().

Parameters:

ptr - Device pointer to allocated memory

size - Requested allocation size in bytes

flags - Requested properties of allocated memory
Returns:
cudaSuccess, cudaErrorMemoryAllocation
Note:
Note that this function may also return error codes from previous, asynchronous launches.
See also:
cudaSetDeviceFlags, cudaMallocHost, cudaFreeHost