情報は力ではない

UE4 とか Blender とか。

2.1 NVCC IDENTIFICATION MACRO

最近nvccのドキュメント読んでるので一応記録。
もうそろそろCUDA 6がリリースされそうなので、リリースされたら少し変わるかもしれない。

今日は2.1節のみ。

nvccでは__NVCC__マクロと__CUDACC__マクロが、あらかじめ定義されている。

__NVCC__

このマクロは、ソースファイルがnvccでコンパイルされているかどうかを
確認するために使うらしい。

thrustライブラリから例を持って来る。コピーライト等のコメントと一部のコードは
省略しています。
次のコードはthrust/detail/config/global_workarounds.hから。

...
#if defined(THRUST_GCC_VERSION) && (THRUST_GCC_VERSION >= 40800)
#  if defined(__NVCC__) && (CUDA_VERSION >= 6000)
#    pragma GCC diagnostic ignore "-Wunused-local-typedefs"
#  endif // nvcc & cuda 6+
#endif // gcc 4.8

__CUDACC__

このマクロは、ソースファイルがCUDAファイルとして扱われているかどうかを
確認するために使うらしい。
これはヘッダを書くときに便利みたい。

再びthrustライブラリから例を提示。先ほどと同様にコピーライト等は省略している。
次のコードはthrust/detail/config/compiler.hから。

...
#ifdef __CUDACC__

#include <cuda.h>

// Thrust supports CUDA >= 3.0
#if CUDA_VERSION < 3000
#error "CUDA v3.0 or newer is required"
#endif // CUDA_VERSION

#endif // __CUDACC__

最後に

thrustへのリンクを張っておきます。
https://github.com/thrust/thrust