SQL Server 2008, числовая библиотека, c , LAPACK, проблема с памятью

#c #visual-studio-2008 #sql-server-2008 #memory #lapack

#c #visual-studio-2008 #sql-server-2008 #память #lapack

Вопрос:

Я пытаюсь отправить таблицу чисел в SQL Server 2008 виде:

 1att 2att 3att 4att 5att 6att 7att ... attn
--------------------------------------------
565  526  472  527  483  529  476  470  502
497  491  483  488  488  483  496  515  491
467  516  480  477  494  497  478  519  471
488  466  547  498  477  466  475  480  516
543  491  449  485  495  468  452  479  516
473  475  431  474  460  342  471  386  549
489  477  462  428  489  491  481  483  475
485  474  472  452  525  508  459  561  529
473  457  476  498  485  465  540  475  525
455  477  415  434  475  499  476  482  551
463  476  476  471  488  526  394  439  475
479  473  491  519  483  474  476  474  478
455  518  465  445  496  500  518  470  536
557  498  492  449  478  491  492  476  460
484  509  538  473  548  497  551  477  498
471  430  482  437  516  483  487  453  456
505  476  489  495  472  476  487  516  466
466  495  488  475  550  565  510  473  515
470  490  480  475  479  544  468  486  496
484  495  524  435  469  612  493  467  477
....
....  (several more rows)
....
511  471  529  553  539  501  477  474  494
  

через Visual studio 2008 (в проекте c ) в математическую библиотеку LAPACK .

Возможно ли pass the table in SQL Server to LAPACK (через c в Visual Studio 2008) использовать указатель на память или сохранить всю таблицу в оперативной памяти, а LAPACK считывать память или указатель на память, но без записи в файл и его чтения

Не могли бы вы, пожалуйста, подсказать, как передать подобную таблицу (возможно, местоположение таблицы в памяти или что-то подобное) в LAPACK?
(таким образом, я могу выполнить некоторые вычисления с помощью LAPACK таблицы, хранящейся на SQL Server, с помощью Visual studio 2008 c project)

—-РЕДАКТИРОВАТЬ—

@MarkD, как вы сказали в своем ответе, не могли бы вы, пожалуйста, привести пример вычисления SVD с идеей в примере, используя std::vector class ?

Ответ №1:

LAPACK требует, чтобы отправляемые ему данные были в массиве в стиле FORTRAN (в порядке столбцов). Вы не сможете передавать данные непосредственно из SQL в LAPACK, но вам нужно будет прочитать данные в упорядоченный по столбцам непрерывный массив памяти и передать указатель на первый элемент массива в интересующую процедуру LAPACK.

Существует множество оболочек LAPACK для C / C , которые делают это намного проще.

Редактировать: только что увидел, что вы специально ищете, как передать такой массив. Как я упоминал, для этого существует множество оболочек (просто выполните поиск C / C LAPACK). Простой способ создать свой массив — использовать класс std::vector. Затем вы бы прочитали данные по столбцам, добавив элементы в свой вектор — так что, если бы вы хотели упорядочить массив по столбцам, который вы показываете в своем exmaple, ваш вектор в конечном итоге выглядел бы примерно так:

 //Column 1            Column 2            Column 3          ...   last element 
 [565 497 467 488 ... 526 491 516 466 ... 472 483 480 547 ... ... 494]
  

Затем вы должны передать интересующей вас процедуре LAPACK ячейку памяти первого элемента, например:

 amp;myVector[0]
  

Это возможно с использованием std::vector, поскольку стандарт гарантирует, что вектор использует непрерывное хранилище памяти. Для всех подпрограмм LAPACK также требуется размер матрицы / векторов, которые вы ей передаете (поэтому вам нужно будет вычислить / указать эти значения для вызова функции).

Если вы можете опубликовать конкретную процедуру LAPACK, которую хотите использовать, я могу привести более подробный пример.

Комментарии:

1. Хорошо, я ищу, использовали ли вы что-нибудь конкретное… Интересен ваш отличный ответ…

2. @darkcminor: Я фанат библиотеки FLENS, которая имеет несколько довольно приятных матричных / векторных классов и напрямую взаимодействует с LAPACK, хотя, в зависимости от проблемы, я иногда просто создаю свою собственную и использую интерфейс clapack.

3. Для этого взаимодействия с SQL Server через Visual studio в проекте c вы бы использовали FLENS, добавили библиотеку в visual studio 2008?, Я хотел бы использовать процедуру SVD в таблице…

4. @darkcminor: FLENS — это просто библиотека матриц / контейнеров / решателей и не имеет ничего общего с SQL. Вам понадобится какая-нибудь другая библиотека для связи с SQL Server и чтения значений (к сожалению, у меня нет опыта взаимодействия с SQL servers на C , и у меня нет предложений относительно каких-либо библиотек SQL).

5. не могли бы вы привести пример вычисления SVD, как вы сказали в вашем примере?