-
2 votesanswersviews
Xeon Phi:使用填充性能降低
我已经实现了一个简单的n×n矩阵乘法来测试c中与OpenMp相同的性能调整 . 我的初始代码如下: #pragma omp parallel for shared(a,b,c) private(h,i,j,k) for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++) { ... -
2054 votesanswersviews
为什么在单独的循环中元素添加比在组合循环中快得多?
假设 a1 , b1 , c1 和 d1 指向堆内存,我的数字代码具有以下核心循环 . const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } 此循环通过另一个外部 for 循环执行10,000次 . 为了加快速度,我将代码更改为: for (int j =... -
866 votesanswersviews
Swift Beta性能:排序数组
我在Swift Beta中实现了一个算法,并注意到性能非常差 . 在深入挖掘之后,我意识到其中一个瓶颈就像排序数组一样简单 . 相关部分在这里: let n = 1000000 var x = [Int](repeating: 0, count: n) for i in 0..<n { x[i] = random() } // start clock here let y = so... -
0 votesanswersviews
Tensorflow是否提供API来优化计算图
我正在研究Tensorflow程序的优化 . 我想专注于构建的计算图 . 我的问题是,Tenforflow是否提供了一些API,或者有没有办法操纵TF计算图,例如访问和转换图形? -
5 votesanswersviews
警告“取消引用类型 - 惩罚指针会破坏严格别名规则”的结果
我对类似主题和与之相关的一些材料进行了一些查询 . 但我的查询主要是了解下面代码的警告 . 我不想修复!!我知道有两种方法,a440247_或使用 memcpy . uint32 localval; void * DataPtr; localval = something; (*(float32*)(DataPtr))= (*(const float32*)((const void*)(&... -
4 votesanswersviews
如何知道ndk-build的gcc优化级别
我正在使用NDK(jni)在Android上编写一些本机代码 . 我想关闭gcc编译器优化 . 现在我将 LOCAL_CFLAGS += -O0 添加到Android.mk,我不确定它是否正常工作 . 我写了一些代码来测试循环开销,如下所示: // gettime for(int i = 0 ; i<10000;i++) { } // gettime 时间差太小,我确信循环已被编译器删除... -
227 votesanswersviews
如何使用SSE4.2和AVX指令编译Tensorflow?
这是从运行脚本以检查Tensorflow是否正常工作时收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully... -
227 votesanswersviews
如何使用SSE4.2和AVX指令编译Tensorflow?
这是从运行脚本以检查Tensorflow是否正常工作时收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully... -
0 votesanswersviews
GCC优化器会发出奇怪的条件跳转,为什么?
我正在查看代码中关键函数的反汇编 . 它需要大约90%的性能 . 并不完全令人惊讶,因为它在内联后是一个非常大的功能,所以它最终做了很多 . 但是,我注意到有一些程序集,我不明白理由: test rsi, rsi je setecx0 cmp rsi, 0x1 je setecx1 cmp rsi, 0x2 je setecx2 cmp rsi, 0x3 je setecx3 cmp rsi, 0... -
2 votesanswersviews
使用placement new可以更快地运行代码
我上了这堂课, Approach 1: typedef float v4sf __attribute__ (vector_size(16)) class Unit { public: Unit(int num) { u = new float[num]; v = new float[num]; } void update()... -
6 votesanswersviews
是否访问不能从C语言中的函数可观察行为外部访问的volatile变量?
在C 03中,标准可观察行为(1.9 / 6)包括读取和写入易失性数据 . 现在我有这个代码: int main() { const volatile int value = 0; if( value ) { } return 0; } 它正式初始化一个volatile变量然后读取它 . Visual C 10发出机器代码,通过在那里推动dword在堆栈上腾出空... -
2 votesanswersviews
构建GCC时的优化
从源代码编译GCC我不确定如何以及为优化构建设置什么 . 我想 Build 两个版本 . 一个优化和一个支持 ggdb (不确定我是否需要第二个) . 我目前专注于第一个 . 在以前的版本中,我通常主要使用默认值 . 发现它有点难以在万维网上搜索,以及一般的GCC构建,因为99.9%的命中是关于优化用 gcc 编译的代码而不是关于 gcc 本身的优化和构建 . 阅读 gcc-4.8.1/INSTA... -
14 votesanswersviews
禁用GCC中的所有优化选项
使用GCC编译C程序的默认优化级别是-O0 . 根据GCC文档关闭所有优化 . 例如: gcc -O0 test.c 但是,检查-O0是否真的是 turning off all optimizations . 我执行了这个命令: gcc -Q -O0 --help=optimizers 在这里,我有点惊讶 . 我启用了大约50个选项 . 然后,我使用以下方法检查了传递给gcc的默认参数: g... -
5 votesanswersviews
gcc究竟如何做优化?
为了知道gcc究竟如何进行优化,我编写了两个用-O2编译的程序,但是汇编代码有一些区别 . 在我的程序中,我想在循环中输出“hello”,并在每个输出之间添加一些延迟 . 这两个程序仅用于说明我的问题,我知道我可以在程序1中使用volatile或asm来实现我的目的 . 计划1 #include <stdio.h> int main(int argc, char **argv) { ... -
60 votesanswersviews
如何在gcc中禁用编译器优化?
我正在努力学习汇编语言 . 我搜索并发现如何反汇编 .c 文件,但我认为它产生了一些优化版本的程序 . 有什么办法可以让我看到与我的C文件对应的确切汇编代码 . -
64 votesanswersviews
GCC如何优化循环内增加的未使用变量?
我写了这个简单的C程序: int main() { int i; int count = 0; for(i = 0; i < 2000000000; i++){ count = count + 1; } } 我想看看gcc编译器如何优化这个循环(显然添加1 2000000000次应该是“一次添加2000000000”) . 所以: gcc t... -
23 votesanswersviews
C 0x内存模型和推测性加载/存储
所以我正在阅读有关即将推出的C 0x标准的内存模型 . 但是,我对允许编译器做什么的一些限制有点困惑,特别是关于推测性加载和存储的限制 . 首先,一些相关的东西: Hans Boehm's pages about threads and the memory model in C++0x Boehm, "Threads Cannot be Implemented as a Library... -
143 votesanswersviews
如何查看哪些标志-march = native将激活?
我'm compiling my C++ app using GCC 4.3. Instead of manually selecting the optimization flags I' m使用 -march=native ,理论上应该添加适用于我正在编译的硬件的所有优化标志 . 但是我如何检查它实际使用的是哪些标志? -
2 votesanswersviews
编译器-march标志基准?
编译器中的-march标志(例如:gcc)真的很重要吗? 如果我使用-march = my_architecture而不是-march = i686编译我的所有程序和内核会更快吗? -
1 votesanswersviews
在其他编译器中等同于gcc / clang的march = native?
我想知道是否有其他编译器比gcc和clang提供类似 -march=native 选项的东西,如果有的话,那个选项是什么 . 我已经从另一个问题(Automatically building for best available platform in visual c++ (equivalent to gcc's -march=native))中了解到,Microsoft 's compiler... -
10 votesanswersviews
什么标志-march =使用Clang进行本机激活?
With GCC一个人能够打印 -march=native 触发的特定标志 . 是否有可能让Clang打印类似的信息? -
2 votesanswersviews
为什么可能用-march = native编译“没有分配指针被释放”?
我开发了一个TensorFlow定制操作的小型库 . 这些操作在C中编程并使用Eigen . 当我使用 -march=native 编译器选项编译自定义ops模块时,会发生奇怪的事情 . 生成的模块将始终以libsystem_malloc.dylib中源自free()的"pointer being freed was not allocated"错误中止 . 如果我在没有 -m... -
5 votesanswersviews
为什么gcc只用_mm_set_ss添加这个movss指令?
使用SSE考虑这两个函数: #include <xmmintrin.h> int ftrunc1(float f) { return _mm_cvttss_si32(_mm_set1_ps(f)); } int ftrunc2(float f) { return _mm_cvttss_si32(_mm_set_ss(f)); } 对于任何输入,两者的行为完全相同 ... -
0 votesanswersviews
使用预取加速随机内存访问
我试图通过使用预取来加速单个程序 . 我的程序的目的只是为了测试 . 这是它的作用: 它使用两个相同大小的int缓冲区它逐个读取第一个缓冲区的所有值它读取第二个缓冲区中索引处的值它将从第二个缓冲区中获取的所有值相加它完成所有之前的操作更大更大的步骤最后,我打印了自愿和非自愿CPU的数量 在第一次,第一个缓冲区中的值包含其索引的值(参见下面代码中的函数 createIndexBuffer ) .... -
1226 votesanswersviews
用64位替换32位循环计数器会引入疯狂的性能偏差
我一直在寻找最快的 popcount 大型数据阵列 . 我遇到了一个非常奇怪的效果:将循环变量从 unsigned 更改为 uint64_t 使我的PC上的性能下降了50% . 基准 #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* arg... -
3 votesanswersviews
将单精度除法实现为双精度乘法
问题 对于实现精确IEEE 754算法的C99编译器, f , divisor 类型 float 的值是否存在 f / divisor != (float)(f * (1.0 / divisor)) ? 编辑:通过“实现精确的IEEE 754算术”我的意思是一个正确定义FLT_EVAL_METHOD为0的编译器 . 上下文 提供符合IEEE 754标准的浮点的C编译器只能通过单次精度乘以逆来用常量... -
20 votesanswersviews
for循环中pIter!= cont.end()的性能
我最近通过Herb Sutter获得了“Exceptional C”,我对他在第6项 - 临时对象中提出的特别建议表示严重怀疑 . 他提供了在以下代码中查找不必要的临时对象: string FindAddr(list<Employee> emps, string name) { for (list<Employee>::iterator i = emps.begin(... -
5 votesanswersviews
优化可变与不可变矢量数学
哪种编码风格更适合编译器优化?特别是,我感兴趣1)最小化立即丢弃的临时值的数量和2)自动矢量化,即生成用于算术的SIMD指令 . 假设我有这个结构: #define FOR_EACH for (int i = 0; i < N; ++i) template<typename T, unsigned N> struct Vector { void scale(T scal... -
0 votesanswersviews
禁用JNI C代码中变量的编译器优化
我在Android JNI C函数中有一个变量定义,除了将自己定义为字符串之外什么都不做 . 我希望这个字符串出现在二进制文件中,但是当我构建项目时,.so文件不包含字符串 . 这是我在C代码中尝试过的 . #pragma GCC push_options #pragma GCC optimize ("O0") const char volatile myString[32] ... -
3 votesanswersviews
为什么rustc需要一分钟来编译这个250行程序并进行优化?
背景:我为各种编程语言制作了一个愚蠢的代码生成程序,目的是比较各种编译器编译由简单函数构成的荒谬的长100K LOC程序需要多长时间 . 但是在编译时,程序的Rust版本从未在 rustc 给出优化标志时完成编译 . 我发现使用 -C opt-level=2 或 -C opt-level=3 标志为 rustc 编译一个非常小的Rust程序(下面的示例)很容易(对我的敏感性)太长了 . 我尝试在1...