Tag: performance

QueryPerformanceCounter()测试Windows Embedded Compact 7

循环遍历QueryPerformanceCounter()并保存值: // Main loop for timer test for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000 { QueryPerformanceCounter(&li); time[i] = double(li.QuadPart) / PCFreq; //1,193,182 per second } //calculate the difference between each call // and save in difference[] for ( int j = 0; j < (ITERATIONS – 1) […]

每个mmap / access / munmap有两个TLB-miss

for (int i = 0; i < 100000; ++i) { int *page = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); page[0] = 0; munmap(page, PAGE_SIZE); } 我期望在用户空间中获得~100000 dTLB-store-miss,每次迭代一次(同样~100000页错误和内核的dTLB-load-miss)。 运行以下命令,结果大约是我期望的2倍。 如果有人能澄清为什么会这样,我将不胜感激: perf stat -e dTLB-store-misses:u ./test Performance counter stats for ‘./test’: 200,114 dTLB-store-misses 0.213379649 seconds time elapsed PS我已经validation并确定生成的代码没有引入任何可以certificate这个结果的东西。 此外,我确实得到~100000页错误和dTLB加载未命中:k。

iPhone – 获取CGDataProvider背后数据的指针?

我正在尝试获取CGImage并将其数据复制到缓冲区中以供以后处理。 下面的代码是我到目前为止的,但有一件事我不喜欢它 – 它复制图像数据两次。 一次用于CGDataProviderCopyData() ,一次用于:getBytes:length调用imgData。 我还没有找到一种方法将图像数据直接复制到我的缓冲区并删除CGDataProviderCopyData()步骤,但必须有一种方法……任何指针? (… pun ftw) NSData * imgData =(NSData *)(CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef))); CGImageRelease(myCGImageRef); //我有一个以前定义的指向名为“mybuff”的可用缓冲区的指针 [imgData getBytes:mybuff length:[imgData length]];

为什么C ++输出比C慢得多?

我实际上是C ++的粉丝,但今天我发现程序的文件输出非常慢。 所以,我设计了一个实验来比较C ++文件输出的速度和C.假设我们有这段代码: int Num = 20000000; vector v; for ( int i = 0; i < Num; i++ ) { v.push_back(i); } 现在我运行两个单独的代码,一个用C ++编写: int now = time(0); cout << "start" << endl; ofstream fout("c++.txt"); for(size_t i = 0; i < v.size(); ++i) { fout<< v[i] << endl; } fout.close(); cout << time(0) […]

可以从C或Fortran读取.Rdata文件格式吗?

我正在C上写一些R扩展(从R调用C函数)。 我的代码需要同时使用2个不同的数据集来计算统计量,我需要使用所有可能的对组合来执行此操作。 然后,我需要所有这些统计信息(非常大的数组)来继续C侧的计算。 这些文件非常大,通常约为40GB,这就是我的问题。 要在R调用的C上执行此操作,首先我需要加载R中的所有数据集以将它们传递给C函数调用。 但是,理想情况下,如果我能够直接从C或Fortran访问数据集,则可以按顺序在内存中同时维护这些文件中的2个: open file1 – open file2 – compute cov(1,2) close file2 hold file1 – open file3 – compute cov(1,3) … // same approach 这在R上很好,因为我可以加载/卸载文件,但是在调用C或Fortran时我没有任何加载/卸载文件的机制。 所以,我的问题是, 我可以直接从Fortran或C读取.Rdata文件,能够打开/关闭它们吗? 问题的任何其他方法? 据我所知,答案是否定的。 所以,我正在考虑从Rdata迁移到HDF5。

memchr()如何在引擎盖下工作?

背景:我正在尝试创建一个纯D语言实现的function,大致相当于C的memchr,但使用数组和索引而不是指针。 原因是std.string将用于编译时function评估。 对于那些不熟悉的w / D,如果满足某些限制,可以在编译时评估函数。 一个限制是它们不能使用指针。 另一个是他们无法调用C函数或使用内联汇编语言。 使字符串库在编译时工作对于某些编译时代码生成很有用。 问题: memchr如何在引擎盖下工作以尽可能快地执行? 在Win32上,我使用简单循环在纯D中创建的任何东西,即使有明显的优化技术,例如禁用边界检查,循环展开等,也至少要慢2倍。有哪些非显而易见的技巧可用于像在字符串中查找字符一样简单?

OpenCV:C ++和C性能比较

现在我正在使用OpenCV API( C++ )开发一些应用程序。 此应用程序使用video处理。 在电脑上一切都很快。 今天我决定在Android上移植这个应用程序(使用camera作为videoinput)。 幸运的是,OpenCV for Android所以我只是将我的原生代码添加到Android应用程序示例中。 一切都很好,除了性能。 我对我的应用程序进行了基准测试,发现该应用程序的工作速度为4-5 fps,实际上是不可接受的(我的设备有单一的1ghz处理器) – 我希望它能以大约10 fps的速度工作。 是否可以在C上完全重写我的应用程序? 我知道使用std::vector这样的东西对开发人员来说很舒服,但我并不关心它。 似乎OpenCV’s C接口具有与C++接口相同的function/方法。 我用Google搜索了这个问题,但没有找到任何结果。 谢谢你的建议。

在C中有效地将hex字符串转换为整数?

在C中,将hex数字字符串转换为二进制unsigned int或unsigned long的最有效方法是什么? 例如,如果我有0xFFFFFFFE ,我想要一个带有base10值4294967294的int 。