Обработка Большого 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/mex
mxArray
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
или другой переменной, которая может быть слишком маленькой.