Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
пытаюсь реализовать фортрановскую функцию GEMM на TSQL
но что-то не выходит каменный олень

create table matrixA( x int not null, y int not null, value float not null );
ALTER TABLE matrixA ADD CONSTRAINT matrixAPK PRIMARY KEY CLUSTERED (x, y);
GO
create table matrixB( x int not null, y int not null, value float not null );
ALTER TABLE matrixB ADD CONSTRAINT matrixBPK PRIMARY KEY CLUSTERED (x, y);
GO
insert into matrixA 
values
 (0, 0, 1), (0, 1, 2), (0, 2, 3)
,(1, 0, 4), (1, 1, 5), (1, 2, 6) ;
GO
insert into matrixB 
values
 (0, 0, 7), (0, 1, 8), (0, 2, 9)
,(1, 0, 1), (1, 1, 2), (1, 2, 3)
,(2, 0, 4), (2, 1, 5), (2, 2, 6)
,(3, 0, 7), (3, 1, 8), (3, 2, 9)
GO


в математике выглядит вот так


-- // A[m * k] B[k * n] A[0] * B A[1] * B C[m * n]
-- // | 1 4 | | 7 1 4 7 | | 7 1 4 7| |28 4 16 28| | 50 14 32 50|
-- // | 2 5 | * | 8 2 5 8 | = |16 4 10 16| |40 10 25 40| AS | 122 32 77 122|
-- // | 3 6 | | 9 3 6 9 | |27 9 18 27| |54 18 36 54|
-- // sum sum
-- // result |50 14 32 50| |122 32 77 112|

облом где-то при связывании - в Фортране column base порядок индексации

SELECT m1.x, m2.y, SUM(m1.value * m2.value) value FROM matrixA m1, matrixB m2 WHERE m1.y=m2.x GROUP BY m1.x, m2.y



0 0 21
1 0 57
0 1 27
1 1 72
0 2 33
1 2 87

а должно быть


0 0 50
1 0 122
1 0 14
1 1 32
2 0 32
2 1 77
3 0 50
3 1 122
8 май 13, 20:39    [14275836]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
пардон ошибка в индексе
должно быть

0	0	50
0 1 122
1 0 14
1 1 32
2 0 32
2 1 77
3 0 50
3 1 122
8 май 13, 20:48    [14275862]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
serpentariy
Member

Откуда:
Сообщений: 265
Lepsik,

А чего хотите то?
8 май 13, 21:18    [14275946]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
serpentariy
Member

Откуда:
Сообщений: 265
serpentariy
Lepsik,

А чего хотите то?

Или Вы думаете, что на сайте ориентированном на SQL тебе помогут без подробностей по какой то функции GEMM? и, кстати, что это за функция и какой язык?
8 май 13, 21:54    [14276017]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
serpentariy
Member

Откуда:
Сообщений: 265
serpentariy,

Язык понятно какой -фортран, а чего Вы хотите получить то? Желательно всё в разрезе Sql Server...И желательно с примерами..
8 май 13, 21:58    [14276029]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
serpentariy
serpentariy,

Язык понятно какой -фортран, а чего Вы хотите получить то? Желательно всё в разрезе Sql Server...И желательно с примерами..



я ж вроде все написал 2 раза и в разрезе SQL тоже.

если по примитивному - то каждая колонка А умножается по-колоночно на каждую копию B

A[m * k]     B[k  * n]      A[0] * B       A[1] * B
| 1 4 | | 7 1 4 7 | | 7 1 4 7| |28 4 16 28|
| 2 5 | * | 8 2 5 8 | = |16 4 10 16| |40 10 25 40|
| 3 6 | | 9 3 6 9 | |27 9 18 27| |54 18 36 54|

, а потом по-колончно этот 3-мерный куб суммируетс по-колонкам и получается

A[0] + А[1]

|50 14 32 50|
|122 32 77 112|
8 май 13, 22:21    [14276086]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
этот запрос дает нужный частный результат - 3х мерную матрицу до складывания по столбцам

select x, y, z, sum(mlt) from (
SELECT m1.x, m1.y, 0 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=0 and m2.x=0 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 0 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=0 and m2.x=1 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 0 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=0 and m2.x=2 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 0 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=0 and m2.x=3 and m1.y = m2.y
union all  -- second slice ----------------------------------
SELECT m1.x, m1.y, 1 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=1 and m2.x=0 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 1 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=1 and m2.x=1 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 1 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=1 and m2.x=2 and m1.y = m2.y
union all
SELECT m1.x, m1.y, 1 as z, (m1.value * m2.value) as mlt FROM matrixA m1, matrixB m2 WHERE m1.x=1 and m2.x=3 and m1.y = m2.y
) a
8 май 13, 22:52    [14276167]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
qwerty112
Guest
имхо, вы что-то в исходных данных "нахомутали" (в смысле - с индексами) ...

но на них, такой запрос даёт "заказанную" выборку
SELECT m2.x, m1.x as y, sum(m1.value * m2.value) as xz 
FROM matrixA m1 inner join matrixB m2 on m1.y=m2.y 
group by m2.x, m1.x
order by 1,2


x           y           xz
----------- ----------- ----------------------
0           0           50
0           1           122
1           0           14
1           1           32
2           0           32
2           1           77
3           0           50
3           1           122
8 май 13, 22:58    [14276198]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
ура - спасибо - то что надо.

это был чисто академически - прикладной интерес. Я на днях прикручу CUDA к ESP для MSSQL сервер чтобы показать как можно GPU использовать для прикладных задач и выложу исходники и проект сюда.

Заодно и будет видно будет сравнение скорости счета серверным движком и GPU. :)
8 май 13, 23:09    [14276236]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
как это выглядит на C для CUDA - файл с раширением .CU

/**
 *   C = α op ( A ) op ( B ) + β C 
 *   CUBLAS_OP_T
 *   where α and β are scalars, and A , B and C are matrices stored in column-major format with dimensions op ( A ) m × k , op ( B ) k × n and C m × n , respectively.
 *
 * // http://docs.nvidia.com/cuda/cublas/index.html#topic_8_1
 */

int KernelCublasSgemm( const float* pA, const float* pB,  float* pC, const int m, const int k, const int n, bool transform )
{
    float* pDevA = nullptr;
    float* pDevB = nullptr;
    float* pDevC = nullptr;
    const float alpha( 1.0f ), beta( 1.0f );
    int result = 0;
    cudaError_t rs = cudaErrorNotSupported;
    cublasStatus_t status = CUBLAS_STATUS_INTERNAL_ERROR;

    if( CUBLAS_STATUS_SUCCESS != ::cudaMalloc( (void**)&pDevA, m * k * sizeof(float) ) )
    {
        return -2;
    }
    rs = ::cudaMemcpy( pDevA, pA, m * k * (int)sizeof(float), cudaMemcpyHostToDevice);

    if( CUBLAS_STATUS_SUCCESS != rs )
    {
        result = -3;
        goto goto_release;
    }

    if( CUBLAS_STATUS_SUCCESS != ::cudaMalloc( (void**)&pDevB, k * n * sizeof(float) ) )
    {
        result = -4;
        goto goto_release;
    }
    if( CUBLAS_STATUS_SUCCESS != ::cudaMemcpy( pDevB, pB, k * n * (int)sizeof(float), cudaMemcpyHostToDevice) )
    {
        result = -5;
        goto goto_release;
    }
    if( CUBLAS_STATUS_SUCCESS != ::cudaMalloc( (void**)&pDevC, m * n * sizeof(float) ) )
    {
        result = -6;
        goto goto_release;
    }
    if( CUBLAS_STATUS_SUCCESS != ::cudaMemcpy( pDevC, pC, m * n * (int)sizeof(float), cudaMemcpyHostToDevice) )
    {
        result = -7;
        goto goto_release;
    }
    status = ::cublasSgemm_v2( g_handle, CUBLAS_OP_T, CUBLAS_OP_N, m, n, k, &alpha, pDevA, k, pDevB, k, &beta, pDevC, m );

    if( CUBLAS_STATUS_SUCCESS != status )
    {
        result = -8;
        goto goto_release;
    }
    if( CUBLAS_STATUS_SUCCESS != ::cudaMemcpy( pC, pDevC, m * n * (int)sizeof(float), cudaMemcpyDeviceToHost) )
    {
        result = -9;
        goto goto_release;
    }
    if( transform )
    {
        ::ConvertF2C( pC, m, n );
    }
goto_release:
    if( nullptr != pDevA )
    {
        ::cudaFree( pDevA );
    }
    if( nullptr != pDevB )
    {
        ::cudaFree( pDevB );
    }
    if( nullptr != pDevC )
    {
        ::cudaFree( pDevC );
    }
    return result;
}


это тестовый код на C++

 
    //  A[m * k]     B[k  * n]      A[0] * B       A[1] * B          C[m  * n]
    //  | 1  4 |    | 7 1 4 7 |    | 7  1  4  7|  |28  4 16 28|    | 50  14 32  50|
    //  | 2  5 |  * | 8 2 5 8 | =  |16  4 10 16|  |40 10 25 40| AS | 122 32 77 122| 
    //  | 3  6 |    | 9 3 6 9 |    |27  9 18 27|  |54 18 36 54|    
    //                                  sum            sum         
    //   result                    |50 14 32 50|  |122 32 77 112|
    void TestKernelCublasSgemm_v2_2x3x4()
    {
        const size_t m = 2;   // number of rows of matrix op(A) and C.  
        const size_t k = 3;   // number of columns of op(A) and rows of op(B). 
        const size_t n = 4;   // number of columns of matrix op(B) and C         

        float A[ m * k ] = { 1, 2, 3          // m rows                                   
                           , 4, 5, 6 };           // k cols                                   

        float B[ k * n ] = { 7, 8, 9          // k rows   
                           , 1, 2, 3          //                  
                           , 4, 5, 6          //                  
                           , 7, 8, 9 };       // n cols        

        float C[ m * n ] = { 0, 0, 0, 0       // m rows
                           , 0, 0, 0, 0 };    // n cols       

        int rst = ::KernelCublasSgemm( A, B, C, m, k, n, true );

        float expected[ m * n ] = { 50,  14, 32,  50
                                  , 122, 32, 77, 122 };

        CPPUNIT_ASSERT_EQUAL_MESSAGE( "passed processing",  0, rst ); 
        CPPUNIT_ASSERT_EQUAL_MESSAGE( "the same result",  0, ::memcmp( expected, C, sizeof(C)) ); 
    }
8 май 13, 23:27    [14276314]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
сравниваю на i7 960 3.2 Gz 8 cores 24 Gb

A[1024x1024] * B[1024x1024]

1 thread on C++ 6 sec
GPU GTX680 0.2 sec
MSSQL2008R2 6min 15sec

create table dimM( id int not null identity(1,1) primary key );
create table dimN( id int not null identity(1,1) primary key );
create table dimK( id int not null identity(1,1) primary key );
create table numbers( id int not null identity(1,1) primary key );
GO
create table matrixA( x int not null, y int not null, value float not null );
ALTER TABLE matrixA ADD CONSTRAINT matrixAPK PRIMARY KEY CLUSTERED (x, y);
GO
create table matrixB( x int not null, y int not null, value float not null );
ALTER TABLE matrixB ADD CONSTRAINT matrixBPK PRIMARY KEY CLUSTERED (x, y);
GO
// fiil tables
INSERT dimM DEFAULT VALUES; 
GO 1024
GO
INSERT dimN DEFAULT VALUES;  
GO 1024
GO
INSERT dimK DEFAULT VALUES
GO 1024
GO

INSERT matrixA SELECT dimM.id as x, dimK.Id as y, (rand(cast(cast(right(newid(),4) as varbinary) as integer))) as value FROM dimM, dimK
GO
INSERT matrixB SELECT dimK.id as x, dimN.Id as y, (rand(cast(cast(right(newid(),4) as varbinary) as integer))) as value FROM dimK, dimN
GO


SELECT m2.x, m1.x as y, sum(m1.value * m2.value) as xz 
FROM matrixA m1 inner join matrixB m2 on m1.y=m2.y 
group by m2.x, m1.x
order by 1,2
8 май 13, 23:42    [14276365]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Lepsik
сравнение скорости счета серверным движком и GPU. :)
Забавно сравнивать тёплое с мягким.
Lepsik
1 thread on C++ 6 sec
GPU GTX680 0.2 sec
MSSQL2008R2 6min 15sec
С++ и GPU это время вместе с полной компиляцией?
И 6 мин. это что? Последний селект? А то "GO 1024" это не серверная хрень, и NewID костыльно и скуль тут не причём.
Притом сишный код это чистый хак, а в скуле нет даже намёка на оптимальность. Колумнстор векторизация не задействована, это не говоря о других весчах. Лучше хвастать знаниями на соответсвующем форуме.
12 май 13, 23:29    [14285025]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
--Mnior,

дело не в хвастовстве а в желании дать, как инструмент, использование GPU прямо с сиквела. Впрочем если обшественности индеферентно я и не стану ничего выкладывать

С GPU опечатка. Там 0.002 сек.

--И 6 мин. это что? Последний селект?

конечно, после второго прогона. или ты умише свое решил показать?

можно конечно сделать 1,000 колонок. Но на 10,000 и сиквел сломается

--Колумнстор векторизация не задействована, это не говоря о других весчах.

это где?
13 май 13, 20:08    [14289457]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Lepsik
или ты умише свое решил показать?
Чуть тише на поворотах. Не надо адекватную критику в штыки-то.
Lepsik
а в желании дать, как инструмент, использование GPU прямо с сиквела.
Это где? Не вижу.
Lepsik
Впрочем если обшественности индеферентно я и не стану ничего выкладывать
А вы ничего и не предлагали.
Но дело не в этом, а в зачем сие на скуле то? Вот основной посыл комента.
Задача скуля не фортран заменять, да не графику рендерить. И не матрёшки решать, да и хранить их в СУБД нет надобности никакой.

Это к тому факту, что вы таки поставили циферки рядом. Случайно? Или хотели что-то показать?
Lepsik
Но на 10,000 и сиквел сломается
Таки сломается или всётки скажет "С дубу рухнул?"
Или вы что-то таки хотите выразить такими словечками?
Так тёплое или мягкое?
А ваще можно и 30K колонок закуячить, только смыслу и не по делу. И даже это не проблема, можно по кускам разбить.

Lepsik
--Колумнстор векторизация не задействована, это не говоря о других весчах.
это где?
Это в скуле, тот что 2012 Denali зовётся. Но нужно по колонкам конечно разбить, чтоб батчинг заработал.
Сия чуда у меня нет, но если имеется и интересно можете попробовать. Тут иногда ошивает гуру по данному делу.

Если вы понимаете о чём я, то да, скуль довольно ограниченный компилятор, но он то не Tutorial D, разделять отношения по каждой колонке не умеет, и в самом языке не заложено.
+ По сути, план должен быть похож на часть ентого
USE tempdb
CREATE TABLE dbo.MatrixA(M Int, K Int, PRIMARY KEY (M,K), Value Decimal(38,34) NOT NULL)
CREATE TABLE dbo.MatrixB(N Int, K Int, PRIMARY KEY (N,K), Value Decimal(38,34) NOT NULL)
CREATE TABLE dbo.MatrixC(M Int, N Int, PRIMARY KEY (M,N), Value Decimal(38,34) NOT NULL)
GO
;WITH N1024 AS (SELECT * FROM master.dbo.spt_values WHERE type = 'P' AND number < 1024)
INSERT dbo.MatrixA SELECT M.number, K.number, Rand(Convert(Int,Convert(VarBinary,Right(NewID(),4)))) FROM N1024 M CROSS JOIN N1024 K
;WITH N1024 AS (SELECT * FROM master.dbo.spt_values WHERE type = 'P' AND number < 1024)
INSERT dbo.MatrixB SELECT N.number, K.number, Rand(Convert(Int,Convert(VarBinary,Right(NewID(),4)))) FROM N1024 N CROSS JOIN N1024 K
GO
-- UPDATE STATISTICS dbo.MatrixA
-- UPDATE STATISTICS dbo.MatrixB

;WITH N1024 AS (SELECT * FROM master.dbo.spt_values WHERE type = 'P' AND number < 1024)
INSERT	dbo.MatrixC
SELECT	 M.number	AS M
	,N.number	AS N
	,S.Value
FROM	N1024		M CROSS
JOIN	N1024		N CROSS APPLY (
SELECT	Sum(A.Value * B.Value)
FROM	dbo.MatrixA	A INNER MERGE
JOIN	dbo.MatrixB	B ON B.K = A.K
WHERE	    A.M = M.number
	AND B.N = N.number	) S(Value)
ORDER BY M.number
	,N.number
OPTION (ORDER GROUP)

-- SELECT Top(10) * FROM dbo.MatrixC
Но без M и N таблиц.
Нельзя сделать LOOP JOIN по первым колонкам M и N обоих индексов и MERGE по K, второй их части.
Об этом уже были рассуждения.

Но такие виды связей не встречаются на практике и сводятся к неправильной структуре базы или даже неправильной постановки задачи.
И он рантайм, он же парсит и компилит каждый такой запрос за минимальное время (старается), и я поэтому намекал на время компиляции для С и GPU.
SQL-и узко специализированы, уже чем возможные комбинации запросов (как и всякая реализация любого языка).
Но это я отошёл к тематике форума, а не по вашему "вопросу". Сравнивать же бессмысленно.

И Float - зло.
14 май 13, 00:26    [14290214]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Mnior
Lepsik
сравнение скорости счета серверным движком и GPU. :)
Забавно сравнивать тёплое с мягким.
Lepsik
1 thread on C++ 6 sec
GPU GTX680 0.2 sec
MSSQL2008R2 6min 15sec
С++ и GPU это время вместе с полной компиляцией?
И 6 мин. это что? Последний селект? А то "GO 1024" это не серверная хрень, и NewID костыльно и скуль тут не причём.
Притом сишный код это чистый хак, а в скуле нет даже намёка на оптимальность. Колумнстор векторизация не задействована, это не говоря о других весчах. Лучше хвастать знаниями на соответсвующем форуме.
на мой взгляд не имеет смысла так высокомерно относиться к автору темы
вполне себе интересная тема
в конце концов - не интересно - не читай

оно конечно на болиде F1 никто в магазин не ездит
хотя конечно было бы интересно GPU к обычной работе прикрутить
жаль что подходящую работу для него найти это отдельная работа
14 май 13, 11:15    [14291270]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
--------------------------------
Guest
И где бы еще на сервере баз данных графическую плату найти
14 май 13, 13:24    [14292353]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
leov
на мой взгляд не имеет смысла так высокомерно относиться к автору темы
Вам показалось. Уверяю вас.
Никоим образом никого не хочу обидеть.
Искать обидное в словах - дурное занятие, не так ли?
14 май 13, 17:21    [14294457]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Mnior
Чуть тише на поворотах. Не надо адекватную критику в штыки-то.


Вы я так понял обиделесь за SQL сервер хотя я всего лишь написал что GPU можно прикрутить к SQL и достаточно эффективно на нем решать некоторые задачи.

Сравнением я лишь показал что данная проблемма сушествует и даже использование ESP уступает по эффективности на 2-3 порядка.


Mnior
А вы ничего и не предлагали.


14276236

Mnior
Задача скуля не фортран заменять, да не графику рендерить. И не матрёшки решать, да и хранить их в СУБД нет надобности никакой.


Тот же Microsoft использует Radix сортировку для MSSQL сервер, а она на GPU очень хорошо переносится. вполне можно было бы ускорить в 20-30 раз а с использованием 4 GPU типа Titan до 100 раз.
Но это уже сам Microsoft только внутри у себя может сделать

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

Mnior
--Колумнстор векторизация не задействована, это не говоря о других весчах.
Это в скуле, тот что 2012 . Но нужно по колонкам конечно разбить, чтоб батчинг заработал.
Сия чуда у меня нет, но если имеется и интересно можете попробовать. Тут иногда ошивает гуру по данному делу.


Я это и имел ввиду когда говорил что mssql сломается. У мене есть задачи со стороной матрицы 500,000 элементов. Поэтому создание такого количества колонок не поможет.

и многие не рассматривают решение этих задач на SQL по этой же причине.
14 май 13, 20:23    [14295379]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
leov
жаль что подходящую работу для него найти это отдельная работа


страховые компании зачастую ишут людей со знаниями MPI и CUDA для расчетов страховых рисков и прочей статистики. Если MPI к SQL совершенно параллелен то CUDA отлично к нему клеится.

Да и резюме красивше выглядит. Больших знаний по C там не нужно.
14 май 13, 20:30    [14295401]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
--------------------------------
И где бы еще на сервере баз данных графическую плату найти


есть не тока GPU на графических картах но чисто GPU типа Nvidia Tesla.

до 4 карт можно впихнуть в некоторые платы.
14 май 13, 20:31    [14295406]     Ответить | Цитировать Сообщить модератору
 Re: GEMM function on TSQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Lepsik
Сравнением я лишь показал что данная проблемма сушествует
Какая проблема?
Сначала придумем проблему - "а давайте на скуль перенесём", а потом её будет "решать" - "а давайте мы из скуля вынесем".
Анекдот про еврея и осла.

Lepsik
14276236
Ок. Ждём. А потом опишите в чём принципиальная сложность для реализации или не сдандартность.

Lepsik
сортировка на GPU очень хорошо переносится
Вместе с транзакционностью и целостностью и надёжностью системы? И напишите отношение в потреблениии/тепловыделении, потреблении памяти и главное нагрузку на IO (шину), для многопоточной устойчивости, а также сравнении в узких местах системы.

Мечтать полезно. Я думаю что зерно есть в ваших словах, но может расширение функций проца быть больше смысла.
А в добавок MSSQL нехватает именно разных алгоритмов сортировок, ибо в разных частях плана (в разных ситуациях) (не)линейность данных разная.
Вот кто делает из присутствующих статистический анализ планов? И их качественность в каждом операторе?

Lepsik
поиск изображений в базе можно сделать
Нужно. Как раз задача для MS Research. Где нужно обсосать досконально задачи, разные варианты и в итоге решить - а стоит ли овчинка выделки.
К примеру простой алгоритм работающий под CPU только на 3% хуже более точного и быстрого на GPU и его хватит за глаза.
На хабре была статейка про "темный кремний". Не всё так просто.

Lepsik
ряд научных задач связан с большими массивами и большими затратами на обработку.
Да-да, данных совершенно не вписывающихся в реляционый подход по большей части. Научные задачи частны и специализированны и не вписываются в автоматизацию бизнеса.

Lepsik
и многие не рассматривают решение этих задач на SQL по этой же причине (дофига колонок).
Не преувеличивайте.
Забивать микроскопом гвозди израт и не надо делать его бронированным ради этого.

Вам не нужно пытаться придумать пример необходимости - тупое и неблагодарное это занятие. Хватает что бы вы описали в чём сложность использования GPU на скуле и как это обойти. А найдётся или нет хотя бы один реальный случай уже не важно.
15 май 13, 02:37    [14296540]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить