- 相關推薦
學習方法多核診斷題
學習方法多核診斷題
一、請仔細閱讀每一道題,將題目中所講述的內(nèi)容同自己的實際情況相對照,看看符合程度如何,并按照以下評定標準評定。
A=完全符合自己的情況 B=大體上符合自己的情況 C=有一些符合自己的情況D=完全不符合自己的情況
1、上課時,我頭腦里往往會想些別的事,以致于老師講的許多內(nèi)容我都似乎沒有聽到。
2、上課時我總是聚精會神地聽老師的講解。
3、某些主要的學科或一門學科中我認為特別難學的或特別重要的章節(jié),我總爭取預習(在課前或晚上)。
4、我的記憶力還不錯,背誦一篇課文 或記住學習的東西對我來說不是太難的事。
5、閱讀課本或其他讀物時我很少用紅藍筆或其他筆畫線做記號。
6、在寒暑假期間,我常常要制定一個學習計劃并努力按照計劃去學點新知識 。
7、要背誦課文時,我常常在誦讀幾遍之后就開始試背,然后再打開書誦讀幾遍,再試背 ,也就是讓誦讀和背誦交替進行。
8、作業(yè)中有些不好解答的題目,我總是自己盡力想辦法解答,不到萬不得已,不去問老師和同學。
9、我常常把一些我認為寫的好的文章反復誦讀。
10、學習時,我時常把教材內(nèi)容分解為若干內(nèi)容或若干知識點。
11、考試后全班最好的成績是多少分、是誰,我總是最感興趣。
12、我常常由于能有條理的扼要的回答老師的提問而受表揚。
13、上課或自己復習功課時,我常常覺得時間過得很慢。
14、學習時,我不僅能夠弄清楚各個部分各個要點的意思,而且能較快的弄清楚各個部分各個要點之間的聯(lián)系和關系。
15、在課堂上,老師呈示的掛圖、模型、標本或進行的演示實驗,我總是爭取看得清清楚楚,弄明白他說明什么問題或可以得出什么結(jié)論。
16、語文課本中的課文,我很少去反復誦讀,我認為只要會解釋,懂得大意,做做作業(yè)就行。
17、我在閱讀報紙或其他課外讀物時,要出聲或默默地一個字一個字的讀下去,所以速度比較慢。
18、上課時,我盡力想象老師所講的內(nèi)容,也就是說,如果有可能的話,我就把老師所講的內(nèi)容變成形象在頭腦中顯現(xiàn)出來。
19、做作業(yè)時碰到難題我常常找其他人幫助解決,以免自己花太多的時間去琢磨。
20、雖然我重理解,不愛死記課本中的字句,但對于一些關鍵性的問題和公式,我還是 努力記住記熟。
21、做問答題時,我往往心里覺得都理解了,可是動筆去寫又寫不好。
22、寫文章或做問答題時,我常常要先列出大綱或要點,然后才下筆去寫。
23、閱讀一篇文章或課文時,我能迅速的抓住各段的段落大意和全篇的中心思想。
24、我盡量作到當天的功課當天就進行復習和寫作業(yè)。
25、我重視平時的復習,考試前夕倒不怎么緊張,有時反而出去玩一玩,讓頭腦休息休息。
26、我喜歡獨立學習獨立思考,但遇到問題時,我也喜歡和同學一起討論。
27、聽老師講解知識時,我自己往往還聯(lián)想起于此相關的一些知識或事例。
28、讀物理化學時,我很重視書上說的各種實驗,盡力想象實驗進行的真實情景。
29、上課時,有時老師要講的內(nèi)容還沒有講完,我就知道他要說什么或要做出什么結(jié)論。
30、學習時,我經(jīng)常把新材料和已有的知識經(jīng)驗聯(lián)系起來。
31、學習比較抽象的材料時,我總是努力聯(lián)系實際,或舉出一些具體的例子去說明它。
32、讀書時用筆畫線做記號是一件很困難的事,因為我往往分不清哪些地方該畫,哪些地方不該畫。
33、聽課時,我往往把不了解的問題或聯(lián)想起來的問題記下,以便課后進一步思考、弄清。
34、老師布置的作業(yè)我總是努力按時完成。
35、由于種種原因,我很難每天在固定的時間開始做功課。
36、我能夠把詳細的教材縮寫成提綱,必要時,我又能根據(jù)提綱進行發(fā)揮,寫出詳細的內(nèi)容。
37、上課時,我專心聽講,緊緊抓住老師講解的線索,積極思考老師所講的內(nèi)容。
38、學習理、化、生物、地理學科,我不單用頭腦想,只要可能,我總是動手去試做一下。
39、聽老師講課時,我總喜歡動筆記一些要點、綱要。
40、學習時,我不滿足于記一些公理、公式、定義、結(jié)論,我總是想方弄清楚它們是怎么得來的。
41、在回答問題時,我喜歡根據(jù)自己的理解,用自己的話去回答,很少硬背課本上的字句。
42、我的書桌總是整理的整整齊齊,各種學習用品總是放在固定的位子。
43、我喜歡把學到的知識用來解決或解釋生活上或課外活動中碰到的問題。
44、在上課或聽報告時,我能夠把老師講的內(nèi)容扼要地、系統(tǒng)的記下來。
45、考試時,我總是先把考題看一下,把容易做的或得分多的題目先做了把難做的題目留到最后去想。
46、在學習時,我總是力求弄清教材中各部分、各要點之間的聯(lián)系或關系。
47、在準備考試時,我常常先提出一些問題考自己,看看準備是否充分了。
48、我的學習用品隨便放,以致要用時常常要找好久。
49、我每天總是在固定時間里復習功課,完成作業(yè)。
50、在準備考試時,我常常根據(jù)教科書寫出各道復習題的答案要點。
51、發(fā)回的作業(yè)或卷子,如果有做錯的,我總要弄清楚為什么錯了,怎樣做才對。
52、在復習功課時,我喜歡把詳盡的材料變成簡要的提綱,以便更好的記住。
53、我常常把學到的各種知識進行比較,發(fā)現(xiàn)它們之間的異同和聯(lián)系。
54、在閱讀報紙小說或某些課外讀物時,我不需要一個字一個字的讀,而是一個分句或一個整句的讀,所以速度比較快。
55、復習功課時,我常常把學過的知識列成表或畫成圖,借以揭示各種知識的區(qū)別和聯(lián)系。
56、學過的各種知識,我一般都能有條理有系統(tǒng)的保存在腦子里,所以,要用到某一概念或定理時,我能很容易的找到它。
57、我重視學習經(jīng)驗的總結(jié),并時常和同學交流學習經(jīng)驗。
58、學習時,我喜歡思考,即使很難理解的材料,我也總要想辦法把它徹底弄懂。
59、我在動手做作業(yè)之前,總是先把功課認真的復習一遍,弄懂教材的內(nèi)容。
60、我挺喜歡學習,學習使我每天都在增長知識、開闊眼界。
二、下面有50道題,每道題有3個備選項,請根據(jù)自己的實際情況選擇,每題只能選擇一種結(jié)果。
A.較符合自己的情況 B.難回答 C.不符合自己的情況
第一部分:學習方法
1.喜歡用筆勾出過記下閱讀中不懂的地方。 A. B. C.
2.經(jīng)常閱讀與自己學習無直接關系的書籍。 A. B. C.
3.在觀察或思考時,重視自己的看法。而且在遇到問題時,對自己的看法很有信心。 A.
B. C.
4.在對老師將要講的課會做很充分的預習,并且會預先做一些練習。 A. B. C.
5.遇到問題,我喜歡和同學一起討論。 A. B. C.
6.為更好地理解老師講的課程,我會對筆記等內(nèi)容歸納成太哦問或圖表。 A. B. C.
7.聽老師講解問題時,眼睛注視著老師。 A. B. C.
8.我喜歡利用參考書和習題集。 A. B. C.
9.對于學習中的要點,我會很注意歸納并寫出來。 A. B. C.
10.我不經(jīng)常查閱字典、手冊等工具書。 A. B. C.
11.我對作業(yè)和考試中的錯誤會進行修改,并根據(jù)試卷分析自己錯誤的原因。 A. B. C.
12.我認為重要的內(nèi)容,就格外注意聽講和理解。 A. B. C.
13.閱讀中若有不懂的地方,非弄懂不可。 A. B. C.
14.在學習的時候會經(jīng)常聯(lián)系其他學科內(nèi)容進行學習。 A. B. C.
15.在動筆解題以前,先做全面的審題,有了設想后,才去解題。 A. B. C.
16.閱讀中認為重要的或需要記住的地方就劃上線或做上記號。 A. B. C.
17.經(jīng)常向老師或他人請教不懂的問題。 A. B. C.
18.喜歡討論學習中遇到的問題。 A. B. C.
19.我很注意別人好的學習方法,并努力學會。 A. B. C.
20.對需要記牢的公式、定理等反復進行記憶。 A. B. C.
21.經(jīng)常觀察實物或參考有關資料對其進行學習。 A. B. C.
22.聽課時做完整的筆記。 A. B. C.
23.我有專門的錯題本。 A. B. C.
24.如果實在不能獨立解出習題,就看了答案再做。 A. B. C.
25.我經(jīng)常制定學習計劃,但不一定按照計劃來做。 A. B. C.
第二部分:應試心理
26.在重要考試的前幾天,我就坐立不安了。 A. B. C.
27.我每天早上都會吃飯而且早餐很有營養(yǎng)。 A. B. C.
28.在考試前,我總感到苦惱。 A. B. C.
29.在考試前,我感到煩躁,脾氣變壞。 A. B. C.
30.在緊張的溫課期間,常會想到:這次考試要是得到低分數(shù)怎么辦? A. B. C.
31.越臨近考試,上課時我的注意力就越難集中。 A. B. C.
32.一想到馬上就要考試了,參加任何文娛活動都感到?jīng)]勁。 A. B. C.
33.在考試前,我常做關于考試的夢。 A. B. C.
34.到了考試那天,我就不安起來。 A. B. C.
35.當聽到開始考試的鈴聲響了,我的心馬上緊張地急跳起來。 A. B. C.
36.遇到重要考試,我的腦子就變得比平時遲鈍。 A. B. C.
37.看到考試題目越多、越難,我就越感到不安。 A. B. C.
38.一遇到很難的考試,我卻擔心自己會不及格。 A. B. C.
39.在緊張的考試中,我卻會想些與考試武官的事情,注意力集中不起來。 A. B. C.
40.在考試時,我會緊張得連平時記得滾瓜爛熟的知識一點也回憶不起來。 A. B. C.
41.考試中,我想上廁所的念頭比平時多些。 A. B. C.
42.我對考試十分厭煩。 A. B. C.
43.在考試時,我緊張得手發(fā)僵,寫字不流暢。 A. B. C.
44.考試時,我經(jīng)常會看錯題目。 A. B. C.
45.在進行重要的考試時,我的頭就會痛起來。 A. B. C.
46.發(fā)現(xiàn)剩下的時間來不及做完考題,我就急得手足無措,渾身大汗。 A. B. C.
47.如果我考個不滿意的分數(shù),就不想看卷子。 A. B. C.
48.在考試后,經(jīng)常發(fā)展有的題目自己雖然懂卻沒答對。 A. B. C.
49.在考試中,有時我會沉迷在空想之中,一時忘了自己是在考試。 A. B. C.
50.要是不進行考試,我就能學到更多的知識。 A. B. C.
三、聽老師講課的時候,你所采取的方法、方式是:
A、緊張地盯著黑板,認真仔細地做筆記;
B、只記重點,課后再回想一遍;
C、認真地聽,適當?shù)刈龉P記,疑難的地方做出標記,課后再做系統(tǒng)地復習;
D、以“考前猜題”的心態(tài)聽課,抓住老師反復強調(diào)的內(nèi)容。
四、每當在課堂上教師提出問題時,你一般的做法是:
A、只要懂的就舉手回答;
B、即使懂也不敢舉手回答;
C、不僅不愿舉手回答問題,即使被老師提問到了,有時也不愿回答問題;
D、對于老師所提的問題,大多數(shù)都不懂。
五、學生做作業(yè)的態(tài)度是:
A、比較歸類,將零星的知識納入自己的知識體系之中,并尋求一題多解的途徑;
B、注意更正錯題,對習題資料加以整理和保存,并圍繞中心做課外習題;
C、只要完成作業(yè)就可以了;
D、抄襲。
六、學生是怎樣背記英語單詞的?
A、依賴書寫的方法來記;
B、用卡片來記;
篇二:多核編程和并行運算期末復習
5題每題20分
1.1)簡述MPI 6個函數(shù)格式定義,作用,參數(shù)含義。
MPI簡介:消息傳遞接口的標準,用于開發(fā)基于消息傳遞的并行程序,目的是為用戶提供一個實際可用的、可移植的、高效和靈活的消息傳遞接口庫,能夠在PC Windows和所有主要的Unix工作站以及并行機上實現(xiàn)。MPI是一個庫,不是一種語言,實現(xiàn)并行必須依托于某種語言:FORTRAN,C
MPI主要函數(shù):
MPI_Init,初始化函數(shù):MPI程序通過調(diào)用MPI_Init函數(shù)進行MPI環(huán)境,并完成所有的初始化工作,這個函數(shù)通常是MPI程序的第一個函數(shù)調(diào)用。
格式如下: int MPI_Init( int *argc, char ***argv )
MPI_Finalize,結(jié)束函數(shù):MPI通過調(diào)用MPI_Finalize函數(shù)從MPI環(huán)境中退出,它是MPI程序的最后一個MPI函數(shù)調(diào)用,否則程序的執(zhí)行結(jié)果是不可預知的。
格式如下: int MPI_Finalize(void) ;
MPI_Comm_rank,獲取進程的編號:MPI程序通過MPI_Comm_Rank函數(shù)調(diào)用獲取當前進程在指定通信域中的編號,有了該編號,不同的進程就可以將自身和其他進程區(qū)分開來,從而實現(xiàn)進程間的并行和合作。
格式如下:nt MPI_Comm_rank(MPI_Comm comm, int *rank)
MPI_Comm_size,獲取指定通信域的進程數(shù):MPI通過調(diào)用MPI_Comm_size函數(shù)獲取指定通信域的進程個數(shù),進程可根據(jù)它來確定自己應該完成的任務比例。
格式如下:int MPI_Comm_size(MPI_Comm comm, int *size)
MPI_Send消息發(fā)送函數(shù):MPI_Send函數(shù)用于發(fā)送一個消息到目標進程。其格式如下:
int MPI_Send( void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm_comm)
buf : 消息發(fā)送的起始地址
count :發(fā)送消息的數(shù)量
datatype: 發(fā)送數(shù)據(jù)的類型
dest: 標識目標進程
tag: 發(fā)送消息時打上的標簽
comm: 通信類型
MPI_Recv,消息接收:MPI_Recv函數(shù)用于從指定進程接收一個消息,格式如下:
int MPI_Recv( void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm, comm, MPI_Status *status )
buf : 消息接收后存放地址
count : 接收數(shù)量
datatype : 接收數(shù)據(jù)類型
source : 發(fā)送消息的進程
tag : 消息的標簽
comm : 通信類型
status : 接收狀態(tài)
1.2)舉例簡單的應用解釋如何通信。
每個進程會屬于一個或多個通信域。
一個簡單的例子
/* simple.c */
#include “mpi.h” /*MPI頭文件*/
#include
int main(argc, argv)
int argc ;
char **argv ;
{
int rank, size, tag = 1 ;
int senddata, recvdata ;
MPI_Status status ;
MPI_Init( &argc, &argv ) ; /*MPI的初始化*/
MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ; /*該進程的編號 */
MPI_Comm_size( MPI_COMM_WORLD, &size ); /* 總的進程數(shù)目*/
if ( rank == 0 ){
int senddata, recvdata ;
MPI_Status status ;
MPI_Init( &argc, &argv ) ; /*MPI的初始化*/
MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ; /*該進程的編號 */
MPI_Comm_size( MPI_COMM_WORLD, &size ); /* 總的進程數(shù)目*/
if ( rank == 0 ){
senddata = 9999 ;
MPI_Send( &senddata, 1, MPI_INT, 1, tag,
MPI_COMM_WORLD ) ; /* 發(fā)送數(shù)據(jù)到進
程1 */
}
if ( rank == 1 ){
MPI_Recv( &recvdata, 1, MPI_INT, 0, tag,
MPI_COMM_WORLD, &status);
/*從進程0接收數(shù)據(jù)*/
}
MPI_Finalize() ; /*MPI的結(jié)束函數(shù)*/
return (0) ;
}
另一個例子
實現(xiàn) sum( a + b ),并且把求和結(jié)果打印出來。這里 a, b 都是n維空間的向量,并且每個元素都為整數(shù)。
#include “mpi.h” /*MPI頭文件*/
#include
#include
int main(argc, argv)
int argc ;
char **argv ;
{
int rank, size, i, tag = 1 ;
int *a, *b, n;
n = 100 ;
a = (int*)malloc( sizeof( int ) * n ) ;
b = (int*)malloc( sizeof( int ) * n ) ;
for(i = 0 ; i < n ; i++){
a[i] = 1 ;
b[i] = 2 ;
}
MPI_Status status ;
MPI_Init( &argc, &argv ) ; /*MPI的初始化*/
MPI_Comm_size( MPI_COMM_WORLD, &size ); /* 總的進程數(shù)目*/
int nSize = n / size ;
MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ; /*該進程的編號 */
if( rank != (size - 1) ){
int sum = 0 ;
for( i = 0 ; i < nSize ; i++ ){
sum += a[i + rank * nSize ] + b[ i + rank * nSize ] ;
}
MPI_Send( &sum, 1, MPI_INT, (size-1), tag, MPI_COMM_WORLD ) ; /* 發(fā)送求和數(shù)據(jù)到進程(size-1) */
}else{
int sum = 0, total = 0 ;
for( i = (size - 1) * nSize ; i < n ; i++ ){
sum += a[i] + b[i] ;
}
total += sum ;
for( i = 0 ; i < (size - 1) ; i++ ){
MPI_Recv( &sum, 1, MPI_INT, i, tag, MPI_COMM_WORLD, &status); /*從各個進程接收部分求和數(shù)據(jù)*/
total += sum ;
}
printf( "total = %d ", total ) ;
}
MPI_Finalize() ; /*MPI的結(jié)束函數(shù)*/
return (0) ;
}
2.1)通過MPI如何實現(xiàn)2個矢量相加。
/* simple.c */
#include/*MPI頭文件*/
#include
#include
int main(argc, argv)
int argc ;
char **argv ;
{
int rank, size, tag = 1 ;
int *a, *b , n = 100 ;
a = (int*)malloc( sizeof( int ) * n ) ;
b = (int*)malloc( sizeof( int ) * n ) ;
int i ;
for( i = 0 ; i < n ; i++ ){
a[i] = 1 ;
b[i] = 2 ;
}
MPI_Status status ;
MPI_Init( &argc, &argv ) ; /*MPI的初始化*/
MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ; /*該進程的編號 */
MPI_Comm_size( MPI_COMM_WORLD, &size ); /* 總的進程數(shù)目*/
int nSize = n / size ;
int sum ;
if( rank < (size -1) ){
sum = 0 ;
for( i = 0 ; i < nSize ; i++ ){
sum += a[i] + b[i] ;
}
}else{
sum = 0 ;
for( i = nSize * (size - 1) ; i < n ; i++ ){
sum += a[i] + b[i] ;
}
}
printf("cpu = %d, sum = %d ", rank, sum ) ;
MPI_Finalize() ; /*MPI的結(jié)束函數(shù)*/
return (0) ;
}
2.2)通過MPI如何實現(xiàn)2個矢量相乘。
#include/*MPI頭文件*/
#include
#include
int main(argc, argv)
int argc ;
char **argv ;
{
int rank, size;
int n = 100 ;
int i ;
MPI_Status status ;
MPI_Init( &argc, &argv ) ;
MPI_Comm_size( MPI_COMM_WORLD, &size );
int nSize = n / size ;
MPI_Comm_rank( MPI_COMM_WORLD, &rank ) ;
int *a, *b ;
a = (int*)malloc( sizeof(int) * n ) ;
b = (int*)malloc( sizeof(int) * n ) ;
int( i = 0 ; i < n ; i++ ){
a[i] = 1 ;
b[i] = 2 ;
}
int tag = 1 ;
if( rank != (size - 1) ){
int sum = 0 ;
for( i = 0 ; i < nSize ; i++ ){
sum += a[rank * nSize + i]* b[rank * nSize + i];
}
MPI_Send( &sum, 1, MPI_INT, (size-1), tag, MPI_COMM_WORLD ) ; }else{
int sum = 0, total = 0 ;
for( i = (size - 1) * nSize ; i < n ; i++ ){
sum += a[i] * b[i];
}
total += sum ;
for( i = 0 ; i < (size - 1) ; i++ ){
MPI_Recv( &sum, 1, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
total += sum ;
}
篇三:Matlab心得及學習方法
Matlab心得及學習方法(不斷更新)
發(fā)現(xiàn)現(xiàn)在很多人(找工作的或者讀博的)都想要學習或者正在學習Matlab,問我要怎么學習。其實我雖然寫Matlab代碼的經(jīng)驗還算豐富,但是還不能說是一個很好的Matlab編程人員,這里有一些心得,分享給大家希望對大家有所幫助。
關于如何學習Matlab
我的學習方法很簡單:Matlab是練出來的,而不是看出來的。很多人問我有沒有比較好的Matlab教材,我說隨便找一本吧,都可以。只要書里面有最基本的語法和命令,對于一個有編程基礎的人,Matlab可以在一個下午的時間內(nèi)學會。當然,僅僅是學會。如果想要對Matlab比較得心應手,那么最好的辦法就是練習。練習的素材很多,比如對于學經(jīng)濟學的,可以做一些simulation之類的,也可以試著把計量或者宏觀教材里面的一些算法寫寫出來。一開始可能很慢,但是當你完成了一個比較大的project的時候,你的Matlab的功力將會有巨大的提升。
當然,在你寫程序之前,多讀一些別人寫的好的code是非常有幫助的。
一些Matlab的經(jīng)驗
1、適當了解一些數(shù)值計算、數(shù)值分析以及最優(yōu)化的理論
用Matlab的無非是做數(shù)值計算或者最優(yōu)化,這也是Matlab的強項,Matlab有足夠多的工具箱解決這些問題。但是在使用這些工具箱之前,應該首先了解一些數(shù)值計算以及最優(yōu)化的理論。這一點在程序碰到問題或者計算結(jié)果不理想的時候尤為重要。很多時候結(jié)果不理想并不是自己的理論出了問題,而是盲目或者錯誤使用Matlab的.工具箱而導致的。比如我曾經(jīng)做過一個單純形法的優(yōu)化程序,但是結(jié)果總是不理想,這個時候就要返回到單純形法具體是一種什么樣的算法來考慮這個問題,最后發(fā)現(xiàn)是由于目標函數(shù)的某一部分十分平緩導致的。 當然更重要的是如果你不理解理論,很多問題根本不知道如何處理。有個學化學同學就曾問我一個程序怎么寫,說matlab肯定可以完成的。了解清楚之后才明白原來他想做的就是一個受限最小二乘。但是他不懂得什么是最小二乘(因為沒怎么學過數(shù)學),當然面對這個問題無從下手。
2、理解Matlab中時間空間的轉(zhuǎn)化
這個問題沒有人強調(diào),但我覺著蠻重要。這里的關鍵點其實很簡單,就是盡量減少重復計算,哪怕是多項式復雜度以內(nèi)的計算。重復計算的內(nèi)容應該適時保存到內(nèi)存中,以后直接調(diào)用。一個程序可能會重復運行幾千次幾萬次,一點點的浪費時間都可能被放大很多?臻g(內(nèi)存)我們是可以擴充的,但是時間不是,所以絕大多數(shù)時候我們需要放棄空間,獲得時間上的迅捷。
這里有個故事,曾經(jīng)在某技術(shù)論壇上看到的,說騰訊公司早期做的QQ實在太過垃圾,他們追蹤過QQ的行為,發(fā)現(xiàn)在幾分鐘時間里重復調(diào)用了某同一注冊表項幾百次。顯然注冊表的內(nèi)容所占內(nèi)存是有限的,甚至是可以忽略的,但是每次讀注冊表項可能都要讀硬盤,這里的時間花費是很大的,為什么不把這項內(nèi)容直接存儲在內(nèi)存里呢?
一個比較經(jīng)典的例子:考慮交換兩個變量a,b的值,有如下寫法:
c=a;
a=b;
b=c;
或者:
a=a+b;
b=a-b;
a=a-b;
第一種寫法多占了內(nèi)存,因為需要多申請一個c的內(nèi)存空間;第二種寫法節(jié)省了內(nèi)存空間,但是卻多了三次計算時間。請問哪種好?不一定,看你的時間空間的權(quán)衡。但是具體到這個例子來說,第二種是不推薦的,因為:首先,第二種程序晦澀難懂,難以維護,內(nèi)存不至于低到不能存儲一個變量;第二,如果兩個數(shù)字都特別特別大,計算a的時候會有溢出的危險。
3、形成良好的編程規(guī)范
我想幾乎所有學過編程的人都被這樣告誡過。比較好的是Matlab自帶的編輯器本身就可以自動縮進之類的,程序十分易讀。但是還有一些東西是有些人不曾注意過的。比如變量名,一個好的變量名一定要有清晰的含義,讓人一看就能明白,否則日后的修改維護必然要花費更多的時間去識別這些變量名的含義。這一點可以參考http://coolshell.cn/articles/1038.html http://coolshell.cn/articles/1990.html 這里面詳細列舉了很多命名的規(guī)則和技巧。 還有一點就是注釋。好的注釋可以極大的方便以后的維護以及代碼的重用。我的習慣是在代碼的開頭都要交代這個代碼是干什么用的,怎么用等等。在程序中一個大塊的功能模塊也要加上注釋告訴大家你在做什么。如果某個語句很復雜,可以加注釋告訴大家這句到底在干什么。這樣寫出來的程序維護起來或者他人使用起來將非常方便。
另有一篇十分有趣的文章分享給大家:如何寫出無法維護的代碼 http://coolshell.cn/articles/4758.html
4、如果拿到一個任務而又沒有思路,試著把問題分解或者轉(zhuǎn)化。
之所以叫做程序,是因為我們所做的工作就是告訴計算機要做什么,該怎么做。所以如果你的腦子里根本不知道這個問題該怎么解決的時候,你就更加無法寫出程序。找思路的一般方法是分解問題,然后逐個擊破;蛘咴谔厥馇闆r下,需要把問題轉(zhuǎn)化。
分解與轉(zhuǎn)化的第一步是把實際問題轉(zhuǎn)化為數(shù)學問題。這一步可能已經(jīng)做好,可能沒有。如果沒有,那么這一步就叫做數(shù)學建模。絕大多數(shù)問題都可以轉(zhuǎn)化為兩類問題,一類是最優(yōu)化問題,一類是求解問題。如果你能知道你在最優(yōu)化什么東西或者求解什么東西,問題就簡單很多。
轉(zhuǎn)化問題的第二步是把數(shù)學問題轉(zhuǎn)化為程序(不是代碼)。也就是說,你要想清楚這個問題(最優(yōu)化或者求解)是怎么一步步實現(xiàn)的。 這個過程可能很簡單,有現(xiàn)成的方法用,也有可能很復雜,還可能涉及多種轉(zhuǎn)化。比如我們經(jīng)濟學中遇到的求解動態(tài)最優(yōu)化,經(jīng)常要把連續(xù)的東西離散化(離散化很重要!)。
最后,考慮怎么把你的程序轉(zhuǎn)化為真實的代碼。這一步說簡單很簡單,因為只要你做好了以上兩步,這一步是順其自然的。但是當然會有很多小的細節(jié),也許這就是所謂的technique。但是我還是覺著,學習編程不是學習technique,而是學習第二步,雖然本文關注的更多的是technique。
5、如果程序出錯了,而又查不到語法的錯誤,使用斷點
編程中最可怕的錯誤不是語法,而是邏輯錯誤,因為邏輯錯誤是最難debug的。一個很有用的工具就是斷點。
斷點應該是debug中最常用的工具。Matlab的編輯器中可以很方便的實現(xiàn)(在每一行的開頭有個小橫線,單擊一下變成紅點,然后就設置成斷點了)。當程序運行到斷點之后就會中斷,然后會在主窗口顯示K>>的標志,這時你可以輸入命令查看內(nèi)存情況等等。一步步的跟蹤,直到變量值跟你的預期不一樣,這時你就可以很容易的找到錯誤在什么地方發(fā)生了。
6、如果試了很多辦法還是不能找到錯誤,那就嘗試一下終極debug方法,適用于各種語言 真的有這么強大的debug方法么?有的!這個方法很簡單,離開你的電腦,找一個人,隨便什么人,說一遍你的程序的思路,說的越具體越好。多數(shù)情況下,你在闡述的過程中,程序的錯誤就會突然從你的大腦里冒出來了。
如果實在找不到就找大街上的乞討人員吧,給他們十塊錢他們應該很樂意聽你說的,并且說不定還可以給你一些很好的建議,然后告訴你,十年前他們也在做同樣的工作。
7、理解通用與專用之間的權(quán)衡
你可以寫一個通用的程序,也可以寫一個專用的程序,這需要你的權(quán)衡。一般情況下,專用的程序你可以研究清楚其結(jié)構(gòu),從而找到最快的算法,而通用的程序則不能達到這點,因為要考慮到很多很多特殊的情況。
比如給定一個分布函數(shù)F(x),我想要寫一個隨機數(shù)生成器是的生成的隨機數(shù)的分布函數(shù)為F(x). 方法很簡單,先生成一個均勻分布的隨機數(shù)a,是的a~U(0,1),然后計算F的反函數(shù)在a處的值。很多人可能會用fsolve之類的辦法,但是這不是最快的。如果我們已經(jīng)知道F是一個單增的函數(shù),那么這個解有且僅有一個。這樣我們就可以直接使用一些算法去解決他。 類似的問題還有如果我們知道導數(shù),那么求最優(yōu)化最好的方法也許是牛頓法,而不是用單純形法去尋找,那樣既不精確又慢
但是通用的程序也是非常吸引人的,因為可以大大的減少開發(fā)的時間,如果計算時間不是首要考慮的問題的話。
8、盡量使你的程序更通用
也就是說,盡量使你的代碼能被重復利用。這樣可以節(jié)省很多寫程序的時間,而你發(fā)現(xiàn)這些東西都是你寫過很多遍的。
很多人沒有一個寫通用程序的好的習慣。比如說下面一個最簡單的例子:
x=randn(10000,1);
y2=zeros(10000 ,1);
for i=1: 10000
y2(i)=exp(x(i));
end
這樣寫的問題在于,如果你的x需要改變了,比如改成100維,那么你需要修改不止一次。但是如果你寫成這樣:
x=randn(10000,1);
y2=zeros(length(x),1);
for i=1:length(x)
y2(i)=exp(x(i));
end
那么是不是僅僅修改一個地方就可以了呢?
9、盡量使你的程序模塊化
把需要重復進行的程序盡量寫成函數(shù),便于修改和維護。寫成函數(shù)的好處是使你在同一時間只關注一個問題,但是如果你把所有的東西都放在一個程序里,你可能需要考慮的問題就不止一個了。
10、在使用變量之前先進行聲明,盡量少使用矩陣變維操作
這不是matlab必須的,但是是十分建議的。比如如果你寫下了如下的代碼:
for i=1:10000
y=y+i;
end
你沒有聲明y,而是直接試用了它,很可能會出現(xiàn)問題。比如你的內(nèi)存里之前已經(jīng)有y,y=10,那么你的計算結(jié)果是不是會大10呢?更有可能的情況是你之前已經(jīng)運行了這個程序,但是你的開頭沒有clear(開頭使用clear也是很好的習慣)
此外,盡量少使用矩陣變維的操作。因為每次聲明變量或者矩陣變維,Matlab總要申請一個新內(nèi)存空間,頻繁進行變維操作會很快侵蝕掉你的內(nèi)存空間,這點在大矩陣的時候特別重要。
11、計算盡量多的使用矩陣,盡量少的使用循環(huán)
循環(huán)的好處是比較容易想,比較容易些,但是也比較難以維護,最重要的,速度很慢。 比如下面一個例子:
x=randn(10000,1);
tic
y1=exp(x);
toc
tic
y2=zeros(length(x),1);
for i=1:length(x)
y2(i)=exp(x(i));
end
toc
輸出結(jié)果:
Elapsed time is 0.000287 seconds.
Elapsed time is 0.000963 seconds.
可見使用矩陣比使用循環(huán)快了三倍。
12、如果進行大量的重復操作,可以考慮使用并行計算
比如在做Monte Carlo模擬的時候,你的每次循環(huán)都是獨立的(每次循環(huán)不影響下一次循環(huán)的結(jié)果),那么可以考慮使用并行處理,如果你的電腦是多核的。
首先,你要用以下命令創(chuàng)建幾個并行的進程:
matlabpool local 4
其中4是你的計算機核心數(shù)。然后,使用parfor代替for循環(huán)就可以了。但是使用這個命令一定要注意使用前提和不要每次循環(huán)訪問同樣的可變的變量。
13、盡量少的涉及符號運算
Matlab最強大的是其數(shù)值運算能力,而不是符號運算。如果你需要處理諸如求導求極限之類的工作,用Mathematica或者Maple。特別是盡量少的使用符號定義的函數(shù),比如用fsolve之類的,如果只是計算一次兩次非常方便,但是如果進行大量重復的此類運算,其速度很慢,最好研究清楚要解的函數(shù)的性質(zhì),用專門的算法進行處理,matlab大多數(shù)時候也有專門的工具箱。
篇四:多核
多核的概念是什么?多CPU是多核嗎?機群是多核嗎?
多核是片上多處理器的的俗稱,是指將多個處理器集成到一個芯片中的技術(shù)。
多CPU不是多核,機群也不是多核。
并行計算機的概念是什么?
1.由一組處理單元組成。
2.各處理單元之間相互通信與協(xié)作。
3.以更快的速度共同完成一項大規(guī)模計算任務。
弗林將計算機分為哪幾類?馮·諾依曼計算機機屬于哪類?支持SSE指令集的Intel處理器屬于哪類?多核、多CPU、機群都屬于哪類?
SISD:單指令單數(shù)據(jù)流
SIMD:單指令多數(shù)據(jù)流
MISD:多指令單數(shù)據(jù)流
MIMD:多指令多數(shù)據(jù)流
馮·諾依曼計算機機屬于
支持SSE指令集的Intel處理器SIMD
多核,多CPU,機群屬于MIMD。
多核、多處理器系統(tǒng)與多計算機系統(tǒng)有什么區(qū)別?
多核、多處理器系統(tǒng):多個核心共享內(nèi)存。
多計算機系統(tǒng):每個節(jié)點有獨立內(nèi)存。
多核與多處理器的區(qū)別:
1.多核之間可能共享cache,多處理器間不共享。
2.多核間通過片上總線相連,多處理器間通過系統(tǒng)總線相連。
3.多核在尺寸功耗方面具有優(yōu)勢,兩者編程優(yōu)化也有所不同。
按地址組織模式的不同,當前主流并行計算機可以分為哪幾類,各有什么特點?SMP、DSM、MPP、Cluster分別屬于哪類?
1均勻訪存(共享存儲):所有核心平等訪存,時間相同。
2.分布式共享存儲(DSM):每個節(jié)點有局部內(nèi)存,內(nèi)存空間統(tǒng)一編制,每個節(jié)點可以高速訪問局部內(nèi)存,低速訪問其他節(jié)點局部內(nèi)存。
3.分布式(局部)訪問:節(jié)點只能訪問局部內(nèi)存,與其他節(jié)點傳遞信息通過消息完成。 SMP:(對稱多處理器)采用商品化的處理器,這些處理器通過總線或交叉開關連接到共享存儲器。每個處理器可等同地訪問共享存儲器、I/O設備和操作系統(tǒng)服務。共享節(jié)點稱為系統(tǒng)瓶頸,擴展性有限。屬于均勻訪存類。
DSM:(分布共享存儲并行機)存儲器物理上分布在不同的節(jié)點中,但通過硬件和軟件方法實現(xiàn)內(nèi)存的統(tǒng)一編制。屬于分布式共享存儲。
MPP:(大規(guī)模并行機)處理節(jié)點采用商品微處理器,能擴展至上萬個處理器。采用高通信帶寬和低延遲的互聯(lián)網(wǎng)絡。各個進程有自己的地址空間,進程間通信消息傳遞相互作用。由分布式操作系統(tǒng)管理。屬于分布式(局部)訪問。
Cluster:(機群)每個節(jié)點是一個完整的計算機,有自己的磁盤和操作系統(tǒng)。通過商用互連網(wǎng)絡連接。運行分布式程序,完成并行計算。屬于分布式(局部)訪問。
指令級并行有什么特點?
有兩種技術(shù):流水線技術(shù)和多發(fā)射技術(shù)。
流水線技術(shù):分解指令執(zhí)行步驟,讓前后指令的步驟重疊執(zhí)行;后續(xù)指令可以超越前面的指令執(zhí)行。
多發(fā)射技術(shù):流水線上每個功能部件都能同時執(zhí)行多條指令。
特點:并行由同一控制器控制,主要由硬件和編譯器支持,對高級語言程序員可以保持透明。
多核架構(gòu)的分類方法有兩種?每種下面有哪些分類?IBM的Cell處理器屬于何種架構(gòu)? 按核之間關系分類:同構(gòu);異構(gòu)
按存儲結(jié)構(gòu)分:獨占cache;共享cache。
IBM的Cell處理器屬于
多核在硬件設計上面臨哪些問題?
1.如何讓組織核心,設計架構(gòu),同構(gòu)?異構(gòu)?
2.如何保證cache的一致性。
3.如何滿足多核所需的總線帶寬。
支持多核的操作系統(tǒng),有哪幾種任務調(diào)度方法,各有什么特點?
1.主從模式:有一個核負責分配任務,其他核執(zhí)行,主處理器稱為系統(tǒng)瓶頸。
2.共享隊列:進程在核間切換嚴重降低性能,進程隊列需加鎖,造成等待。
3.獨占隊列:負載有可能不均衡。
什么是數(shù)據(jù)相關性?
兩個操作(指令)訪問同一內(nèi)存單元,且其中至少有一個寫內(nèi)存操作。
順序一致性對程序執(zhí)行順序的要求是什么?
訪存操作先開始的先執(zhí)行,不論訪存指令是在哪個處理器上執(zhí)行的。
弱一致性與順序一致性的區(qū)別是什么?釋放一致性與弱一致性的區(qū)別是什么?
順序一致性:對所有的訪存操作要求順序
弱一致性:有的訪存操作可以亂序,但同步操作下,必須要求順序。(引用同步操作實現(xiàn)獨占共享單元)
釋放一致性:將同步操作分為獲取和釋放兩種。獲取操作時,需要將先前對內(nèi)存的改寫完成;釋放操作時,應保證對共享單元的改寫能夠徹底完成。
在Cache一致性協(xié)議中,當發(fā)生改寫時,有哪兩種處理方式,各有什么優(yōu)缺點?
1.寫使無效
優(yōu)點:改寫數(shù)據(jù)的處理器可以獨占該數(shù)據(jù),直到其他處理器改寫該數(shù)據(jù)。
缺點:無效cache會引起cache不命中,如果多個處理器頻繁改寫同一數(shù)據(jù),會造成cache不命中頻繁發(fā)生(乒乓效應)。
2.寫更新
優(yōu)點:cache中的備份一直保持有效。
缺點:數(shù)據(jù)廣播需要帶寬較高。
進程有哪些要素?線程之間共享了哪些進程的要素?
1.獨立的指令流與數(shù)據(jù)
2.硬件上下文:程序運行時寄存器的狀態(tài)。
3.地址空間:可以由進程訪問的線性(虛擬)地址的集合
4.資源:文件,設備,中斷
獨占指令流和硬件上下文;地址空間和資源
為什么進程切換的效率低于線程切換?
進程切換:更易引起cache和tlb的失效。(tlb頁表緩存)
線程切換:不易引起以上兩個問題,共享進程地址空間,只修改寄存器和硬件上下文。
簡述使用系統(tǒng)API創(chuàng)建線程的步驟。Win32下有哪幾種方式可以結(jié)束線程?
1.聲明線程回調(diào)函數(shù)
2.通過API函數(shù)向系統(tǒng)注冊回調(diào)函數(shù)
3.操作系統(tǒng)調(diào)用回調(diào)函數(shù)執(zhí)行
結(jié)束線程:
1.主動退出
2.Main函數(shù)退出
3.強制退出(調(diào)用系統(tǒng)函數(shù)退出其他線程)
在Win32下有哪幾種典型同步工具,各有什么特點?
Linux下的同步工具讀寫鎖有什么特點?
什么是線程安全性?如何判斷函數(shù)的線程安全性?
阿姆達爾定律的主要內(nèi)涵是什么?
如何解決多線程負載不均衡的問題?
什么是乒乓效應,如何解決?
篇五:fluent6.3多核調(diào)用方法
如果是FLUENT 6.3 之類的版本一定要按下面命令操作,否則運算時僅僅相當于單核運算,F(xiàn)在多核機器已經(jīng)非常普及,所以掌握多核并行運行方法非常必要。
開始->運行 里輸入: X:Fluent.Inc tbin tx86fluent.exe 3d -t2 后面的"-t2"表示雙核、四核用"-t4",依此類推
本機輸入后,界面顯示:
Loading "D:Fluent.Incfluent6.3.26libfl114.dmp"
Done.
Warning: -path flag not specified.
Defaulting to -pathD:Fluent.Inc
Welcome to Fluent 6.3.26
Copyright 2006 Fluent Inc.
All Rights Reserved
Done.
Loading "D:Fluent.Incfluent6.3.26libflprim1119.dmp"
Host spawning Node 0 on machine "TONY" (ntx86).
You can click CTRL+C to stop the startup process!
------------------------------------------------------------------------------ ID Comm. Hostname
O.S. PID Mach ID HW ID Name
------------------------------------------------------------------------------
host net TONY Windows-32 3660 0 1844 Fluent Host
n1 mpich2 TONY Windows-32 3448 0 1 Fluent Node
n0* mpich2 TONY Windows-32 4028 0 0 Fluent Node ------------------------------------------------------------------------------
如果是AMD處理器在XP環(huán)境下運行,請不要忘記給系統(tǒng)打上多核補丁以提高運算效率。
【學習方法多核診斷題】相關文章:
學校診斷報告11-14
社區(qū)診斷報告12-11
開放性應用題的學習方法總結(jié)01-23
教學診斷與改進方案10-07
辦理醫(yī)療診斷證明范文06-24
疾病診斷證明書11-11
診斷證明書怎么寫11-11
臨床醫(yī)學檢測及診斷的論文10-08
對遺傳學診斷的分析論文10-10
人力資源診斷分析報告10-30