Обновите файлы MEX на языке ФОРТРАН, чтобы использовать 64-битный API

Шаги в Upgrade MEX Files to Use 64-Bit API применяются к исходным файлам Фортран и C/C + +. Фортран использует похожие сигнатуры API, идентичные mwSize / mwIndex типы и подобные компиляторы и отладчики.

Однако, чтобы сделать исходный код Фортран 64-разрядным, выполните эти дополнительные задачи.

Использование файла заголовка API на языке Фортран

Чтобы сделать ваш файл MEX на языке Фортран совместимым с 64-битным API, используйте fintrf.h заголовочный файл в исходных файлах ФОРТРАН. Назовите свои исходные файлы заглавной точкой .F расширение файла. Дополнительные сведения об этих требованиях см. в разделе Компоненты файла MEX на языке Фортран.

Объявление указателей на ФОРТРАН

Указатели представляют собой 32-разрядные или 64-разрядные адреса на основе типа машины. Это требование не связано непосредственно с измерениями массива, но вы можете столкнуться с проблемами при перемещении 32-битного кода на 64-битные машины в рамках этого преобразования.

Для получения дополнительной информации см. Preprocessor Macros и mwPointer.

Компилятор C/C + + автоматически обрабатывает размер указателя. На языке Фортран, MATLAB® использует mwPointer тип, чтобы обработать это различие. Для примера, mxCreateDoubleMatrix возвращает mwPointer:

mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag)
mwSize m, n
integer*4 ComplexFlag

Требовать объявления типов ФОРТРАН

В ФОРТРАН используются неявные определения типов. Необъявленные переменные, начинающиеся с букв I через N неявно объявленные типы INTEGER. Имена переменных, начинающиеся с других букв, неявно объявлены как тип REAL*4. Использование неявного INTEGER type может работать для 32-битных индексов, но не безопасен для больших измерений массива Файлов MEX. Чтобы заставить вас объявить все переменные, добавьте IMPLICIT NONE заявление на ваши стандартные подпрограммы ФОРТРАН. Для примера:

subroutine mexFunction(nlhs, plhs, nrhs, prhs)
implicit none

Этот оператор помогает идентифицировать 32-битные целые числа в коде, которые не имеют явных объявлений типов. Затем можно объявить их как INTEGER*4 или mwSize / mwIndexПо обстоятельствам. Для получения дополнительной информации о IMPLICIT NONEсм. документацию компилятора Фортран.

Использование переменных в вызовах функций

Если вы используете число в качестве аргумента функции, компилятор Фортран может назначить аргументу неправильный тип. На 64-разрядной платформе неправильный тип может привести к Out of Memory ошибки, нарушения сегментации или неправильные результаты. Для примера, определения типов аргументов для mxCreateDoubleMatrix функции:

mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag)
mwSize m, n
integer*4 ComplexFlag

Предположим, что у вас есть файл MEX на C/C + + со следующим оператором:

myArray = mxCreateDoubleMatrix(2, 3, mxREAL); 

Большинство компиляторов C/C + + интерпретируют число 2 как 64-разрядное значение. Некоторые компиляторы ФОРТРАН не могут обнаружить это требование и предоставить 32-битное значение. Для примера эквивалентный оператор Фортран:

myArray = mxCreateDoubleMatrix(2, 3, 0)

Компилятор интерпретирует значение ComplexFlag аргумент 0 правильно как тип INTEGER*4. Однако компилятор мог интерпретировать аргумент 2 в виде 32-битного значения, хотя аргумент и m объявлен тип mwSize.

Независимое от компилятора решение этой задачи состоит в том, чтобы объявить и использовать mwSize / mwIndex переменная вместо буквального значения. Например, следующие операторы однозначно вызывают mxCreateDoubleMatrix функция на языке Фортран:

mwSize nrows, ncols
INTEGER*4 flag
nrows = 2
ncols = 3
flag = 0
myArray = mxCreateDoubleMatrix(nrows, ncols, flag)

Управление предупреждениями компилятора Фортран

Некоторые компиляторы ФОРТРАН не могут обнаружить столько несоответствий типов, сколько аналогичные компиляторы C/C + +. Эта невозможность может усложнить шаг Устранение отказов и предупреждений сборки -largeArrayDims, оставив больше проблем для поиска с отладчиком на шаге Выполнение 64-Bit файла MEX и Сравнение результатов с 32-Bit версией.

См. также

| |

Похожие примеры

Подробнее о

Внешние веб-сайты