antonmks / Alenka

GPU database engine
Other
1.17k stars 120 forks source link

Automatic code-generation and definition strings lengths from 1 to 25. #20

Closed AlexeyAB closed 11 years ago

AlexeyAB commented 11 years ago

Automatic code-generation and definition strings lengths from 1 to 25, done through the unrolling the templated functor. Added additional comparison in struct Str and template parameter - the type of character of string.

antonmks commented 11 years ago

Thank you for a clever template programming ! The only problem is that nvcc now asks for /bigobj flag and doesn't allow me to precompile strings.obj file(I get an error if I tried to link a precompiled strings.obj) . I can compile it by including strings.cu on a command line like this :

nvcc --compiler-options /bigobj --compiler-options /MD -O3 -arch=sm_20 -lcuda -lcudpp64 -lcudpp_hash64 -o alenka merge.obj MurmurHash2_64.obj filter.obj strings.cu select.obj zone_map.obj itoa.obj atof.obj cm.obj bison.obj

But compiling strings.cu every time when I need to build alenka executable takes a lot of time. So if you know how to make nvcc accept a precompiled with /bigobj file strings.obj - let me know.

Best regards,

Anton

AlexeyAB commented 11 years ago

I use MSVS2010 + CUDA5.0 and I have no problems with the building and linking of the object files, created with /bigobj. If you have problems with large files and with the speed of compilation - the best solution is to place functions in different translation units. This will increase the speed of compilation and will motivate to the new changes.

In the new commit i commented out one of the functions for GROUP BY, which is unused now. Now compiler does not require use /bigobj.

If this feature will be need or will necessary to increase the UNROLL_COUNT, it is proposed to go through the increase of translation units and to scatter functions across them.