配列の長さで規格化されている。
キチンと書いてあるドキュメントがなかったのでここに記す。
(FFTWの結果を配列の長さ、二次元ならnx * ny、で割る)
2018年3月26日月曜日
2018年3月16日金曜日
openmp offloading のメモ
llvm clangがgpuのoffloadingに対応してるっぽいので確かめている。
上手く行ってないけど。
テスト用のコードをメモ。
#include<stdlib.h>
#include<stdio.h>
#include<omp.h>
int main(){
int i;
int N=100000;
float *vec;
float sum=0.0;
int isDevInit = -1;
#pragma omp target map(from:isDevInit)
{
isDevInit = omp_is_initial_device();
}
if (!isDevInit) {
printf("run on acc. %d\n",isDevInit);
}
vec=(float *)malloc(sizeof(float)*N);
for(i=0;i<N;i++){
vec[i] = (float)i;
}
#pragma omp target map(to:vec) map(tofrom:sum)
{
fprintf(stdout,"num dev %d\n",omp_get_num_devices());
#pragma omp parallel for reduction(+:sum)
for(i=0;i<N;i++){
sum += vec[i];
}
}
fprintf(stdout,"sum: %e\n",sum);
free(vec);
}
上手く行ってないけど。
テスト用のコードをメモ。
#include<stdlib.h>
#include<stdio.h>
#include<omp.h>
int main(){
int i;
int N=100000;
float *vec;
float sum=0.0;
int isDevInit = -1;
#pragma omp target map(from:isDevInit)
{
isDevInit = omp_is_initial_device();
}
if (!isDevInit) {
printf("run on acc. %d\n",isDevInit);
}
vec=(float *)malloc(sizeof(float)*N);
for(i=0;i<N;i++){
vec[i] = (float)i;
}
#pragma omp target map(to:vec) map(tofrom:sum)
{
fprintf(stdout,"num dev %d\n",omp_get_num_devices());
#pragma omp parallel for reduction(+:sum)
for(i=0;i<N;i++){
sum += vec[i];
}
}
fprintf(stdout,"sum: %e\n",sum);
free(vec);
}
2018年3月15日木曜日
flang 4.0 (メモ)
https://github.com/flang-compiler/flang/blob/master/README.md
で特に問題ない。
https://libcxx.llvm.org/docs/BuildingLibcxx.html
libc++, libc++abiも一緒にコンパイルしているのでclangインストール後は
setenv CXX "clang++ -stdlib=libc++"
で特に問題ない。
https://libcxx.llvm.org/docs/BuildingLibcxx.html
libc++, libc++abiも一緒にコンパイルしているのでclangインストール後は
setenv CXX "clang++ -stdlib=libc++"
してlibc++を使わないとopenmpがコンパイルできない
2018年3月9日金曜日
登録:
投稿 (Atom)