Обработка Большого mxArraysБинарные файлы MEX основывались на 64-битных платформах, может обработать 64-битный mxArray s. Эти большие массивы данных могут иметь до 248-1 элемента. Максимальное количество элементов, которые может иметь разреженный mxArray, 248-2.
Используя следующие инструкции создает платформенно независимые бинарные файлы MEX также.
Ваша конфигурация системы может влиять на производительность MATLAB®. 64-битное требование процессора позволяет вам создать mxArray и данные доступа в нем. Однако системная память, в частности размер Оперативной и виртуальной памяти, определяет скорость, на которой MATLAB обрабатывает mxArray. Чем больше доступной памяти, тем быстрее обработка.
Сумма RAM также ограничивает объем данных, который можно обработать когда-то в MATLAB. Для руководства на проблемах памяти см. Стратегии Эффективного использования Памяти.
Подписи API-функций, показанных в следующей таблице, используют mwSize или типы mwIndex, чтобы работать с 64-битным mxArray. Переменные, которые вы используете в своем исходном коде, чтобы вызвать эти функции, должны быть правильным типом.
C функции mxArray Используя mwSize/mwIndex
mxCalcSingleSubscript | mxGetJc |
mxCalloc | mxGetM |
mxCreateCellArray | mxGetN |
mxCreateCellMatrix | mxGetNumberOfDimensions |
mxCreateCharArray | mxGetNumberOfElements |
mxCreateCharMatrixFromStrings | mxGetNzmax |
mxCreateDoubleMatrix | mxGetProperty |
mxCreateLogicalArray | mxGetString |
mxCreateLogicalMatrix | mxMalloc |
mxCreateNumericArray | mxRealloc |
mxCreateNumericMatrix | mxSetCell |
mxCreateSparse | mxSetDimensions |
mxCreateSparseLogicalMatrix | mxSetField |
mxCreateStructArray | mxSetFieldByNumber |
mxCreateStructMatrix | mxSetIr |
mxGetCell | mxSetJc |
mxGetDimensions | mxSetM |
mxGetElementSize | mxSetN |
mxGetField | mxSetNzmax |
mxGetFieldByNumber | mxSetProperty |
mxGetIr |
Пример, arraySize.c в , показывает требования к памяти большого matlabroot/extern/examples/mexmxArray s. Чтобы видеть пример, откройте arraySize.c в редакторе MATLAB.
Эта функция требует одного положительного скалярного числового входного параметра, который она использует, чтобы создать квадратную матрицу. Это проверяет размер входного параметра, чтобы убедиться, что ваша система может теоретически создать матрицу этого размера. Если входной параметр допустим, он отображает размер mxArray в килобайтах.
Создайте этот файл MEX.
mex arraySize.cЗапустите файл MEX.
arraySize(2^10)
Dimensions: 1024 x 1024 Size of array in kilobytes: 1024
Если ваша система не имеет достаточной памяти, чтобы создать массив, MATLAB отображает ошибку Out of memory.
Можно экспериментировать с этой функцией, чтобы проверить производительность и пределы обработки больших массивов в системе.
При использовании 64-битного API mwSize и mwIndex эквивалентны size_t на C/C++. Этим типом является различающийся int без знака, который является типом, используемым в 32-битном API. Бойтесь передавать любые отрицательные величины функциям тот mwSize или mwIndex взятия аргументы. Не бросайте отрицательные значения int к mwSize или mwIndex; возвращенное значение не может быть предсказано. Вместо этого измените свой код, чтобы избегать использования отрицательных величин.
Если вы разрабатываете программы, которые могут работать и на 32-битной и 64-битной архитектуре, обратить внимание на верхний предел значений для mwSize и mwIndex. 32-битное приложение читает эти значения и присваивает их переменным, объявленным как int на C/C++. Старайтесь постараться не присваивать большой mwSize или значение mwIndex к int или другой переменной, которая может быть слишком маленькой.