sc09note/ベクトル化・並列化指示行
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
since1995
開始行:
[[sc09note]]
*ベクトル化・並列化指示行について [#od606baf]
SX9のコンパイラは自動ベクトル化・自動並列化機能を持ってお...
たとえば
for(i=0;i<k;++i){a[i]=a[i+100];}
というループを考えてみましょう。これはこのままでは代入先...
#pragma cdir nodep
for(i=0;i<k;++i){a[i]=a[i+100];}
指示行は直後のループにのみ有効です。ベクトル化指示行とし...
また、自動並列化はコンパイルオプション-P autoで指定します...
#pragma cdir parallel for
for(i=0;i<k;++i){a[i]=b[i];}
これはまた、三重ループの一番外側を並列化したいときにも有...
なお、並列化させたくないループについては#pragma cdir noco...
最後に、関数をインライン展開するための指示行は#pragma cdi...
*例 [#ec6122e0]
10000の配列を10000回ソートするだけ。
8行目の#pragma cdir parallel for文を挿入するだけで4cpuだ...
#define NUM_DAT 10000
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
#include "sortlist.h"
int main(){
int out[NUM_DAT];
#pragma cdir parallel for
for(int i=0;i<NUM_DAT;++i){
int work[NUM_DAT];
for(int j=0;j<NUM_DAT;++j){work[j]=NUM_DAT-j;}
VST_sort_int(work,NUM_DAT);
out[i]=work[i];
}
for(int i=0;i<100;++i){
printf("%d\n",out[i]);
}
}
例の場合、#pragma cdir parallel for文がないと最外ループは...
普通コンパイラが自動的に最外ループを並列化してくれますが...
終了行:
[[sc09note]]
*ベクトル化・並列化指示行について [#od606baf]
SX9のコンパイラは自動ベクトル化・自動並列化機能を持ってお...
たとえば
for(i=0;i<k;++i){a[i]=a[i+100];}
というループを考えてみましょう。これはこのままでは代入先...
#pragma cdir nodep
for(i=0;i<k;++i){a[i]=a[i+100];}
指示行は直後のループにのみ有効です。ベクトル化指示行とし...
また、自動並列化はコンパイルオプション-P autoで指定します...
#pragma cdir parallel for
for(i=0;i<k;++i){a[i]=b[i];}
これはまた、三重ループの一番外側を並列化したいときにも有...
なお、並列化させたくないループについては#pragma cdir noco...
最後に、関数をインライン展開するための指示行は#pragma cdi...
*例 [#ec6122e0]
10000の配列を10000回ソートするだけ。
8行目の#pragma cdir parallel for文を挿入するだけで4cpuだ...
#define NUM_DAT 10000
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
#include "sortlist.h"
int main(){
int out[NUM_DAT];
#pragma cdir parallel for
for(int i=0;i<NUM_DAT;++i){
int work[NUM_DAT];
for(int j=0;j<NUM_DAT;++j){work[j]=NUM_DAT-j;}
VST_sort_int(work,NUM_DAT);
out[i]=work[i];
}
for(int i=0;i<100;++i){
printf("%d\n",out[i]);
}
}
例の場合、#pragma cdir parallel for文がないと最外ループは...
普通コンパイラが自動的に最外ループを並列化してくれますが...
ページ名: