Tag: gcc

基准C ++与Java,不切实际的结果

我做了一个简单的测试,我知道C ++更快但我的测试结果不切实际。 C ++代码是: #include #include unsigned long long s(unsigned long long n) { unsigned long long s = 0; for (unsigned long long i = 0; i < n; i++) s += i; return s; } int main() { LARGE_INTEGER freq, start, end; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&start); printf("%llu\n", s(1000000000)); QueryPerformanceCounter(&end); double d = (double) (end.QuadPart – […]

C性能和编译选项

我有两个类似的实现(java和c ++)用于像选择排序这样的简单算法。 public interface SortingAlgorithm { public void sort(int[] a); } public class SelectionSort implements SortingAlgorithm { @Override public void sort(int[] a) { for (int i = 0; i < a.length; i++) { int lowerElementIndex = i; for (int j = i + 1; j < a.length; j++) { if (a[j] < a[lowerElementIndex]) { lowerElementIndex […]

如何在OS X Lion上安装JPype以与Neo4j一起使用?

我正在尝试将Neo4j用于一个项目,并希望通过Python与它进行交互,因为我是编程的新手并且不知道任何Java。 我正在按照安装说明操作 ,但我坚持第一步,即安装JPype。 我使用的是OS X 10.7(狮子)。 我认为我的配置非常标准,从Python网站下载的Python 2.7.2和从Apple网站下载的Java 1.6.0。 当我跑 % sudo python setup.py install 在JPype安装程序上,我得到大约100行关于各种.h文件的错误代码,然后它以行终止: lipo: can’t figure out the architecture type of: /var/tmp// ccwOzLi9.out error: command ‘gcc-4.2’ failed with exit status 1 我发现了一篇关于JPype的gcc错误的博客文章 ,但我按照那里的说明无济于事。 我还通过电子邮件发送了该post的作者,他告诉我从未实际使用过JPype,曾在OS X 10.6中工作过,并且没有任何见解。 我还通过电子邮件发送了JPype的创建者,他告诉我他只使用Windows,并且不知道如何在OS X上安装。但是如果我们可以解决这个问题,我可以指出他的答案,也许他可以添加JPype文档的解决方案,也帮助了很多其他人! 那么,有谁知道我做错了什么? 我想使用Neo4j,但我不懂Java,所以我完全不知道如何解决编译错误。 基于阅读所有可用的Google结果,我的两个运行理论是: 我在某种程度上使用32位版本的Python或Java(虽然我使用标准的官方安装,但无法弄清楚如何切换到64位或甚至可能) JPype文件只能使用GCC 4.0而不是4.2编译。 但我无法在网上找到有关如何回滚到GCC 4.0的任何内容(或者它是否附带2011款MacBook,并且有一些方法可以强制JPype使用它进行编译)。 还有另一个类似的问题 ,但解决方案是使用一个不同的适配器,通过REST而不是直接挂钩到Java。 如果必须,我会尝试,但如果可能的话,我宁愿使用推荐的Neo4j方法。

使用编译器的关联性有什么问题?

有时可以使用关联性来消除数据依赖性,我很好奇它可以提供多少帮助。 我很惊讶地发现,通过手动展开一个简单的循环,我在Java(build 1.7.0_51-b13)和C(gcc 4.4.3)中几乎可以获得4的加速因子 。 所以我要么做一些非常愚蠢的事情,要么编译器忽略了一个强大的工具。 我开始了 int a = 0; for (int i=0; i<N; ++i) a = M1 * a + t[i]; 它计算接近String.hashCode()东西(设置M1=31并使用char[] )。 计算非常简单,对于我的i5-2400 @ 3.10GHz(在Java和C中), t.length=1000大约需要1.2微秒。 观察到每两个步骤a乘以M2 = M1*M1并添加一些东西。 这导致了这段代码 int a = 0; for (int i=0; i<N; i+=2) { a = M2 * a + (M1 * t[i] + t[i+1]); // […]