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