主要内容

墨西哥人升级文件使用64位的API

墨西哥人命令使用-largeArrayDims默认选项。这个主题描述了如何升级你的墨西哥人文件使用64位的API。

您可以继续使用32位的API调用墨西哥人命令-compatibleArrayDims选择。然而,使用这个选项的更多信息,请参阅如果我不升级呢?

审查和更新墨西哥人文件源代码,使用下面的清单。

  1. 准备您的代码在编辑之前——看到的备份文件并创建测试

  2. 迭代变化和测试代码。

    建立你的墨西哥人文件之前有64位API,使用重构现有代码更新变量Fortran,升级Fortran墨西哥人文件使用64位的API

    每次改变后,构建和测试代码:

  3. 编译使用64位的API。构建myMexFile.c类型:

    墨西哥人myMexFile.c

  4. ——看到解决失败和警告解决-largeArrayDims构建失败和警告

  5. 比较结果,看到执行64位墨西哥人文件和比较结果与32位版本

  6. 检查内存,看实验大数组

下面的程序使用C / c++术语和示例代码。Fortran墨西哥人文件共享的问题,描述的更多的任务升级Fortran墨西哥人文件使用64位的API

备份文件并创建测试

修改你的代码之前,确认墨西哥人文件适用于32位API。至少,构建一个预期的输入和输出列表,或创建一个完整的测试套件。使用这些测试比较结果与更新的源代码。结果应该是相同的。

备份所有源代码、二进制和测试文件。

更新变量

处理大型数组,数组下标变量包含转换或大小使用mwSizemwIndex而不是32位类型int类型。回顾你的代码是否包含以下类型的变量:

更新的参数调用函数用于64位API

识别64位API函数在您的代码中使用mwSize/mwIndex类型。函数的列表,请参阅使用64位的API。搜索您所使用的变量,调用函数。检查函数签名,显示下语法在功能上参考文档。签名识别的变量mwSize/mwIndex值作为输入或输出值。改变你的变量使用正确的类型。

例如,假设您的代码使用mxCreateDoubleMatrix函数,见以下语句:

int nrows ncolumns;…y_out = mxCreateDoubleMatrix (nrows ncolumns mxREAL);

看到函数签名,类型:

医生mxCreateDoubleMatrix

的签名是:

mxArray * mxCreateDoubleMatrix (mwSize m, mwSize n, mxComplexity ComplexFlag)

输入参数的类型nmwSize。改变你的代码如表所示。

替换: :
int nrows ncolumns;
mwSize nrows ncolumns;

更新数组下标变量用于和大小

如果您的代码使用中间变量计算大小和索引值,使用mwSize/mwIndex为这些变量。例如,下面的代码声明的输入mxCreateDoubleMatrix类型mwSize:

mwSize nrows ncolumns;/ *输入mxCreateDoubleMatrix * / int numDataPoints;nrows = 3;numDataPoints = nrows * 2;ncolumns = numDataPoints + 1;…y_out = mxCreateDoubleMatrix (nrows ncolumns mxREAL);

下面的例子使用了中间变量,numDataPoints(类型的int),来计算的价值ncolumns。如果你复制一个64位的值nrows到32位的变量,numDataPoints这样,生成的价值。墨西哥人文件可能会崩溃或产生不正确的结果。使用类型mwSizenumDataPoints如下表所示。

替换: :
int numDataPoints;
mwSize numDataPoints;

分析其他变量

你不需要改变代码的每个整数变量。例如,字段数据类型的结构和状态码int。然而,您需要识别变量用于多种目的,如有必要,用多个变量替换他们。

下面的示例创建一个矩阵,myNumeric一个结构,myStruct基于传感器的数量。代码使用一个变量,numSensors两个数组的大小和结构中的字段的数量。

* myStruct mxArray * myNumeric;int numSensors;mwSize m, n;char * *字段名;…myNumeric = mxCreateDoubleMatrix (numSensors n mxREAL);myStruct = mxCreateStructMatrix (m, n, numSensors,字段名);

的函数签名mxCreateDoubleMatrixmxCreateStructMatrix是:

mxArray * mxCreateDoubleMatrix (mwSize m, mwSize n, mxComplexity ComplexFlag) mxArray * mxCreateStructMatrix (mwSize m, mwSize n, int nfields, const char * *字段名);

mxCreateDoubleMatrix功能,你的代码使用numSensors为变量。的类型mwSize。为mxCreateStructMatrix功能,你的代码使用numSensors为变量nfields。的类型nfieldsint。同时处理函数,取代numSensors两个新的变量,如下表所示。

替换: :
int numSensors;
/ *创建不同类型的两个变量* / / * * / mwSize numSensorSize;int numSensorFields;
myNumeric = mxCreateDoubleMatrix (numSensors n mxREAL);
/ *使用mwSize变量* / / * numSensorSize * / myNumeric = mxCreateDoubleMatrix (numSensorSize n mxREAL);
myStruct = mxCreateStructMatrix (m, n, numSensors,字段名);
/ *使用int变量* / / * numSensorFields * / myStruct = mxCreateStructMatrix (m, n, numSensorFields,字段名);

测试、调试和解决分歧在每次迭代重构

构建myMexFile.c有32位API,类型:

墨西哥人-compatibleArrayDims myMexFile.c

使用您创建的测试在这个过程的开始比较的结果你的墨西哥人更新文件与原始二进制文件。两个墨西哥人文件应该返回相同的结果。如果不是,调试和解决任何分歧。差异更容易解决现在比当你构建使用64位的API。

解决-largeArrayDims构建失败和警告

后审查和更新你的代码,编译使用大阵墨西哥人文件处理API。构建myMexFile.c有64位API,类型:

墨西哥人myMexFile.c

mwSize/mwIndex类型是MATLAB®类型,编译器有时指的是他们size_t,unsigned_int64或其他类似的名字。

大多数构建相关问题类型不匹配32位和64位类型。参考第5步我怎么更新mex files使用大阵处理API (-largeArrayDims) ?来确定特定的编译器,共同构建问题和可能的解决方案。金宝搏官方网站

执行64位墨西哥人文件和比较结果与32位版本

比较的结果运行您的墨西哥人文件编译64位API与原始二进制的结果。如果有任何差异或失败,使用调试器对原因进行调查。有关你的调试器的功能的信息,请参考编译器文档。

识别问题和可能的解可能遇到你的墨西哥人文件运行时,参考步骤6金宝搏官方网站我怎么更新mex files使用大阵处理API (-largeArrayDims) ?

你解决问题和升级你的墨西哥人文件之后,它复制原始代码的功能在使用大型数组处理API。

实验大数组

如果你访问一个机器和大量的内存,你可以尝试大数组。双精度浮点数的数组(默认在MATLAB) 232元素大约需要32 GB的内存。

一个示例,演示了使用大型数组,看到arraySize.c墨西哥人文件处理大型mxArrays C墨西哥人文件

相关的例子

更多关于

外部网站