Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
涉及C/C+中生成的大量矩阵的速度优化+;-在文件中存储与重新计算_C_Performance_Pointers - Fatal编程技术网

涉及C/C+中生成的大量矩阵的速度优化+;-在文件中存储与重新计算

涉及C/C+中生成的大量矩阵的速度优化+;-在文件中存储与重新计算,c,performance,pointers,C,Performance,Pointers,这就是“需要了解问题的细节”:作为我正在编写的算法的一部分,它将3000X400大小的矩阵作为输入。对于每一行,我需要创建一个正方形矩阵,即大小为400x400。完成此操作后,我需要计算一个数字R(I,j),其中I,j是为每行生成的方阵(400x400) 如果愿意的话,可以将其视为相关矩阵的计算。我没有使用相关性,而是使用自己的算法对生成的方阵进行运算。我必须计算R(i,j)为0 如果你有稀疏矩阵(很多零点),你可以考虑替代矩阵表示(参见一些启示)。p> 如果没有,你有没有办法重写你的算法,这样

这就是“需要了解问题的细节”:作为我正在编写的算法的一部分,它将3000X400大小的矩阵作为输入。对于每一行,我需要创建一个正方形矩阵,即大小为400x400。完成此操作后,我需要计算一个数字R(I,j),其中I,j是为每行生成的方阵(400x400)


如果愿意的话,可以将其视为相关矩阵的计算。我没有使用相关性,而是使用自己的算法对生成的方阵进行运算。我必须计算R(i,j)为0 如果你有稀疏矩阵(很多零点),你可以考虑替代矩阵表示(参见一些启示)。p> 如果没有,你有没有办法重写你的算法,这样你就可以计算几个(甚至一个)方阵,使用它们,然后丢弃它们而不再需要它们?在不了解你的申请的情况下,我真的不能说这是否有效。但这是一个想法

<>否则,考虑其他选项。您可能会考虑增加交换分区大小(Linux)或页面文件大小(Windows)。我不确定它在OSX上叫什么,但我肯定有办法做到这一点。基本上,这是操作系统在内存不足时将少量内存写入硬盘的空间。它可以有效地将您的值写入磁盘,稍后再读取,但操作系统可以处理这些值,而且会更简单、更高效。请记住,要做到这一点,您可能需要一个64位系统——您需要3.5 GB以上的连续地址空间,而32位系统很难提供这一点

如果所有这些都失败了,如果你有一个64位的系统并且能负担得起,你总是可以买更多的内存


祝你好运

听起来是Hadoop的一个很好的应用程序。你应该能够把它的鼻涕并行化。您将在磁盘上得到结果,然后您可以一次操作一个矩阵。对不起,什么是hadoop?另外,你认为没有比从文件读写更好的方法了吗?几乎所有的优化问题都会有这样一个答案:两种方法都试试,看看哪一种更快。最好使用探查器。Hadoop已经广为人知,广为宣传。搜索该名称将提供大量信息。与其分配内存并让操作系统进行交换,不如在64位机器上使用内存映射文件。然后就成了一个安排计算的问题,这样操作系统的磁盘缓存就可以有效地工作。问题是,绝对不是稀疏矩阵,我确信我生成的所有矩阵都是完全非零值的。它为零的概率非常低。它们是一种距离矩阵,其思想是计算它们并丢弃它们。但正如我在问题中解释的,我没有足够的内存来存储每个计算矩阵。这就是为什么我重新计算并浪费了这么多时间(.我有一个64位系统-关于增加页面文件大小。我想知道是否有办法只为这个程序增加页面文件大小?只为程序增加堆栈空间?我已经订购了更多内存,现在我有大约12 gb的内存可供使用,我希望这已经足够了。我需要看看是否有一个相等的Xmx或Xms命令对于我的程序,比如Java,页面文件是一个系统级的东西——基本上,它让系统假装磁盘上的文件实际上是ram,然后相应地分配它。据我所知,编译器/C标准库不会人为地限制您可以使用的内存;如果您将12gb的内存放入系统中,您应该能够使用它大部分内存都在你的程序中。希望这足以让你的程序正常工作。祝你好运!是的,这也是我的希望,希望能有更多的内存。谢谢你的帮助!!我现在有12GB内存,中途退出就被卡死了(.对于较低的值,代码运行良好且正确。在大小为1000X400的矩阵上,它停止工作并退出。任务管理器显示我有足够的内存。使用代码块在windows计算机上运行它