- 前ページ
- 次ページ
PS:GCC用みたい。CPUに対して余計な事するかもしれない。
プリフェッチは「次にアクセスするメモリ」を予告しておく行為。
//プリフェッチ // fcPreFetchUp (i+1 < pCol を守る)
// 上向きカウント専用
inline void fcPreFetchUp(const size_t& i) noexcept {
#if defined(PREFETCH_OPT)
if (i + 1 < pCol) {
//if (i + 1 < pCol) って遅い?いいえ、ほぼ無視できるオーバーヘッドです。現代CPUと最適化コンパイラ(特に -O2 以上)では、if (i + 1 < N)は分岐予測が効いてほぼノーコスト。
__builtin_prefetch(&mVector[i + 1], 0, 1);
}
#endif
}
// 下向きカウント専用(最後から2つ前まで)
inline void fcPreFetchDown(const size_t& i) noexcept {
#if defined(PREFETCH_OPT)
if (i >= 1) {
__builtin_prefetch(&mVector[i - 1], 0, 1);
}
#endif
}
//とある関数内
for (size_t i = 0; i < piSize; ++i) {
fcPreFetchUp(i);
mVector[i]=i;
}
引用ChatGPT
C++のマクロ
から引用。
#define REP(i, n) for (int i = 0; (i) < (n); ++i)
#define REPD(i, n) for (int i = (n)-1; (i) >= 0; --i) // 逆ループ
#define FOR(i, a, b) for (int i = (a); (i) < (b); ++i) // 任意範囲
#define ALL(a) (a), (a) + sizeof(a)/sizeof((a)[0]) // 範囲(配列用)
//段階的デバッグ切り替え
#define DEBUG_LEVEL 1 // ← ← ← ここを切り替えるだけ!
#if DEBUG_LEVEL >= 1
#define DBG1(x) x
#else
#define DBG1(x)
#endif
#if DEBUG_LEVEL >= 2
#define DBG2(x) x
#else
#define DBG2(x)
#endif
使用例
DBG1(std::cout << "簡易デバッグ\n";)
DBG2(std::cout << "詳細デバッグ\n";)
//DEBUG_LEVEL 0 → どちらも出ない(完全無視)
//DEBUG_LEVEL 1 → DBG1 だけ出る(一部有効)
//DEBUG_LEVEL 2 → 両方出る(フルデバッグ)
複数行はどうかな?
int main() {
DBG(
std::cout << "debug\n"; std::cout << "debug\n"; std::cout << "debug\n"; std::cout << "debug\n"; std::cout << "debug\n"; std::cout << "debug\n"; std::cout << "debug\n";
)
std::cout << "Hello World!\n";
}// いけた。
引用 chatGPT